SQLite Einbinden, verstehe nichts ?
-
Entweder du nimmst eine TDBListBox und verbindest diese über ein TDataSource mit dem query oder aber wenn du das umbedingt manuell anzeigen möchtest dann:
ASQLite3Query1->Close(); ASQLite3Query1->SQL->Clear(); ASQLite3Query1->SQL->Add("SELECT name FROM client WHERE id = 1;"); ASQLite3Query1->Open(); ListBox1->Clear(); while(!ASQLiteQuery1->Eof) { ListBox1->Items->Add(ASQLite3Query1->FieldByName("artikelname")->AsString); ASQLite3Query1->Next(); }
-
vielen dank, das mit der tdblistbox hat irgendwie nich gefunzt, hab jetzt nen tdbgrid genommen und das auf readonly gesetzt.
da jetzt alles soweit ganz gut hin haut, hab ich nur noch 2 fragen:1. wie kann ich fehlermeldungen die mit der datenbank zusammenhängen abfangen bevor sie angezeigt werden und das programm zum absturz bringen?
2. wie kann ich eine datenbank über mehrere forms ansprechen und abfragen und verwalten? muss ich da auf jede form nen tasqlite3db und nen query setzen oder reicht das einmal auf meinem hauptmenu form?
vielen dank für all die hilfe

-
Hallo
1. mit try-catch Blocks um die relevanten Codezeilen. Bitte beachte das die Exceptions trotzdem in der IDE angezeigt werden.
2. Mit Forms hat das nichts zu tun, sondern du must dir überlegen wieviele verschiedene logische Abfragen du hast. Du kannst zum Beispiel ein Projektweites DataModul erstellen und dort deine Query-Instanz reinstecken. Danach kannst du von jeder Form aus auf diese Query-Instanz zugreifen, auch von einer Form aus mehrmals. Aber die Datenmenge die in der TQuery drinsteckt ist dann immer die gleiche. Du kannst dann aber verschiedene TDataSource-Instanzen drauf setzen um verschiedene TDBGrids zu ermöglichen. Willst du in verschiedenen DBGrids auch verschiedene Datenmengen aus verschiedenen Abfragen anzeigen. kommst du um verschiedene TQuery-Instanzen nicht umhin, egal wo diese sich befinden.
bis bald
akari
-
akari schrieb:
Du kannst zum Beispiel ein Projektweites DataModul erstellen und dort deine Query-Instanz reinstecken.
wie geht das?

danke, tim :xmas1:
-
Hallo
Über das Menu Datei/Neu... kannst du das DataModul erstellen. Das ist wie ein Formular, nur das ausschließlich nichtvisuelle Komponenten wie eben TQuery-Instanzen aufnimmt. Das kannst du als zentralen Datenkontainer benutzen, das von allen andern Forms included wird die es brauchen.
bis bald
akari
-
vielen dank...
-
arg... ich werd noch bekloppt mit sqlite...
ich habe jetzt folgendes vor:
wenn das programm gestartet wird soll es nen unterordner anlegen, die datenbankdatei darin anlegen und die tabellen in der db anlegen. falls dies schon einmal geschehen ist soll er das natürlich nicht noch einmal machen.
meine idee war:
beim datamodule create checken ob ordner vorhanden, wenn nicht dann erstellen:
if (DirectoryExists("data") == false) { //Unterordner data erstellen MkDir("data"); }--> funzt

wenn das verzeichnis vorhanden ist erstellt ASQLite3DB1 die datei data.db automatisch in diesem ordner.

so wenn ich jetzt bei ASQLite3DB1 das event afterconnect anspreche passiert nix, nicht mal ne fehlermeldung! warum?
//Datenbank einrichten AnsiString sql_cmd; //Tabelle client sql_cmd = "CREATE TABLE [client] ([ID] INTEGER PRIMARY KEY UNIQUE, [name] TEXT, [vname] TEXT, [telcode] TEXT UNIQUE, [provider] INTEGER, [cash] INTEGER)"; ASQLite3Query1->Close(); ASQLite3Query1->SQL->Clear(); ASQLite3Query1->SQL->Add(sql_cmd); ASQLite3Query1->Open();noch ein problem besteht darin das der sql befehl:
CREATE TABLE IF NOT EXISTS ...nicht funktionieren will...
fehlermeldung: syntax error near "not"!#
obwohl:http://www.sqlite.org/lang_createtable.htmlgibt es noch eine andere möglichkeit zu überprüfen ob die db datei und tabellen vorhanden sind???
vielen dank, tim