> Könntest du sie schon raus geben?
ein paar Anmerkungen zu Code:
* Ich verwende z.Zt. die Standarddatei-Funktionalitäten von PB. Mit den
FastFile-Routinen von Rings würde es erheblich schneller laufen. Leider hat
sich im Code von Rings ein kleiner Fehler eingeschlichen, der es
verhindert, Dateien korrekt auszulesen, deren Zeilentrenner nur aus
einem LF besteht. Wenn ich wieder Zeit habe, dann schaue ich mir den
FF-Source noch mal genauer an.
* Im Code verwende ich englische Kommentare. Wäre nett, wenn da
jemand mal drüberschauen würde, der des englischen mächtig ist
Code: Alles auswählen
; This example converts a mySQL-Database-Dump into
; a SQLite3-Database
Procedure mySQL_2_SQLite(dbHandle.l, mySQLDatabaseDump.s)
FF = ReadFile(#PB_Any, mySQLDatabaseDump)
If FF
While Eof(FF) = 0
sLine.s = ReadString()
If FindString(sLine, "CREATE TABLE", 1)
sQuery.s = sLine
Repeat
sLine.s = ReadString()
If sLine = "" : Break : EndIf
If FindString(sLine, "PRIMARY", 1) = 0 And FindString(sLine, "KEY", 1) = 0 And Left(sLine, 1) <> ")"
sLine = Trim(sLine)
pos = FindString(sLine, ")", 1)
If pos
sQuery + Left(sLine, pos) + ","
Else
sQuery + sLine
EndIf
EndIf
ForEver
sQuery = Left(sQuery,Len(sQuery)-1) + ")"
Debug sQuery
SQLite3_Execute(sQuery, dbHandle)
If SQLite3_GetLastMessage() <> "OK"
Debug ""
Debug SQLite3_GetLastMessage()
CallDebugger
EndIf
TextFields = #False
If FindString(sQuery, "char", 1) Or FindString(sQuery, "text", 1)
TextFields = #True
EndIf
For lCounter = 0 To 3
sLine.s = ReadString()
Next
SQLite3_Execute("Begin Transaction;", dbHandle)
Repeat
sLine.s = ReadString()
If sLine = "" : Break : EndIf
If TextFields
; Some Chars have to be converted before
; inserting into the SQLite-Database
sLine = ReplaceString(sLine, "\\'", "'")
sLine = ReplaceString(sLine, "\'", Chr(34))
sLine = ReplaceString(sLine, "\" + Chr(34), Chr(34))
EndIf
SQLite3_Execute(sLine, dbHandle)
If SQLite3_GetLastMessage() <> "OK"
; If an error occurred -> Show actual line
Debug ""
Debug sLine
Debug SQLite3_GetLastMessage()
CallDebugger
EndIf
ForEver
SQLite3_Execute("Commit;", dbHandle)
EndIf
Wend
CloseFile(FF)
EndIf
EndProcedure
SQLite3_Init()
; Please customize the following two pathes
; before running the code!
mySQLDatabaseDump.s = "d:\data\pb-board\german"
SQLite3Database.s = "d:\data\pb-board\german.db"
dbHandle = SQLite3_CreateDatabase(SQLite3Database, #True)
If dbHandle
; Some of the textlines are larger than 64.000 Chars
; Please customize, if your textlines are larger then 100.000 Chars:
DG_SetPBStringSize(100000)
z1 = ElapsedMilliseconds()
mySQL_2_SQLite(dbHandle, mySQLDatabaseDump)
SQLite3_CloseDatabase(dbHandle)
SQLite3_End()
z2 = ElapsedMilliseconds()
MessageRequester("mySQL_2_SQLite", "Ready" + #CRLF$ + "Needed time: " + Str((z2-z1)/1000) + " Seconds")
Else
MessageRequester("mySQL_2_SQLite", "Couldn't create the SQLite3-Database.")
EndIf
Ich habe den Code ebenfalls im
webPM eingeloggt.
URL =
http://cvs.pureforge.net/pbosl/
User = purebasic
Passwort = purebasic
Nach Einloggen findet man den aktuellen Source hier:
Examples: /PBOSL_SQLite3/PBOSL_mySQL_2_SQLite.pb
Grüße ... Kiffi