AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADOQuery INSERT und Select
Thema durchsuchen
Ansicht
Themen-Optionen

ADOQuery INSERT und Select

Ein Thema von lemmond1976 · begonnen am 18. Jul 2003 · letzter Beitrag vom 24. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2      
lemmond1976

Registriert seit: 10. Mai 2003
21 Beiträge
 
#1

ADOQuery INSERT und Select

  Alt 18. Jul 2003, 11:20
Hallo,

wie kann man ein INSERT und ein SELECT in einer Query unterbringen.
Ich schreibe nämlich Daten in eine DB und möchte sofort danach den Autowert haben.

Code:
ADOQUERY.close;
ADOQUERY.SQL.Clear;
ADOQUERY.SQL.Add('INSERT INTO....');
ADOQUERY.EXECSQL;
Jetzt will ich mit Select @@IDENTITY SOFORT (MS SQL Server 7.0) den Autowert haben.

Hat jemand eine Idee ?

Gruss
Gunnar
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: ADOQuery INSERT und Select

  Alt 18. Jul 2003, 11:27
Ich denke mal gar nicht. Du solltest nach den EXECSQL die Query wieder schließen und anschließend das Select reinschreiben.
  Mit Zitat antworten Zitat
lemmond1976

Registriert seit: 10. Mai 2003
21 Beiträge
 
#3

Re: ADOQuery INSERT und Select

  Alt 18. Jul 2003, 11:34
Hallo,

das hatte ich auch schon ausprobiert. Nach dem Einfügen des ersten DS kommt der Autowert zurück, nach dem einfügen eines weiteren DS
gibt es eine Zugriffsverletzung.

Gruss
Gunnar
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#4

Re: ADOQuery INSERT und Select

  Alt 18. Jul 2003, 11:41
Verwe nde doch für den Insert-befehl TAdoCommand und nur für den Select TAdoQuery.
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#5

AW: ADOQuery INSERT und Select

  Alt 24. Feb 2017, 10:58
Auch wenn dieser Thread schon sehr alt ist, möchte ich doch noch eine Lösung für das Problem posten. Denn ich hatte das selbe Problem und bin bei meiner Lösungssuche über diesen Thread gestolpert.


Delphi-Quellcode:
//INSERT-Anweisung
ADOQUERY.Close;
ADOQUERY.SQL.Clear;
ADOQUERY.SQL.Add('INSERT INTO....');
ADOQUERY.ExecSQL;

//Abfrage des Autowerts
ADOQUERY.Close;
ADOQUERY.SQL.Clear;
ADOQUERY.SQL.Add('SELECT @@IDENTITY AS ID');
ADOQUERY.ExecSQL;
ADOQUERY.Open;
ADOQUERY.First;
ID:=ADOQUERY.FIELDBYNAME('ID').AsInteger;
Nico Bäger
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: ADOQuery INSERT und Select

  Alt 24. Feb 2017, 11:48
Mal eine dumme Frage:
Du verwendest
Delphi-Quellcode:
 ADOQUERY.Close;
 ADOQUERY.SQL.Clear;
 ADOQUERY.SQL.Add('INSERT INTO....');
 ADOQUERY.ExecSQL;
warum nicht einfach
Delphi-Quellcode:
 ADOQUERY.Close;
 ADOQUERY.SQL.Text:='INSERT INTO....';
 ADOQUERY.ExecSQL;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: ADOQuery INSERT und Select

  Alt 24. Feb 2017, 11:59
Normalerweise gibt es sowas (frag nicht welcher/ob SQL ANSI Standard):
Code:
insert into mytable (fieldlist) values (valuelist)
returning DerWertDermichInteressiert, DerAndereWert
Unter MSSQL nennt sich das Returning aber 'Output' und geht etwas anders
dann wäre es
Code:
insert into mytable (fieldlist)
OUTPUT DerWertDermichInteressiert, DerAndereWert
values (valuelist)
Unter MSQSL 7 geht das aber glaube ich nicht!

Dann gibt es noch
Code:
SELECT SCOPE_IDENTITY()
Vlt gabs das schon unter sql server 7.
Gruß, Jo
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#8

AW: ADOQuery INSERT und Select

  Alt 24. Feb 2017, 11:59
Ich hab mich nur an das vom Fragenden gegebenen Code-Beispiel gehalten...
Nico Bäger
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: ADOQuery INSERT und Select

  Alt 24. Feb 2017, 12:12
Normalerweise gibt es sowas ..
Nachtrag:
Man muss für die Insert Query dann irgendwie Out Parameter dran basteln, hab das irgendwie mal gemacht, aber weiß nur noch, dass es mangels Doku und KnowHow damals komisch war.
Schau erstmal ob das überhaupt mit dem alten Datenbankserver geht, also zu Fuß per SQL Console.
Gruß, Jo
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: ADOQuery INSERT und Select

  Alt 24. Feb 2017, 13:15
Delphi-Quellcode:
//Abfrage des Autowerts
ADOQUERY.Close;
ADOQUERY.SQL.Clear;
ADOQUERY.SQL.Add('SELECT @@IDENTITY AS ID');
ADOQUERY.ExecSQL;
ADOQUERY.Open;
ADOQUERY.First;
ID:=ADOQUERY.FIELDBYNAME('ID').AsInteger;
Das lässt sich auch vereinfachen:
Delphi-Quellcode:
//Abfrage des Autowerts
ADOQUERY.Close;
ADOQUERY.SQL.Text := 'SELECT @@IDENTITY AS ID';
ADOQUERY.Open;
ID:=ADOQUERY.FIELDS[0].AsInteger;
ADOQUERY.Close;
Mit ExecSQL wird das Statement ausgeführt, wenn man auch keine Ergebnismenge erhält und mit Open wird es ein zweites Mal ausgeführt. Auf ExecSQL kann man hier also durchaus verzichten. Bei einem Datensatz als Ergebnis mag das laufzeittechnisch nicht von Belang sein, bei einer größeren Ergebnismenge aber durchaus.
Und fragt man auf diese Weise eine Sequenz ab, wird das Ergbebnis für den nächsten Wert immer doppelt so hoch vom vorherigen entfernt sein, wie die Schrittweite der Sequenz, sprich: Man überspringt einen Wert.
Nach dem Open ist man auf dem ersten Datensatz, man muss also nicht nochmal extra mit First auf den ersten Datensatz gehen.
Da wir nur eine Spalte in der Ergebnismenge haben, können wir die auch direkt abgreifen, statt sie erst per FieldByName zu suchen. Das "AS ID" könnte man sich daher sparen.
Und am Ende, wenn das Ergebnis abgeholt wurde, wird die Datenmenge wieder geschlossen. Sie muss nicht bis zur nächsten Benutzung offen bleiben.

Und damit lässt sich das Ganze wunderbar in 'ner Funktion kapseln.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:45 Uhr.
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