double7 hat geschrieben:Danke für den SQLiteman Tipp. Den werde ich gleich mal testen![]()
Die Ermittlung des max Schlüsselwertes mache ich, damit ich kompatibel zu diversen Datenbanken bin. Entwickelt wird erstmal mit der SQLite, das Programm soll später aber auch mit ODBC oder nativ Oracle / MSSQL funktionieren. Ich gehe dann lieber etwas umständlichere Schritte, spare mir dafür aber später Zeit
wennze meins.
So ein selbstlaufender Index ist aber eigentlich überall Standard. Wenn nicht, isses eigentlich auch kein DBMS was man
nutzen möchte.
Sobald Du andere Datenbanken benutzt, wirst Du die SQL-Syntax vermutlich eh etwas angleichen müssen.
Die SQL-Syntax sollte zwar Standard sein, isses aber wie soviele Standards dann am Ende doch nicht so ganz.
Auch wie da was gespeichert wird ist durchaus nicht konsistent.
Gerade SQLite ist hier z.B. typenlos. Du kannst also durchaus Texte in Integer-felder hinterlegen.
Das sollte man nicht tun, kann man aber. Auch aus Versehen. Oder boshafter Absicht.

Es gibt externe tools, die sowas dann wiederum nahezu korrekterweise als 0 darstellen 'Sqlite Administrator' oder eben
als Text (sqliteman kennt auch solche eigentlich verqueren Inhalte).
Code: Alles auswählen
CreateFile(0,"D:\h2g2.db3")
CloseFile(0)
UseSQLiteDatabase()
OpenDatabase(0,"D:\h2g2.db3","","",#PB_Database_SQLite)
DatabaseUpdate(0,"create table whatever (inh Integer)")
try.s=DatabaseError()
If tryold.s<>try
Debug "Error "+try
tryold=try
EndIf
DatabaseUpdate(0,"Insert into whatever values('die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest.');")
try.s=DatabaseError()
If tryold.s<>try
Debug "Error "+try
tryold=try
EndIf
DatabaseUpdate(0,"Insert into whatever values(42);")
try.s=DatabaseError()
If tryold.s<>try
Debug "Error "+try
tryold=try
EndIf
DatabaseQuery(0,"select * from whatever")
While NextDatabaseRow(0)
Debug GetDatabaseString(0,0) ;Man kann Integer auch als String auslesen
Wend
FinishDatabaseQuery(0)
CloseDatabase(0)