Seite 1 von 2
[SQLite] Datenbank wie Key/Column löschen?
Verfasst: 03.06.2019 13:47
von Mijikai
Hinzufügen ist kein Problem:
Code: Alles auswählen
;...
request = "ALTER TABLE " + Table + " ADD " + Key + " INTEGER"
ProcedureReturn DatabaseUpdate(*Database,request)
Aber wieder löschen will nicht
Code: Alles auswählen
;...
request = "ALTER TABLE " + Table + " DROP COLUMN " + Key
ProcedureReturn DatabaseUpdate(*Database,request)
Ist es ein anderer Befehl?
Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 03.06.2019 14:07
von Sicro
Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 03.06.2019 14:11
von Kiffi
Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 03.06.2019 14:13
von Mijikai
Danke für die Hilfe

Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 03.06.2019 15:43
von Mijikai
Muss ich alle Befehle einzeln übergeben?
Code: Alles auswählen
Procedure.i TableRemoveKey(*Database,Table.s,Key.s)
Protected request.s
Protected column_count.i
Protected column_name.s
Protected column_type.s
Protected column_index.i
Protected column_test.i
Protected keys.s
Protected backup.s
;Protected query.i
If Table And Key
request = "SELECT * FROM " + Table
If DatabaseQuery(*Database,request)
column_count = DatabaseColumns(*Database)
column_count - 1
For column_index = 0 To column_count
column_name = DatabaseColumnName(*Database,column_index)
Select DatabaseColumnType(*Database,column_index)
Case #PB_Database_Long, #PB_Database_Quad
column_type = " INTEGER"
Case #PB_Database_Float, #PB_Database_Double
column_type = " REAL"
Case #PB_Database_String
column_type = " TEXT"
Case #PB_Database_Blob
column_type = " BLOB"
EndSelect
If column_name = Key
column_test = #True
Else
If column_index = column_count
keys + column_name + column_type
Else
keys + column_name + column_type + ", "
EndIf
EndIf
Next
FinishDatabaseQuery(*Database)
If column_test
backup = Table + "_backup"
request = "CREATE TEMPORARY TABLE " + backup + " (" + keys + ")"
request + " INSERT INTO " + backup + " SELECT " + keys + " FROM " + Table
request + " DROP TABLE " + Table
request + " CREATE TABLE " + Table + " (" + keys + ")"
request + " INSERT INTO " + Table + " SELECT " + keys + " FROM " + backup
request + " DROP TABLE " + backup
request + " COMMIT"
ProcedureReturn DatabaseUpdate(*Database,request)
EndIf
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 03.06.2019 15:59
von Kiffi
Du kannst das Create-Statement einer Tabelle auslesen:
Code: Alles auswählen
UseSQLiteDatabase()
OpenDatabase(DB, ":memory:", "", "", #PB_Database_SQLite)
DatabaseUpdate(DB, "Create Table myTable (Col1 INT, Col2 TEXT)")
DatabaseQuery(DB, "SELECT sql FROM sqlite_master WHERE name='myTable'")
NextDatabaseRow(DB)
Debug GetDatabaseString(DB, 0) ; -> "CREATE TABLE myTable (Col1 INT, Col2 TEXT)"
Danach kannst Du dieses nach Belieben per String-Operation verändern und auf die neue Tabelle anwenden.
Grüße ... Peter
Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 03.06.2019 19:45
von Mijikai
Danke Kiffi

Bin totaler Anfänger was die Datenbankprogrammierung betrifft.

Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 03.06.2019 23:12
von Kiffi
Kein Thema! Eine Hand wäscht die andere.
Grüße ... Peter
Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 04.06.2019 08:31
von Mijikai
Der Code funktioniert jetzt zwar aber lt. DatabaseUpdate() ist irgendwas falsch!?
Ich vermute es liegt an der Formatierung der Anfrage.
Ignoriert bitte den ersten Teil des Codes werde in später ändern.
Vorher will ich das Ganze erst einmal korrekt zum laufen bekommen.
Code: Alles auswählen
Procedure.i TableRemove(*Database,Table.s,Key.s)
Protected request.s
Protected column_count.i
Protected column_name.s
Protected column_type.s
Protected column_index.i
Protected column_test.i
Protected keys.s
Protected backup.s
Protected query.i
If Table And Key
request = "SELECT * FROM " + Table
If DatabaseQuery(*Database,request)
column_count = DatabaseColumns(*Database)
column_count - 1
For column_index = 0 To column_count
column_name = DatabaseColumnName(*Database,column_index)
Select DatabaseColumnType(*Database,column_index)
Case #PB_Database_Long, #PB_Database_Quad
column_type = " INTEGER"
Case #PB_Database_Float, #PB_Database_Double
column_type = " REAL"
Case #PB_Database_String
column_type = " TEXT"
Case #PB_Database_Blob
column_type = " BLOB"
EndSelect
If column_name = Key
column_test = #True
Else
If column_index = column_count
keys + column_name + column_type
Else
keys + column_name + column_type + ", "
EndIf
EndIf
Next
FinishDatabaseQuery(*Database)
If column_test
backup = Table + "_backup"
request = "CREATE TEMPORARY TABLE " + backup + " (" + keys + ");"
request + "INSERT INTO " + backup + " SELECT " + keys + " FROM " + Table + ";"
request + "DROP TABLE " + Table+ ";"
request + "CREATE TABLE " + Table + " (" + keys + ");"
request + "INSERT INTO " + Table + " SELECT " + keys + " FROM " + backup+ ";"
request + "DROP TABLE " + backup+ ";"
request + "COMMIT;"
Debug "->"
Debug DatabaseUpdate(*Database,request)
ProcedureReturn #True
EndIf
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Re: [SQLite] Datenbank wie Key/Column löschen?
Verfasst: 04.06.2019 08:39
von Kiffi
Du kannst ja mal versuchen, ob DatabaseError() etwas verständliches ausgibt.