Salve ragazzi, era da tanto che non scrivevo una nuova discussione perché ho sempre trovato la soluzione al mio problema cercando in questo grande portale! Ma purtroppo, dopo una settimana di dure, lunghe e impazientiate ricerche ho deciso di arrendermi e postare qui il mio problema:
Sono disperato, non riesco a creare un client MySQL in Visual Basic 6.0, monto Windows 7 Ultimate 32bit.
Ho provato a creare l'applicazione usando i driver ODBC, aggiungendo nei Riferimenti del progetto la libreria "Microsoft Remote Data Object 2.0", qui di seguito il source:
Private Sub Connetti_Click()
Dim cnMySql As New rdoConnection
Dim rdoQry As New rdoQuery
Dim rdoRS As rdoResultset
' set up a remote data connection
' using the MySQL ODBC driver.
' change the connect string with your username,
' password, server name and the database you
' wish to connect to.
cnMySql.CursorDriver = rdUseOdbc
cnMySql.Connect = "uid=root;pwd=passwordmia; server=localhost;" & _
"driver={MySQL ODBC 3.51 Driver} database=test;dsn=;"
cnMySql.EstablishConnection
' set up a remote data object query
' specifying the SQL statement to run.
With rdoQry
.Name = "selectUsers"
.SQL = "select * from segnale"
.RowsetSize = 1
Set .ActiveConnection = cnMySql
Set rdoRS = .OpenResultset(rdOpenKeyset, rdConcurRowVer)
End With
' loop through the record set
' processing the records and fields.
Do Until rdoRS.EOF
With rdoRS
' your code to process the fields
' to access a field called username you would
' reference it like !username
rdoRS.MoveNext
End With
Loop
' close record set
' close connection to the database
rdoRS.Close
cnMySql.Close
End Sub
"debuggando" mi ritrovo nella linea di codice cnMySql.CursorDriver = rdUseOdbc il codice di errore "Errore di run-time '429': Il componente Activex non può creare l'oggetto"
Ho provato a risolvere il problema aggiungendo nei Riferimenti anche la libreria "Microsoft DAO 3.6 Object Library" ma niente.
Ho provato anche con la 3.51 e a registrare nuovamente la libreria dll tramite il comando regsvr32 con una risposta di conferma positiva di registrazione ma che non risolve ancora il problema dell'errore 429.
Disperato, cerco di crearmi il client con ADODB, seguo questa guida passo per passo, scaricandomi sia i driver OLDEDB che il progetto per intero ma ancora niente.
Posto qui il codice:
Public conn, rs
'Variabili MySQL
Public mysql_host As String
Public mysql_userid As String
Public mysql_password As String
Public mysql_database As String
Public mysql_query As String
Public mysql_port As String
Public id_update As Integer
'Tasto Connetti
Private Sub Command1_Click()
Call do_connect
End Sub
'Tasto Disconnetti
Private Sub Command2_Click()
Call do_disconnect
End Sub
Private Sub Command3_Click()
Dim query As String
Set rs = CreateObject("ADODB.Recordset") 'setta rs come un record per ADO
List1.Clear
'Esegue solo se la connessione è attiva
If (conn.State = adStateOpen) Then
query = "SELECT * FROM anagrafe"
rs.Open query, conn
'Visualizza il numero di recor trovati
Debug.Print "Numero di record trovati " & rs.RecordCount
'Visualizza i record trovati
If (rs.RecordCount > 0) Then
Do While Not (rs.EOF) 'Esegue il ciclo fino alla fine
List1.AddItem rs("id") & " - " & rs("nome") & " - " & rs("cognome")
List1.ItemData(List1.NewIndex) = rs("id")
rs.MoveNext 'Passa al record successivo
Loop
End If
End If
Set rs = Nothing
End Sub
Private Sub Command4_Click()
Dim query As String
If (conn.State = adStateOpen) Then 'Esegue solo se si è connessi
query = "INSERT INTO anagrafe (id, nome, cognome) VALUES ('', '" & TextNome.Text & "', '" & TextCognome.Text & "')"
conn.Execute query
Debug.Print "Inserimento del record riuscito"
Call Command3_Click 'Rieffettua la select
End If
End Sub
Private Sub Command5_Click()
If (id_update > 0) And (conn.State = adStateOpen) Then
query = "DELETE FROM anagrafe WHERE id = '" & Str(id_update) & "'"
conn.Execute query
Debug.Print "Rimozione del record " & id_update & " riuscita"
Call Command3_Click 'Rieffettua la select
End If
End Sub
Private Sub Command6_Click()
If (id_update > 0) And (conn.State = adStateOpen) Then
query = "UPDATE anagrafe SET nome = '" & TextNome.Text & "', cognome = '" & TextCognome.Text & "' WHERE id = '" & Str(id_update) & "'"
conn.Execute query
Debug.Print "Aggiornamento del record " & id_update & " riuscito"
Call Command3_Click 'Rieffettua la select
End If
End Sub
Private Sub Form_Load()
Set conn = CreateObject("ADODB.Connection")
'Inizializza le variabili
mysql_host = "127.0.0.1"
mysql_userid = "root"
mysql_password = "passwordmia"
mysql_database = "test"
mysql_port = "3306"
'Crea la stringa di connessione
connect_string = "Provider=MySqlProv;Data Source=mysql_odbc_dsn" & Chr(34) & "server=" & mysql_host & ";DB=" & mysql_database & ";User=" & mysql_userid & ";Password=" & mysql_password & ";Option=131088; Stmt=;Port=" & mysql_port & "" & Chr(34)
conn.Provider = "MySqlProv"
conn.ConnectionString = connect_string
conn.CommandTimeout = 1000
conn.ConnectionTimeout = 1000 'Tempo in mS prima che il tentativo di connessione vada in TimeOut
conn.CursorLocation = adUseServer
End Sub
Public Sub do_connect()
'On Error GoTo Connect_Error
If Not (conn.State = adStateOpen) Then
'Evita la comparsa della finestra POPUP del provider di MySQL
conn.Properties("PROMPT") = adPromptNever
conn.Open 'Instaura la connessione con il Database"
Debug.Print "Connessione con il server MySQL riuscita"
End If
Exit Sub
Connect_Error:
MsgBox "Connessione con il server MySQL " & mysql_host & " fallita", vbCritical, "Attenzione"
End Sub
'Termina la connessione con il server MySQL
Public Sub do_disconnect()
If conn.State = adStateOpen Then 'Esegue solo se si connessi
conn.Close 'Chiude la connessione con MySQL
Debug.Print "Disconnessione da MySQL riuscita"
End If
End Sub
'Termina l'applicazione
Private Sub Form_Unload(Cancel As Integer)
Call do_disconnect
Set conn = Nothing
Unload Me
End Sub
Private Sub List1_DblClick()
Set rs = CreateObject("ADODB.Recordset") 'setta rs come un record per ADO
id_update = List1.ItemData(List1.ListIndex)
If (conn.State = adStateOpen) Then
query = "SELECT * FROM anagrafe WHERE id ='" & id_update & "' LIMIT 1"
rs.Open query, conn
'Visualizza i record trovati
If (rs.RecordCount > 0) Then
TextNome.Text = rs("nome")
TextCognome.Text = rs("cognome")
End If
End If
End Sub
Eseguo l'applicazione e nella riga conn.Properties("PROMPT") = adPromptNever mi da questo errore: Errore di run-time '37606'. Impossibile trovare il provider. E' possibile che non sia installato correttamente.
Dunque reinstallo i driver OLEDB e l'errore precedente non esce ma nella riga successiva, ossia conn.Open 'Instaura la connessione con il Database" mi esce questo altrettanto errore: Errore di run-time '-2147467259 (8004005)': Errore non specificato.
Sono disperato... la mia pazienza è finita!
Ho scaricato un Freeware Navicar Lite (client mysql) per connettermi nel mio database locale e funziona tutto correttamente. Anche dalla pagina phpMyAdmin tutto regolare.
Il problema sussiste quindi nella programmazione e non so più davvero dove sbattere la testa![]()
Non mi importa in che modo o usando quale driver posso collegarmi tramite un applicazione VB6, l'importante è che funzioni!
Spero di essere stato chiaro e tecnico, grazie in anticipo per chi sa darmi qualche dritta e una soluzione.