Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben werden? (https://www.delphipraxis.net/178867-ersten-wert-die-db-schreiben-und-sofort-abfragen-bevor-andere-geschrieben-werden.html)

OrNEC 1. Feb 2014 12:44

Datenbank: SQLite • Version: 3 • Zugriff über: SQLiteSimpleDelphi-Wrappers von Tim Anderson

Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben werden?
 
Hallo,

ich komme bei folgendem nicht mehr weiter. Ich möchte in die DB 8 Angaben zu einem Radiosender abspeichern, zwei davon sind Comboboxen mit der Auswahl von Sprache und Kategorie. Nun muss ich schon vor dem Abspeichern wissen welche ID der Sprache und Kategorie ich dem Sender zuweisen soll, wenn diese gerade erst mit allen anderen Angaben erst erstellt werden? Weiß gar nicht wie ich das richtig beschreibe soll... auf jeden Fall ich muss die ersten zwei Werte in die Tabelle speichern, dann die ID dieser Werte holen, und mit anderen Angaben zu dem Sender verknüpft abspeichern.

Wie geht das eigentlich? Mit dem Trigger?

vagtler 1. Feb 2014 12:51

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
Stichworte Transaction und Last Inserted ID.

Perlsau 1. Feb 2014 14:52

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
@OrNEC:

Wenn du ComboBoxen zur Auswahl von Sprache und Kategorie einsetzt, ist das im Grunde kontraproduktiv. Verwende doch besser gleich eine TDBLookUpComboBox, verbinde sie entsprechend mit deiner Haupttabelle und der jeweiligen Untertabelle und du hast die ID von Sprache bzw. Kategorie automatisch in der Tabelle.

Du kannst dir ja mal als Beispiel das Waffenbuch (elektronisches Journal zum Eintrag von An- und Verkäufen scharfer, meldungspflichtiger Schußwaffen) von meiner Site runterladen. Dort werden beim Editieren bzw. Neuanlegen von Datensätzen in der Haupttabelle an allen Comboboxen, die auf Subtabellen verweisen, entsprechende Buttons eingeblendet, um bei Bedarf z.B. einen neuen Waffentyp oder ein neues Kaliber anlegen zu können. (Die beiligende Access-Datenbank, mit der ich das damals entwickelt hatte, enthält zahlreiche frei erfundene Beispieldatensätze zur Veranschaulichung.)

OrNEC 1. Feb 2014 15:29

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
Zitat:

Zitat von Perlsau (Beitrag 1246250)
@OrNEC:

Wenn du ComboBoxen zur Auswahl von Sprache und Kategorie einsetzt, ist das im Grunde kontraproduktiv. Verwende doch besser gleich eine TDBLookUpComboBox, verbinde sie entsprechend mit deiner Haupttabelle und der jeweiligen Untertabelle und du hast die ID von Sprache bzw. Kategorie automatisch in der Tabelle.

Jah... ich möchte keine DB-Komponente von Delphi verwenden, ich schreibe alles mit Standardkomponenten, so das es auch mit Delphi Versionen ohne DB-Unterstützung läuft oder mit Lazarus. Muss mir also was anderes ausdenken. :gruebel:

Aber danke Dir trotzdem! :thumb:

Perlsau 1. Feb 2014 15:42

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
Zitat:

Zitat von OrNEC (Beitrag 1246260)
Jah... ich möchte keine DB-Komponente von Delphi verwenden, ich schreibe alles mit Standardkomponenten, so das es auch mit Delphi Versionen ohne DB-Unterstützung läuft oder mit Lazarus. Muss mir also was anderes ausdenken. :gruebel:

TDBLookUpComboBox ist eine Standard-Komponente! Das ist derzeitiger Standard. Lazarus verfügt übrigens ebenfalls über Standard-DB-Komponenten. Projekte, die mit Delphi-Versionen entwickelt wurden, sind entgegen deiner Andeutung jedoch nicht kompatibel mit Lazarus! Daher solltest du dich entscheiden, ob du für alte Delphi-Versionen entwickelst oder dann doch lieber gleich in Lazarus, wo dir – insbesondere wenn du CodeTyphon einsetzt – zahlreiche Komponenten zur Verfügung stehen, die sehr wohl dem heutigen Standard entsprechen, u.a. auch Datenbank-Komponenten wie Datasets, Connectoren und dergleichen.

Wenn du jedoch weiterhin mit obsoleten Mitteln programmieren möchtest – also keine Datasets, kein direkter SQL-Zugriff auf die DB usw. – dann mußt tatsächlich du dir was überlegen, obwohl du im Grunde eigentlich möchtest, das wir hier was für dich überlegen :lol:

OrNEC 1. Feb 2014 15:50

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
Zitat:

Zitat von Perlsau (Beitrag 1246261)
Wenn du jedoch weiterhin mit obsoleten Mitteln programmieren möchtest – also keine Datasets, kein direkter SQL-Zugriff auf die DB usw. – dann mußt tatsächlich du dir was überlegen, obwohl du im Grunde eigentlich möchtest, das wir hier was für dich überlegen :lol:

Ja ich werde erst mal weiter mit obsoleten Mitteln programmieren. :-D Es wird gehen, hab schon ne Idee.

blawen 1. Feb 2014 16:24

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
Zitat:

Zitat von OrNEC (Beitrag 1246263)
Ja ich werde erst mal weiter mit obsoleten Mitteln programmieren. :-D Es wird gehen, hab schon ne Idee.

vagtler hat Dir ja schon einen Ansatz gegeben.

Delphi-Quellcode:
{ "Protokoll"-Rumpfdatensatz generieren }
quSpeichern.SQL.Text := 'Insert Into ..hier steht Dein SQL-Code..';
quSpeichern.ExecSQL;

{ Den neu erstellten Datensatz finden und die Datensatz ID bestimmen }   
quSpeichern.SQL.Text := 'Select LAST_INSERT_ID()';
quSpeichern.Active  := True;
iDatensatz          := quSpeichern.Fields[0].AsInteger;

Perlsau 1. Feb 2014 17:32

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
Er möchte aber doch keine DB-Komponenten von Delphi verwenden ... :gruebel:

mkinzler 1. Feb 2014 17:41

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
Zitat:

Zitat von Perlsau (Beitrag 1246270)
Er möchte aber doch keine DB-Komponenten von Delphi verwenden ... :gruebel:

Das ändert aber nichts am grundsätzlichen Vorgehen. Ich kenne den verwendeten Wrapper nicht; die benötigten SQL Statements sollten aber die selben sein.

Perlsau 1. Feb 2014 18:34

AW: Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben wer
 
Naja, wenn man mit SQL arbeiten kann, sollte man eher so vorgehen:

Delphi-Quellcode:
MyQuery.SQL.Text := 'select * from Tabelle_Sprache where Sprache = ' + QuotedStr(Edit_Sprache.Text);
MyQuery.Open;
if MyQuery.RecordCount = 0 then
begin
  // Hier die Insert-Methode einfügen/aufrufen
end;
oder gleich mit Locate arbeiten:
Delphi-Quellcode:
If Not MyQuery.Locate('Sprache',Edit_Sprache.Text,[] then ...
Sonst hat man hinterher unzählige Einträge derselben Sprache in der Tabelle.

Leider hab ich keinen blassen Schimmer, wie der Zugriff über die SQLiteSimpleDelphi-Wrappers von Tim Anderson abläuft und kann daher nur spekulieren. Gibt es in diesem Wrapper die Möglichkeit, SQL einzusetzen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz