Verständnissfrage Datenbanken & Lazarus

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
lilebor
Beiträge: 15
Registriert: So 1. Okt 2006, 10:03

Verständnissfrage Datenbanken & Lazarus

Beitrag von lilebor »

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

schnullerbacke
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

Beitrag von schnullerbacke »

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.
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)

danny61
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

Beitrag von danny61 »

Da das ganze anscheinend mit dem SQLiteDataset läuft kannst du auch "standard" Delphi Datenbank Methoden verwenden :
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;

Um Beispielsweise die Nachnamen der oben genannten Personen in einer ComboBox anzeigen zu lassen habe ich so etwas gemacht:

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;

lilebor
Beiträge: 15
Registriert: So 1. Okt 2006, 10:03

Danke

Beitrag von lilebor »

Hallo,

vielen Dank für die beiden schnellen Antworten :)

Werde mich dann auch gleich ans
Werk machen und die beiden Wege mal probieren!

Antworten