Hallo Bugfix!
Ich kann dir nur empfehlen, dass du nach Hausnummer 200000 einen Insert machst.
Ich importiere DNS Logfiles in eine SQLite Datenbank und dort bekomme ich einen Speicherfehler da der Insertstring zu groß wird.
Um diesen zu umgehen habe ich dann eben nach 200K einen insert gemacht und die Insertstring Variable "gelöscht".
Auf dein Beispiel angewendet. (Ist jetzt nicht wirklich getestet aber du verstehst sicher was ich damit meine)
Begin Transaction;
Insertstring
Commit Transaction;
Ist meiner Erfahrung nach die schnellste Methode eines Datenimports.
AutoIt
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <File.au3>
Func _Insert($_kind, $_sCSV)
Local $aLines = FileReadToArray($_sCSV)
Local $aSplit
Local $sQuery
Local $iCount200K = 0
Local $sDatabaseFileName = "C:\Sqlite.db3"; Ich deklariere die meistens Global und dann natürlich nicht in der Funktion
For $i = 1 To UBound($aLines) -1
If $iCount200K = 200000 Then ;Nach 200000 inserts werden sie in die Datenbank geschrieben
_sql_write($sDatabaseFileName, $sQuery)
$sQuery = ""
$iCount200K = 0
EndIf
If $_kind = 'Tab1' Then
$aSplit = StringSplit($aLines[$i], ',', 2)
$sQuery &= _
StringFormat("INSERT INTO tab1 VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s');", $i, _
$aSplit[0], $aSplit[1], $aSplit[2], $aSplit[3], $aSplit[4], $aSplit[5])
$iCount200K += 1
Else
$aSplit = _SplitStreetLine($aLines[$i])
$sQuery &= _
StringFormat("INSERT INTO tab2 VALUES (%d, '%s', '%s', '%s', '%s');", $i, _
$aSplit[0], $aSplit[1], $aSplit[2], $aSplit[3])
$iCount200K += 1
EndIf
Next
_sql_write($sDatabaseFileName, $sQuery)
EndFunc
Func _sql_write($sDatabaseFileName, $sInsert)
_SQLite_Startup()
Do
Sleep(Random(20, 250, 1))
_SQLite_Open($sDatabaseFileName)
Until Not @error
_SQLite_Exec(-1, "Begin Transaction;")
If Not _SQLite_Exec(-1, $sInsert) = $SQLITE_OK Then
ConsoleWrite("SQLite Error " & _SQLite_ErrMsg() & @CRLF)
_FileWriteLog("Fehler.log", "SQLite Error " & _SQLite_ErrMsg())
_SQLite_Close()
_SQLite_Shutdown()
Return 0
EndIf
_SQLite_Exec(-1, "Commit Transaction;")
_SQLite_Close()
_SQLite_Shutdown()
Return 1
EndFunc ;==>_sql_write
Alles anzeigen