SQLite Einbinden, verstehe nichts ?
-
tize schrieb:
hi...
Tobias.M schrieb:
Super das hat mir sehr geholfen. Habe es nun geschafft das Package zu installieren, und kann die komponenten auch auf eine Form ziehen und Compilieren.
sry aber ich hab das noch nicht verstanden... wie hast du denn sqlite installiert?
SQLite hat er nicht installiert.
Er hat nur die Aducom Komponenten installiert.
Diese ermöglichen einen Zugriff auf SQLite.
-
tipgeber schrieb:
Er hat nur die Aducom Komponenten installiert.
bin noch nich sooo lange in c++ bzw mit dem borland unterwegs...
was sind aducom komponenten und wie installiert man diese?
könntest du mir ma bitte genau beschreiben wie ich den borland dazu überede das er erstma deinen bsp code probieren kann.das wär echt super

-
soo ich hab da ma tante google gefragt und siehe da, endlich ma ne ordentliche erklärung:
http://www.fortunecity.com/boozers/ferret/402/articles/Using_Aducom_SQLite_component.html
-
so, jetzt hab ich aber das nächste problem:

wenn ich jetzt die TASQLite3DB in meine Form packe, wird ja ein ASQLite3DB1 erstellt. Das selbe mach ich hab ich jetzt auch mit dem TASQLite3Query und dem TASQLite3Table gemacht, die erzeugen ein ASQLite3Query1 und ein ASQLite3Table1.
so weit so gut...
wie kann ich jetzt aber eine Datenbankdatei einrichten und Tabellen anlegen und wie kann ich dann Daten rein packen und drauf zu greifen.
ASQLite3DB1->Connected = true;- liefert mir nen Error: Missing database property!
Was mach ich falsch oder was hab ich vergessen?
-
Ja, die Fehlermeldung sagt doch, das du eine Datenbanknamen brauchst.
Entweder wählst du eine vorhandene aus, oder aber setzt da deinen neuen Datenbanknamen rein.
-
irgendwie werd ich aus deinen tipps nich schlau...
tipgeber schrieb:
Entweder wählst du eine vorhandene aus, oder aber setzt da deinen neuen Datenbanknamen rein.
... wo find ich denn eine vorhandene datenbank und wo setz ich den namen ein?
-
irgendwie werd ich aus deinen tipps nich schlau...
tipgeber schrieb:
Entweder wählst du eine vorhandene aus, oder aber setzt da deinen neuen Datenbanknamen rein.
... wo find ich denn eine vorhandene datenbank und wo setz ich den namen ein?
-
Entweder du hast dir mit einem AdministrationsTool wie z.B. SQLiteAdmin schon eine DB "gebaut" und setzt da den Filenamen rein.
Oder aber du erstellst dir selber eine, indem du deinen 'Wunschnamen' nimmst.
Das trägst du dann unter der Eigenschaft der ASQLiteDB ein, die mit D... anfängt und mit ...base aufhört.
Danach connecten und schon hast du einen Draht zu deiner DB.
-
ok danke, ich hab ganz vergessen in den object inspector zu schaunen
wenn ich auf weitere hindernisse stoße meld ich mich wieder...
-
so ich mir jetzt ne db mit SQLite++ erstellt. enthalten sind 2 Tabellen mit je einem Primärschlüssel. Hab Datenbank ausgewählt und auch die dll geladen, die sqlite3.h eingebunden und wenn ich im object inspector connetion auf true stell funzt es auch. wenn ich jetzt aber den button drücke, kommt nen fehler: no database connection!
void __fastcall TForm1::Button1Click(TObject *Sender) { ASQLite3Query1->Close(); ASQLite3Query1->SQL->Clear(); ASQLite3Query1->SQL->Add("select * from client;"); ASQLite3Query1->Open(); }warum?
-
Ja, woher soll das Query auch wissen welche ASQLiteDB es benutzen soll?
-
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...