Hallo
habe eine verständnissfrage zum Thema Datenbanken & Lazarus
Habe ein kl Prg mit 2 Formularen
form1 = 5 DBeditfelder / 1 Navigator und angebunden an Tabelle A1.sqlite
Primary_key = nr_car (type = autoinc)
form2 = 5 Dbeditfelder / 1 Combobox / 1 Navigator und 5 Felder angebunden an Tabelle A2.sqlite
Primary_key nr_buchung (type = autoinc)
Nun die Frage
was muss ich auf form2 machen das mir die Combobox Daten aus
Tabelle 1 anzeigt sich diese dann aber mit in TabelleA2 speichern lassen ??
leider komme ich mit dem was ich in den Wikis finde nicht so wirklich klar !
(habe bislang auch bis auf sehr simple Sachen in OpenOffice nichts mit Datenbanken gemacht)
System
Kubuntu 6.06
Lazarus 0.9.20 Beta
Sqlite 3
Verständnissfrage Datenbanken & Lazarus
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Normal mit ner SQL-Query. Dafür müssen aber beide Tabellen entweder genau gleich sein oder du mußt vor dem speichern die Dateninhalte entsprechend casten. Dann kommt sowas wie:
sql:= 'INSERT INTO {tablename} '
und ab da wird es etwas aufwendig. Jetzt mußt du der Reihe nach das Datenfeld angeben und den Inhalt zuweisen. Dabei mußt du kräftig auf die Hochkommas achten. Guck dir mit dem Debugger den String an, der in sql(type = string) steht. Jede Zuweisung muß mit einem Komma im String abgeschlossen werden bis auf die letze, die geht ohne Komma durch.
EDIT #1 Dafür muß man da ein Semikolon dranbummeln.
Wichtig ist dabei wenn du ein Datenfeld nicht direkt mit einem Inhalt beschickst, das du dann in der Tabelle einen Standardinhalt vorgegeben hast, das kann auch 0 oder '' sein. Du brauchst dann nur die Felder angeben, die einen definierten Inhalt bekommen, die anderen werden aus der Vorgabe richtig belegt.
INSERT INTO hat den Vorteil, das du dich nicht um die Sortierung des Keys scheren brauchst, das macht die DB von alleine richtig.
Da ist jetzt ein bißchen Lernen und Üben mit SQL nötig.
sql:= 'INSERT INTO {tablename} '
und ab da wird es etwas aufwendig. Jetzt mußt du der Reihe nach das Datenfeld angeben und den Inhalt zuweisen. Dabei mußt du kräftig auf die Hochkommas achten. Guck dir mit dem Debugger den String an, der in sql(type = string) steht. Jede Zuweisung muß mit einem Komma im String abgeschlossen werden bis auf die letze, die geht ohne Komma durch.
EDIT #1 Dafür muß man da ein Semikolon dranbummeln.
Wichtig ist dabei wenn du ein Datenfeld nicht direkt mit einem Inhalt beschickst, das du dann in der Tabelle einen Standardinhalt vorgegeben hast, das kann auch 0 oder '' sein. Du brauchst dann nur die Felder angeben, die einen definierten Inhalt bekommen, die anderen werden aus der Vorgabe richtig belegt.
INSERT INTO hat den Vorteil, das du dich nicht um die Sortierung des Keys scheren brauchst, das macht die DB von alleine richtig.
Da ist jetzt ein bißchen Lernen und Üben mit SQL nötig.
Zuletzt geändert von schnullerbacke am Sa 30. Dez 2006, 19:06, insgesamt 1-mal geändert.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Beiträge: 94
- Registriert: So 5. Nov 2006, 18:40
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Berlin
Da das ganze anscheinend mit dem SQLiteDataset läuft kannst du auch "standard" Delphi Datenbank Methoden verwenden :
zum Einfügen von Daten:
Um Beispielsweise die Nachnamen der oben genannten Personen in einer ComboBox anzeigen zu lassen habe ich so etwas gemacht:
zum Einfügen von Daten:
Code: Alles auswählen
DSAutor.Append;
if Autor.Name <>'' then DSAutor.FieldByName('Name').asString:=Autor.Name;
if Autor.Vorname<>'' then DSAutor.FieldByName('Vorname').asString:=Autor.Vorname;
DSAutor.Post;
DSAutor.ApplyUpdates;
insertAutor:=DSAutor.FieldByName('Autor_id').asInteger;
Code: Alles auswählen
function Tdmbuecher.getAutorNamen : TStringList;
var temp : String;
begin
getAutorNamen:=TStringList.Create;
DSAutor.First;
while DSAutor.EOF = false do
begin
temp:=trim(DSAutor.FieldByName('Name').AsString);
if temp <>'' then getAutorNamen.Append(temp);
DSAutor.Next;
end;
getAutorNamen.Sort;
end;
ComboBox1.Items.Free;
ComboBox1.Items:=getAutorNamen;