![]() |
Datenbank: Access • Zugriff über: ADO
ADO Daten in gleicher Tabelle kopieren
Ich möchte in einer Tabelle den aktuellen Datensatz kopieren und am Ende als neuen Datensatz anhängen.
Dabei soll alles bis auf das Primärindexfeld kopiert werden. 1. Gibt es eine Funktion die das schon kann ? 2. Ist diese Funktion auch akzeptabel schnell ? 3. Wenn es nichts fertiges gibt, kann man dann wenigstens durch Iteration über die Felder die Daten zwischenspeichern und dann in einen leeren angehängten Datensatz wieder einkopieren. Ein Beispiel würde mir da sehr helfen. Ich wollte den primitiven Weg über das lesen jedes Feldes und schreiben in einen Record und dann das schreiben aus dem Record in den leeren Datensatz zu Fuß vermeiden. Wenigstens eine Schleife die Feld 1 bis n in den Record schreibt und dann aus dem Record wieder in die Tabelle. Ich arbeite mit einem Query DM.QKat und stehe auf dem zu kopierenden Datensatz. Soweit die Voraussetzungen. |
Re: ADO Daten in gleicher Tabelle kopieren
SQL-Code:
INSERT INTO Tabelle([alle Felder außer PK])
SELECT [alle Felder außer PK] FROM Tabelle WHERE PK = aktueller PK |
Re: ADO Daten in gleicher Tabelle kopieren
Den InsertInto Befehl wollte ich ja nehmen, da sagte mir aber ein Kollege, dass man damit nur in eine andere Tabelle schreiben kann, daher habe ich das verworfen.
Kann ich den wirklich für die gleiche Tabelle benutzen ???? |
Re: ADO Daten in gleicher Tabelle kopieren
Ich wüsste nichts, was dagegenspricht.
|
Re: ADO Daten in gleicher Tabelle kopieren
Probieren geht über Kollegen :zwinker:
|
Re: ADO Daten in gleicher Tabelle kopieren
Zitat:
Gruss Thorsten |
Re: ADO Daten in gleicher Tabelle kopieren
Unter Firebird geht' s (man muss nicht alles glauben, was einem die Kollegen so erzählen, aber vielleicht verhält sich Access da auch anders).
|
Re: ADO Daten in gleicher Tabelle kopieren
Das sollte mit jedem (richtigen) DBMS gehen; sobald das DBMs mehrer Instanzen einer Tabelle verwalten kann
|
Re: ADO Daten in gleicher Tabelle kopieren
Ich habs mal probiert mit folgender Anweisung:
Delphi-Quellcode:
Da kommt nach ExecSQL ein Syntaxfehler in der InsertInto Anweisung.
DM.QKat.SQL.Text:='Insert Into Kataloge [Bildbeschreibung,alteNr,Hersteller]'+
' Select [Bildbeschreibung,alteNr,Hersteller]'+ ' From Kataloge Where BestellNr='+QuotedStr(AktBestNr); Was ist hier falsch ? |
Re: ADO Daten in gleicher Tabelle kopieren
Versuch mal...
Delphi-Quellcode:
Ist die BestellNr eine Autofeld?
DM.QKat.SQL.Text:=
'INSERT INTO Kataloge (Bildbeschreibung, alteNr, Hersteller) ' + 'SELECT Bildbeschreibung, alteNr, Hersteller ' + 'FROM Kataloge ' + 'WHERE BestellNr = ' + QuotedStr(AktBestNr); |
Re: ADO Daten in gleicher Tabelle kopieren
Zitat:
|
Re: ADO Daten in gleicher Tabelle kopieren
OK so gehts, hatte das mit der Eckigen Klammer von einer allgemeinen SQL-Seite oder hab das falsch interpretiert.
Das hinter dem Select war natürlich Blödsinn, wurde einfach mitkopiert von oben drüber. Die BestellNr ist ein eindeutiger Index aber nicht der Primärindex das ist ID und die ist ein Autowert. Jetzt ist das Problem, wie finde ich meinen Datensatz denn wieder. Das geht doch eigentlich nur über die ID. Muss ich mir also erst die letzte ID auslesen incrementieren und dann danach selektieren oder index auf ID setzen und DM.QKat.Last machen. Oder gehts noch einfacher ? Als nächstes soll der Anwender jetzt ja seine Daten ändern können und die neue BestellNr eingeben. |
Re: ADO Daten in gleicher Tabelle kopieren
Zitat:
|
Re: ADO Daten in gleicher Tabelle kopieren
Der Anwender hat ein Formular mit DBEdit Feldern vor sich die auf diesen Datensatz zeigen.
Dort soll er seine Änderungen vornehmen und dann "Speichern" drücken ansonsten muss ich den Datensatz wieder löschen. @mkinzler Die Fehlermeldung hieß: "Syntax Fehler in Insert Into Anweisung" |
Re: ADO Daten in gleicher Tabelle kopieren
In MSSQL kann man den letzten eingefügten Autowert so ermittelt...
SQL-Code:
Ob das auch mit Access geht weiss ich nicht.
SELECT @@Identity AS ID
Gruss Thorsten |
Re: ADO Daten in gleicher Tabelle kopieren
Ich habe es jetzt so gelöst, das läuft überall, denk ich mal.
Delphi-Quellcode:
So funktioniert es bisher bei mir, falls jemand etwas dagegen anzumerken hat, nur zu !!
DM.QKat.SQL.text := 'Select * from Kataloge order by id';
DM.QKat.Open; DM.QKat.Last; LBestellNr := InputBox('Bitte neue Bestellnummer eingeben', 'Bestellnummer:', ''); if LBestellNr <> '' then begin DM.QKat.Edit; DM.QKat.FieldByName('BestellNr').AsString:=LBestellNr; AktBestNr := LBestellNr; DM.QKat.Post; end else begin DM.QKat.Delete; end; DM.QKat.SQL.text := 'Select * from Kataloge order by BestellNr'; DM.QKat.Open; DM.QKat.Locate('BestellNr', AktBestNr, []); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 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 by Thomas Breitkreuz