Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Long, _
    Source As Long, ByVal Length As Long)

Public Declare Function mysql_init Lib "libmysql.dll" Alias "mysql_init" _
        (ByVal lMYSQL As Long) As Long

Public Declare Function mysql_real_connect Lib "libmysql.dll" Alias "mysql_real_connect" _
        (ByVal lMYSQL As Long, _
        ByVal sHostName As String, _
        ByVal sUserName As String, _
        ByVal sPassword As String, _
        ByVal sDbName As String, _
        ByVal lPortNum As Long, _
        ByVal sSocketName As String, _
        ByVal lFlags As Long) As Long

Public Declare Function mysql_query Lib "libmysql.dll" Alias "mysql_query" _
        (ByVal lMYSQL As Long, _
        ByVal sQueryString As String) As Long

Public Declare Function mysql_fetch_row Lib "libmysql.dll" Alias "mysql_fetch_row" _
        (ByVal lMYSQL_RES As Long) As Long

Public Declare Function mysql_num_fields Lib "libmysql.dll" Alias "mysql_num_fields" _
        (ByVal lMYSQL_RES As Long) As Long
        
Public Declare Function mysql_num_rows Lib "libmysql.dll" Alias "mysql_num_rows" _
        (ByVal lMYSQL_RES As Long) As Long
        
Public Declare Function mysql_store_result Lib "libmysql.dll" Alias "mysql_store_result" _
        (ByVal lMYSQL As Long) As Long
        
Public Declare Sub mysql_free_result Lib "libmysql.dll" Alias "mysql_free_result" _
        (ByVal lMYSQL As Long)
        
Public Declare Function mysql_list_tables Lib "libmysql.dll" Alias "mysql_list_tables" _
        (ByVal lMYSQL As Long, _
        ByVal wild As Long) As Long
        
Public Declare Function mysql_fetch_field_direct Lib "libmysql.dll"  Alias "mysql_fetch_field_direct" _
        (ByVal lMYSQL_RES As Long, _
        ByVal lFieldNum As Long) As Long
        
Public DECLARE FUNCTION mysql_errno LIB "libmySQL.DLL" ALIAS "mysql_errno" _
        (ByVal lMYSQL As Long) AS LONG
        
Public DECLARE FUNCTION mysql_error LIB "libmySQL.DLL" ALIAS "mysql_error" _
        (ByVal lMYSQL As Long) AS LONG


Private Declare Sub connect(pMySQL As Long,sHostName As String,sUserName As String,sPassword As String,sDbName As String)
Private Declare Sub ListRecords(pMySQL As Long,sQuery As String)
Private Declare Sub ListFields(pMySQL As Long,sQuery As String)

Dim pMySQL As Long
Dim pMyErrorMsg As Long, pMyErrorNum As Long
Dim sHostName As String, sUserName As String, sPassword As String,sDbName As String
Dim sQuery As String

sHostName = "localhost"
sUserName = "root"
sPassword = ""
sDbName = "dbname"
pMySQL = mysql_init(0)

Call Connect(pMySQL,sHostName,sUserName,sPassword,sDbName)

sQuery = "select * from tablename"

Call ListFields(pMySQL,sQuery)
Call ListRecords(pMySQL,sQuery)

Private Sub connect(pMySQL As Long,sHostName As String,sUserName As String,sPassword As String,sDbName As String)
If mysql_real_connect(pMySQL, sHostName, sUserName, sPassword, sDbName, 3306, "", 0) = 0 Then
    pMyErrorMsg = mysql_error(pMySQL)
    print "Message Error : " , varptr$(pMyErrorMsg)
    pMyErrorNum = mysql_errno(pMySQL)
    print "Number Error : " , pMyErrorNum

 '2003 CR_CONN_HOST_ERROR
 '2005 CR_UNKNOWN_HOST
 '1044 ER_DBACCESS_DENIED_ERROR
 
EnD
Else
    Print " connected successfully"
End If
End SUB


Private Sub ListFields(pMySQL As Long, sQuery As String)

LONG_SIZE = 4

Dim lMYSQL_FIELD As Long, pMyRES As Long
Dim i As Long, j As Long, nbrFields As Long, lpName As Long

If (mysql_query(pMySQL,sQuery) = 0) Then

    pMyRES = mysql_store_result(pMySQL)

  If (pMyRES <> 0) Then

    nbrFields = mysql_num_fields(pMyRES)
    print "nbfields ", nbfields
    If nbrFields > 0 Then

    for lField = 0 to nbrFields - 1
    lMYSQL_FIELD = mysql_fetch_field_direct(pMyRES, lField)

    If lMYSQL_FIELD = 0 Then Exit sub
    LONG_SIZE = 4
    CopyMemory VARPTR(lpName), lMYSQL_FIELD, LONG_SIZE 'LONG_SIZE
    Print "fieldname (",lField,"): " ,varptr$(lpName)

    End If
    next
  End If
  mysql_free_result (pMyRES)
End If

End Sub

Private SUB ListRecords(pMySQL,sQuery)

Dim pMyRES As Long,pMyROW As Long, myROW As Long
Dim i As Long, j As Long, nbrFields As Long

LONG_SIZE = 4

If (mysql_query(pMySQL, sQuery) = 0) Then

    pMyRES = mysql_store_result(pMySQL)

  If (pMyRES <> 0) Then
    nbrFields = mysql_num_fields(pMyRES)

    For i = 0 To mysql_num_rows(pMyRES) - 1
                pMyROW = mysql_fetch_row(pMyRES)

                for j = 0 To nbrFields - 1
                CopyMemory (VARPTR(myROW), pMyROW+(j * LONG_SIZE), LONG_SIZE )
                print "MYROW (",i,",",j,",):",varptr$(MYrow)
                next
    next

  End If
  mysql_free_result (pMyRES)
else
    pMyErrorMsg = mysql_error(pMySQL)
    print "Message Error : " , varptr$(pMyErrorMsg)
    pMyErrorNum = mysql_errno(pMySQL)
    print "Number Error : " , pMyErrorNum

'1146 ER_NO_DB_ERROR no such table
'1054 ER_BAD_FIELD_ERROR bad field
'1064 ER_PARSE_ERROR parse error (erreur synthaxe)
'1140 ER_MIX_OF_GROUP_FUNC_AND_FIELDS
End If

End Sub

