Sto cercando di implementare un programma in VB il quale interfacciandosi su un database Access 2000,il quale mi permetta di effettuare un JOIN fra due entità una la quale mi identifica i Proprietari di esercizi commerciali e l'altra mi identifica gli Esercizi commerciali steffi; ovviamente si sta parlando di una relazione 1:N, inquanto un proprietario può avere èiù di un negozio. Lasciando stare comunque problematiche di carattere relazionale, le quali mi sembrano corrette, ho avuto due problemi durante l'implementazione di VB, le quali vengono di seguito riportate in elenco:
1.
Avrei voluto effettuare una connessione al database senza DSN, ma ho un messaggio d'errore il quale mi afferma: "IMPOSSIBILE TROVARE ISAM INSTALLABILE"; premetto che uso un SO Windows 2000 Prof. e che ho installato SP5, quindi in teoria non dovrei avere tale messaggio d'errore, comunque per ovviare temporaneamente a tale problematica ho effettuato una connessione DSN. Sotto viene riportata la sintassi accusata d'errore a Run-Time:
codice:
'APRE LA CONNESSIONE
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=SchedaE.mdb"
cn.ConnectionString = "Driver=Microsoft Access Driver (*.mdb);DBQ=SchedaE.mdb"
cn.Open
2.
Nella visualizzazione di una sola tabella con una semplice SELECT non ho problemi, diversamente si verifica per il JOIN fra le entità Proprietari ed Esecizi inquanto al momento dell'esecuzione della query ho il seguente messaggio d'errore: "[Microsoft][Driver ODBC Microsoft Access] Parametri Insufficienti. Previsto 1."
Già vi anticipo che la riga incriminata è nel momento in cui si tenta di eseguire il metodoto Open dell'oggetto rs il quale identifica il recordset
codice:
Private Sub cmdEsercizi_Click()
'CIUDO IL VECCHIO RECORDSET
rs.Close
'JOIN
rs.Source = "SELECT * FROM Proprietari,Esercizi WHERE Proprietari.IdProprietaro = Esercizi.IdProprietario"
rs.Open 'ERRORE!!!!
rs.MoveFirst
'VISUALIZZA IL CONTENUTO NEL FORM
txtDenominazione.Visible = True
txtDenominazione.Text = rs.Fields("Denominazione")
End Sub
Per completezza e maggior chiarezza sotto viene riportato l'intero listato del programma:
Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Private Sub Form_Load()
'APRE LA CONNESSIONE
Set cn = New ADODB.Connection
'cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=SchedaE.mdb"
'cn.ConnectionString = "Driver=Microsoft Access Driver (*.mdb);DBQ=SchedaE.mdb"
cn.Open "DSN=SchedaE"
'APRE UN RECORDSET
Set rs = New ADODB.Recordset
rs.ActiveConnection = cn
rs.CursorType = adOpenStatic
rs.Source = "SELECT * FROM Proprietari"
rs.Open
rs.MoveFirst
'VISUALIZZA IL CONTENUTO NEL FORM
DisplayCurrentRecord
End Sub
Private Sub cmdEsercizi_Click()
'CIUDO IL VECCHIO RECORDSET
rs.Close
'JOIN
rs.Source = "SELECT * FROM Proprietari,Esercizi WHERE Proprietari.IdProprietaro = Esercizi.IdProprietario"
rs.Open
rs.MoveFirst
'VISUALIZZA IL CONTENUTO NEL FORM
txtDenominazione.Visible = True
txtDenominazione.Text = rs.Fields("Denominazione")
End Sub
Sub DisplayCurrentRecord()
Dim i As Integer
Dim s As String
If rs.BOF Then rs.MoveFirst
If rs.EOF Then rs.MoveLast
Clear
txtCognome.Text = rs.Fields("Cognome")
txtNome.Text = rs.Fields("Nome")
End Sub
Private Sub cmdNext_Click()
rs.MoveNext
DisplayCurrentRecord
End Sub
Private Sub cmdPrevious_Click()
rs.MovePrevious
DisplayCurrentRecord
End Sub
Sub Clear()
txtCognome.Text = ""
txtNome.Text = ""
End Sub
Private Sub cmdEsci_Click()
'CHIUDE TUTTO
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End
End Sub
P.S. All'università usiamo MYSQL è possibile interfacciarlo con VB? Se si qualcuno ha qualche esempio da farmi studiare?