SQLite Einbinden, verstehe nichts ?
-
vielen dank, das du mir immer noch weiter hilfst, wenn ich heut zu hasue bin werd ich der sache sofort auf den grund gehen. werd mich ganz sicher wieder melden.

-
soo, das nächste problem ließ natürlich nicht lange auf sich warten:
ASQLite3Query1->Close(); ASQLite3Query1->SQL->Clear(); ASQLite3Query1->SQL->Add("SELECT name FROM client WHERE id = 1;"); ASQLite3Query1->Open();verursacht diesen error:
"malformed database schema - near AUTOINCREMENT"
meine datenbank hab ich mit SQLite++ erstellt. inhalt sind 2 tabellen. und unter SQLite++ funzen auch meine abfragen.
was hab ich jetzt wieder nicht beachtet...?

-
ok fehler zwar nicht gefunden aber wenn ich jetzt ne neue db automatisch anlegen lasse funzt es...

jetzt hab ich aber noch ne frage was die abfragen angeht:
mit
if(ASQLiteQuery1->RecordCount>0) { Edit1->Text = ASQLiteQuery1->FieldByName("artikelname")->AsString; } elsebekomm ich ja nur den ersten datensatz vom query.
wenn ich das jetzt aber anstatt in nen edit feld in ne listbox ausgeben will und es mehr als nur ein datensatz zu meiner abfrage existiert, mit welchem befehl geh ich dann das query datensatz weise durch um alle auszugeben?
-
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