Hallo Leute,
ich habe ein Problem, vielleicht wei mir einer einen Rat. Ich habe ein dBase Datei, die ich “nur” unter Windows updaten kann. Die ein zigste Mglichkeit die ich gefunden habe, ist die ODBC Schnittstelle. Ich habe ca 4000 Datenstze zum updaten, dafr bentigt die ODBC Schnittstelle 17 Minuten. Das ist fr meines Erachtens viel zu lange. Meine Frage an euch ist, kann das sein, liegt das an der ODBC Schnittstelle oder an meiner Programmierung. Ich habe verschiedene Datasource Parameter ausprobiert, aber es hat sich nichts gendert. Wenn ich kein Update habe, bin ich ihn 50 Sekunden fertig.
[code]Dim dbODBC As New ODBCDatabase
dbODBC.DataSource = “Driver={Microsoft dBASE Driver (*.dbf)};Dbq=Z:\Xojo\Transfer;Database=Material.dbf”
…
// DBF Datei
Dim sqlSeek As String
Dim sqlUpdate As String
Dim rs As RecordSet
rs = dbODBC.PrimaryKeys(“ART_NR”)
// a_DBF - Public Xojo.Core.Dictionary
// (0) - Artikelnummer (Text)
// (1) - Rabatt (False) oder Einzelpreis (True)
// (2) - V oder M
// (3) - Einheitspreis (kleinster) / Rabattsatz (hchster)
// (4) - Aktuelle Zeile in der Listbox
For i=0 To a_DBF.Ubound
If a_DBF(i).Value(1) Then //Einzelpreis
sqlSeek = “SELECT * FROM MATERIAL WHERE ART_NR = '”+a_DBF(i).Value(0)+"’"
sArtNum = a_DBF(i).Value(0)
rs = dbODBC.SQLSelect(sqlSeek)
...
If rs <> Nil Then
...
sqlUpdate = "UPDATE MATERIAL SET" + _
" EK = " + cEK.ToText + "," + _
" LIEFERANT1 = '" + sLiefer1 + "'," + _
" LIEFERANT2 = '" + sLiefer2 + "'," + _
" PR_PFLEGE = {D '" + dHeute.SQLDate.ToText + "'}" + _
" WHERE ART_NR = '" + sArtNum + "'"
dbODBC.SQLExecute(sqlUpdate)
End If
Else // Rabatt
sqlSeek = “SELECT * FROM MATERIAL WHERE ART_NR LIKE '”+a_DBF(i).Value(0)+"%’"
rs = dbODBC.SQLSelect(sqlSeek)
If rs <> Nil Then
While Not rs.EOF
sArtNum = ConvertEncoding(rs.Field("ART_NR").StringValue, Encodings.WindowsLatin1)
....
If a_DBF(i).Value(3) <> rs.Field("EKRABATT1").CurrencyValue Then
...
sqlUpdate = "UPDATE MATERIAL SET" + _
" EK = " + cEK.ToText + "," + _
" EKRABATT1 = " + cZahl.ToText + "," + _
" LIEFERANT1 = '" + sLiefer1 + "'," + _
" LIEFERANT2 = '" + sLiefer2 + "'," + _
" PR_PFLEGE = {D '" + dHeute.SQLDate.ToText + "'}" + _
" WHERE ART_NR = '" + sArtNum + "'"
dbODBC.SQLExecute(sqlUpdate)
....
End If
End If
rs.MoveNext
Wend
End If
End If
Next
dbODBC.Close
Return
[/code]