Goede avond,
Ik ben bezig met een online product catalogus voor een klant, deze wordt gemaakt in Zend Framework. 'Achter' de online catalogus zit een MySQL database.
Echter, de klant maakt gebruikt van een inkoop/verkoop systeem dat ligt gedateerd is en werkt met een Visual FoxPro database (.DBF).
Voor het periodiek wegschrijven van nieuwe voorraden etc. van het inkoop/verkoop systeem naar de MySQL database heb ik een programma geschreven in VB.NET. Maar ik ben tegen een probleem opgelopen, namelijk mijn ODBC provider connect niet naar sommige .DBF files.
Ik krijg de volgende foutmelding:
ERROR [HY000][Microsoft][ODBC dBase Driver] External table is not in the expected format.
Via Google kom ik op oude forums terecht en daar wordt gezegd dat de betreffende ODBC driver oud is en niet alle versies goed support. Bovendien wordt vermeld dat er ook een alternatief is, namelijk de OleDb driver, maar die geeft exact dezelfde foutmelding...
Hier even de basis van het opzetten van een connectie met 'n .DBF file:
//Connectie string
My.Settings.DBFConnectionString = "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\projecten\koningstuin"
//Connectie, command, adapter en reader
Public dbfcon As New OdbcConnection(My.Settings.DBFConnectionString)
Public dbfcmd As New OdbcCommand
Public dbfda As New OdbcDataAdapter("", dbfcon)
Public dbfdr As OdbcDataReader
//Openen van connectie
Public Sub OpenDBFCon()
Try
If dbfcon.State = ConnectionState.Closed Then
dbfcon.Open()
End If
Catch ex As Exception
ShowError(ex.Message & vbnewline & ex.StackTrace, "Fout")
End Try
End Sub
//Functie voor vullen van Dataset met opgegeven query
Public Function LoadDataSetDBF(ByVal sqlstr As String) As DataSet
OpenDBFCon()
Dim ds As New DataSet
Try
If dbfda.SelectCommand Is Nothing Then
dbfda = New odbcDataAdapter("", dbfcon)
End If
dbfda.SelectCommand.CommandText = sqlstr
dbfda.SelectCommand.Connection = dbfcon
dbfda.SelectCommand.ExecuteNonQuery()
dbfda.Fill(ds)
Return ds
Catch ex As Exception
ShowError(ex.Message & vbNewLine & ex.StackTrace, "Query Fout")
Finally
dbfda.Dispose()
End Try
Return Nothing
End Function
//Uiteindelijk een dataset vullen met data uit .DBF file m.b.v. query
Private m_ds as new DataSet = LoadDataSetDBF("SELECT * FROM Orders.DBF")
Nogmaals: Voor 16 van de 20 files werkt dit prima, maar voor de andere 4 krijg ik de hierboven vermelde foutmelding. Ik heb een sterk vermoeden dat het iets is m.b.t. die OBDC driver, volgens mij is er ook nog een VPFODBC driver maar deze krijg ik niet aan de praat. Bovendien zijn er verschillende soorten connection strings mogelijk......
Wie o wie heeft ervaring met dit probleem of überhaupt ervaring met FoxPro i.c.m. VB.NET en kan mij verder helpen?
Groetjes,
Bas
Ik ben bezig met een online product catalogus voor een klant, deze wordt gemaakt in Zend Framework. 'Achter' de online catalogus zit een MySQL database.
Echter, de klant maakt gebruikt van een inkoop/verkoop systeem dat ligt gedateerd is en werkt met een Visual FoxPro database (.DBF).
Voor het periodiek wegschrijven van nieuwe voorraden etc. van het inkoop/verkoop systeem naar de MySQL database heb ik een programma geschreven in VB.NET. Maar ik ben tegen een probleem opgelopen, namelijk mijn ODBC provider connect niet naar sommige .DBF files.
Ik krijg de volgende foutmelding:
ERROR [HY000][Microsoft][ODBC dBase Driver] External table is not in the expected format.
Via Google kom ik op oude forums terecht en daar wordt gezegd dat de betreffende ODBC driver oud is en niet alle versies goed support. Bovendien wordt vermeld dat er ook een alternatief is, namelijk de OleDb driver, maar die geeft exact dezelfde foutmelding...
Hier even de basis van het opzetten van een connectie met 'n .DBF file:
//Connectie string
My.Settings.DBFConnectionString = "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\projecten\koningstuin"
//Connectie, command, adapter en reader
Public dbfcon As New OdbcConnection(My.Settings.DBFConnectionString)
Public dbfcmd As New OdbcCommand
Public dbfda As New OdbcDataAdapter("", dbfcon)
Public dbfdr As OdbcDataReader
//Openen van connectie
Public Sub OpenDBFCon()
Try
If dbfcon.State = ConnectionState.Closed Then
dbfcon.Open()
End If
Catch ex As Exception
ShowError(ex.Message & vbnewline & ex.StackTrace, "Fout")
End Try
End Sub
//Functie voor vullen van Dataset met opgegeven query
Public Function LoadDataSetDBF(ByVal sqlstr As String) As DataSet
OpenDBFCon()
Dim ds As New DataSet
Try
If dbfda.SelectCommand Is Nothing Then
dbfda = New odbcDataAdapter("", dbfcon)
End If
dbfda.SelectCommand.CommandText = sqlstr
dbfda.SelectCommand.Connection = dbfcon
dbfda.SelectCommand.ExecuteNonQuery()
dbfda.Fill(ds)
Return ds
Catch ex As Exception
ShowError(ex.Message & vbNewLine & ex.StackTrace, "Query Fout")
Finally
dbfda.Dispose()
End Try
Return Nothing
End Function
//Uiteindelijk een dataset vullen met data uit .DBF file m.b.v. query
Private m_ds as new DataSet = LoadDataSetDBF("SELECT * FROM Orders.DBF")
Nogmaals: Voor 16 van de 20 files werkt dit prima, maar voor de andere 4 krijg ik de hierboven vermelde foutmelding. Ik heb een sterk vermoeden dat het iets is m.b.t. die OBDC driver, volgens mij is er ook nog een VPFODBC driver maar deze krijg ik niet aan de praat. Bovendien zijn er verschillende soorten connection strings mogelijk......
Wie o wie heeft ervaring met dit probleem of überhaupt ervaring met FoxPro i.c.m. VB.NET en kan mij verder helpen?
Groetjes,
Bas