Ola!
É o seguinte:
Com SQLMIX temos duas formas de acesso. Via ODBC e nativo!
Já testei aqui e funciona 100%
Nativo, test1.prg
#require "rddsql"
#require "sddmy"
#include "dbinfo.ch"
#include "error.ch"
REQUEST SDDMY
REQUEST SQLMIX
ANNOUNCE RDDSYS
FIELD RESIDENTS
PROCEDURE Main()
#if defined( __HBSCRIPT__HBSHELL )
rddRegister( "SQLBASE" )
rddRegister( "SQLMIX" )
hb_SDDMY_Register()
#endif
rddSetDefault( "SQLMIX" )
? "RDDs:"; AEval( rddList(), {| x | QQOut( "", x ) } )
IF rddInfo( RDDI_CONNECT, { "mysql", "localhost", "root","senha_do_root", "test" } ) == 0 // test é o DB que vem por padrão no Mysql.
? "Could not connect to server", rddInfo( RDDI_ERRORNO ), rddInfo( RDDI_ERROR )
RETURN
ENDIF
CreateTable()
? "Let's browse table (press any key)"
Inkey( 0 )
dbUseArea( .T., , "SELECT * FROM country", "country" )
Browse()
? "Let's browse table ordered by resident count (press any key)"
Inkey( 0 )
INDEX ON field->RESIDENTS TAG residents TO country
Browse()
dbCloseAll()
RETURN
STATIC PROCEDURE CreateTable()
? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )
? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" )
? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600), ('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" )
RETURN
E via ODBC test2.prg:
#require "rddsql"
#require "sddodbc"
#include "simpleio.ch"
REQUEST SQLMIX, SDDODBC
PROCEDURE Main()
LOCAL nConnection, nI, aI
#if defined( __HBSCRIPT__HBSHELL )
rddRegister( "SQLBASE" )
rddRegister( "SQLMIX" )
hb_SDDODBC_Register()
#endif
Set( _SET_DATEFORMAT, "yyyy-mm-dd" )
rddSetDefault( "SQLMIX" )
nConnection := rddInfo( RDDI_CONNECT, { "ODBC", "Server=localhost;Driver={MySQL ODBC 5.3 Unicode Driver};dsn=;User=root;Pwd=SUA_SENHA;database=test;" } ) //Não precisa do DSN é opcional
IF nConnection == 0
? "Could not connect to server", rddInfo( RDDI_ERRORNO ), rddInfo( RDDI_ERROR )
RETURN
ENDIF
? nConnection
? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )
? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" )
? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600),('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" )
? dbUseArea( .T., , "SELECT * FROM country", "country" )
? "LASTREC:", LastRec()
DO WHILE ! Eof()
aI := Array( FCount() )
FOR nI := 1 TO FCount()
aI[ nI ] := FieldGet( nI )
NEXT
? RecNo(), hb_ValToExp( aI )
dbSkip()
ENDDO
? "LASTREC:", LastRec()
dbCloseAll()
RETURN
C:\fontes\teste>test2
1
.T.
.T.
.T.
.T.
LASTREC: 1
1 {"LTU", "Lithuania", 3369600}
2 {"USA", "United States of America", 305397000}
3 {"POR", "Portugal", 10617600}
4 {"POL", "Poland", 38115967}
5 {"AUS", "Australia", 21446187}
6 {"FRA", "France", 64473140}
7 {"RUS", "Russia", 141900000}
LASTREC: 7
C:\fontes\teste>
PS.Estou usando harbour 3.4, Mingw 5.1, compilei o Harbour agorinha e instalei o MySQL 5.6 antes de compilar!
Setar o PATH para a DLL do MYSQL quando for acesso nativo.
C:\Program Files\MySQL\MySQL Server 5.6\lib;
Setar a Variavel do Harbour p/ achar e criar as libs do MySQL.
HB_WITH_MYSQL=C:\Program Files\MySQL\MySQL Server 5.6\include
Simples assim! ;-)
Saudações,
Itamar M. Lins Jr.