AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Ersten Wert in die DB schreiben und sofort abfragen, bevor andere geschrieben werden?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von OrNEC · begonnen am 1. Feb 2014 · letzter Beitrag vom 2. Feb 2014
Antwort Antwort
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#1

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

  Alt 1. Feb 2014, 15:29
@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.

Aber danke Dir trotzdem!
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

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

  Alt 1. Feb 2014, 15:42
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.
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
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#3

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

  Alt 1. Feb 2014, 15:50
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
Ja ich werde erst mal weiter mit obsoleten Mitteln programmieren. Es wird gehen, hab schon ne Idee.
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
697 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 1. Feb 2014, 16:24
Ja ich werde erst mal weiter mit obsoleten Mitteln programmieren. 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;
Roland

Geändert von blawen ( 1. Feb 2014 um 16:52 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

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

  Alt 1. Feb 2014, 17:32
Er möchte aber doch keine DB-Komponenten von Delphi verwenden ...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 1. Feb 2014, 17:41
Er möchte aber doch keine DB-Komponenten von Delphi verwenden ...
Das ändert aber nichts am grundsätzlichen Vorgehen. Ich kenne den verwendeten Wrapper nicht; die benötigten SQL Statements sollten aber die selben sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

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

  Alt 1. Feb 2014, 18:34
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: 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?
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 1. Feb 2014, 21:37
So wie ich das lese möchtest Du eine Master Deteil-Kombination eintragen:

1. Masterdatesatz eintragen
2. ID(´s) holen7den
3. Detail-Datensatz mit Referenz (der ID ('s) der Master-Tabelle) speichern.

Man kann dafür die SQL-Eingenschaften bei Query-Komponenten nehmen, sind bei Lazarus und Delphi-Versionen mit DB Unterstützung dabei oder das oben aufgeführten Paket. SQLite hat keine Sequences oder Generatoren und daher ist der Ansatz mit Trigger suboptimal, aber SQLite hat zum Ausgleich "AutoIncrement", sodass folgendes geht:

Code:
   CREATE TABLE COMPANY(
   ID INTEGER PRIMARY KEY  AUTOINCREMENT,
   NAME          TEXT     NOT NULL,
);
Master-Tabelle mit Auto-Increment anlegen.
Code:
   CREATE TABLE Employee(
   ID INTEGER PRIMARY KEY  AUTOINCREMENT,
   NAME          TEXT     NOT NULL,
   RID_Company    INT      NOT NULL,
);
Detail-Tabelle mit Auto-Increment und Referenz-ID-Feld anlegen.


Code:
INSERT INTO COMPANY (NAME )
VALUES ( 'Neptum AG' );
Master Datensatz einfügen, wobei das Auto-Inc-Feld nicht angegeben wird


Code:
Select max(ID ) as MAXID from COMPANY
Letzte Höchste ID holen (geht vielleicht per SQLite-Funktion eleganter... )


Code:
INSERT INTO Employee (NAME )
VALUES ( 'Kapt´n Nelson', :MAXID  );
Master Datensatz einfügen, wobei Max-ID in einer Variablen übergeben wird.


Das würde ich so als Weg sehen, wobei ich mit meinen VorPostern übereinstimme,
dass dies nicht abhängig von einer bestimmten Komponente ist.

Grüße in die Runde.
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Alt 1. Feb 2014, 15:43     Erstellt von Smut
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz