Kleines Datenbank-Programm. Hilfe
-
Hi nochmal,
am besten, du nimmst 'ne TQuery - Komponente, bei der du, nicht wie ich vorher versehentlich schrieb, dem Alias den Path zuweist, sondern der Eigenschaft "DatabaseName".
Beispiel:
AnsiString asDataDir = ExtractFilePath(Application->ExeName) + "Data\\"; Query1->DatabaseName = asDataDir;
Dann kannst du mit 'nem Codeblock wie:
Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add( "SELECT " " *\n" "FROM\n" " user\n" // oder "user.db" "WHERE\n" " Name = \'" + "Beispiel" + "\'\n" "ORDER BY\n" " Age" ); // SQL->Add Query1->ExecSQL();
Jetzt muss das ganze nur noch über ein TDataSource mit 'nem DBGrid oder ähnlichem verbunden werden.
Dazu der Link: http://www.tutorials.delphi-source.de/dbeinstieg/Ist zwar für Delphi, aber grundlegend musst du nur "Komponente.Eigenschaft" durch "Komponente->Eigenschaft" ersetzen.
LiGr
Bl@ckbird
-
Dankeschön, werds probieren und mich dann ggf. wieder melden.
-
Hi!
Welche Komponenten brauche ich denn alle, um mit der Datenbank zu arbeiten.
Irgendwie hat mich die BB-Hilfe mit Datenmenge, Datenquelle etc. nur verwirrt.Also auf jeden fall brauche ich eine Datenbank z.B. "test.db"
Dann brauche ich noch die TQuery-Komponente.Ist das so richtig:
Ich brauche eine TTable und füge dort den TableName ein.
Dann eine TDataSource und füge als DataSet TTable ein.
Dann TQuery und füge als DataSource TDataSource ein.Wenn ich anfragen mit TQuery stelle, wo kommt dann die Antwort hin?
Irgendwie versteh ich die zusammenhänge zwischen den Komponenten nicht so recht
-
Dann solltest du dir unbedingt mal die Tutorials ansehen wie du sie in der BCB-Hilfe, in der FAQ und auch in diesem Thread erwähnt findest.
-
Also, am besten du machst das folgendermaßen:
1. TTable:
- DatabaseName setzen nicht vergessen und
- MasterSource auf ein TDataSource setzen
die Table-Komponente ist nicht unbedingt erforderlich, wenn du mit einem Query arbeitest
2. TDataSource:
- Dataset aufs Query setzen
3. TQuery:
- DatabaseName setzenDann musst du zum Anzeigen nur noch ein DBGrid platzieren und DataSource aufs TDataSource setzen. Beim Ausführen des Querys (ExecSQL) wird der Inhalt der Tabelle dort automatisch angezeigt.
Um neue Daten hinzuzufügen würde ich einfache Edits nehmen, um die daten zu erfassen und dann beim Klick auf einen Button "Speichern" folgenden Beispielcode ausführen lassen:Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add( "INSERT INTO\n" " user\n" " (Name, Age, Adress)" "VALUES\n" " (\n" " \'" + EditName->Text + "\',\n" " \'" + EditAge->Text + "\',\n" " \'" + EditAdress->Text + "\'\n" " )" ); // SQL->Add Query1->ExecSQL(); MessageDlg("Eintrag erfolgreich hinzugefügt.", mtInformation, MsgDlgButtons() << mbOK, 0);
Alternativ geht natürlich auch Update, Delete, ...; also (fast) alles, was in SQL auch erlaubt ist.
Meine Erfahrungen mit den Database-Komponenten, wie z.B. TDBEdit, sind schlecht, weshalb ich von ihrer Verwendung abrate.
-
Achso, du kannst die Daten auch direkt beim Query abfragen.
Dies machst du folgendermaßen:Label1->Caption = Query1->FieldByName("Name")->AsString;
(Alternative wäre ...->AsBoolean; ...->AsInteger o.ä.)
Damit kannst du aber nur den Eintrag abfragen, auf den de "Query-Zeiger" gerade zeigt.
Mit folgendem Code kannst du das gesamte Query durchlaufen und z.B. das Alter deiner User addieren:
int iAlter = 0; Query1->First(); // erster Eintrag aktiviert if (!Query1->IsEmpty()) // nicht leer for (int i = 1; i <= Query1->RecordCount; i++) // RecordCount ist Gesamtanzahl an Einträgen { iAlter += Query1->FieldByName("Alter")->AsInteger; // wenn nicht letzter Eintrag, zum nächsten gehen: if (i != Query1->RecordCount) { Query1->Next(); } } // for
-
Hi!
Muss ich den Database-Name setzen?
Kann ich nicht einfach auch die einzelnen Tabellen mit
Table1->TableName = "adressen.db";laden?
Ich habe nämlich keine DB erstellt, sondern nur einzelne Tabellen.
-
Dem DatabaseName musst du den Pfad zu den Tabellen zuweisen (siehe oben).
Dann den TableName setzen.
-
Hi!
Ich habe die Tabellen im gleichen Verzeichnis. Dann brauch ich DatabaseName also nicht, oder?
Jedenfalls gehts auch ohne DatabaseName
-
Probier mal folgendes:
Erstelle mal eine Verknüpfung zu der *.exe auf'm Desktop. Dann rechtsklick aufs Icon und "Eigenschaften". Setz dann mal "Ausführen in" auf "C:\" oder ähnliches, aber nicht den Pfad, wo dein Programm drin ist.
Wenn es beim Klick auf die Verknüpfung noch funktioniert, dann kannst du es so lassen, ansonsten würde ich den DatabaseName auf jeden Fall setzen.
Viel Erfolg
Bl@ckbird