Entwickler-Ecke
Datenbanken - Frage zum "AppendRecord" - Befehl
dm - Do 17.10.02 10:53
Titel: Frage zum "AppendRecord" - Befehl
Ich möchte mit dem APPENDRECORD Befehl über ADO in einer ACCESS Datenbank einen Datensatz kopieren.
Das klappt auch wunderbar, nur bei dem Wert für NUMMER gibt er eine Fehlermeldung raus, da dieser Wert von Access automatisch vergeben wird, also den Status AUTOWERT hat, den der Anwender ja nicht ändern kann.
Mein Befehl :
Adotable1.AppendRecord ([ Adoquery1[[color=orange]'Nummer[/color]'] , Adoquery1['Händlername'] , ... , Date ,Adoquery1['Artikelnummer']]);
Wie kann ich den Befehl so abändern, dass er das Feld "Nummer" nicht zu überschreiben versucht, sondern Feld "NUMMER" von ACCESS vergeben lässt, die Inhalte der restlichen Felder aber dann mit dem APPENDRECORD Befehl ausgefüllt werden ?
Ist sicher ganz simple, nur finde ich in der Delphi-Hilfe keine entsprechende Antwort.
Gruß DM
dm - Do 17.10.02 10:55
Titel: So lautet der Befehl
Mein Befehl :
Adotable1.AppendRecord ([ Adoquery1['Nummer'] , Adoquery1['Händlername'] , ... , Date ,Adoquery1['Artikelnummer']]);
Also, wer weiss ne Lösung ?
NetSpider - Do 08.02.07 12:37
Hm... ueber 4 Jahre keine Antwort... Ich hab jetzt das selbe Problem mit diesem Auto-Wert-Feld.
Und geloest: Das Feld, welches man aussparen moechte muss mit nil gekennzeichnet werden. Dann klappts.
aladin60 - Mo 11.08.08 13:26
Ich habe folgende Lösung gefunden, die neben autoInc-Feldern auch berechnete Felder einer über ADO angesprochenen Datenmenge berücksichtigt. Ich will Euch das nicht vorenthalten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure DuplicateCurrentRecord(aDataSet : TDataSet); var i : integer; a : array of variant; begin if aDataSet.Active then begin SetLength(a, aDataSet.FieldCount); for i := 0 to aDataSet.FieldCount - 1 do a[i] := aDataSet.Fields[i].AsVariant; aDataSet.Append; for i := 0 to aDataSet.FieldCount - 1 do if (aDataSet.Fields[i].AutoGenerateValue <> arAutoInc) and (aDataSet.Fields[i].FieldKind = fkData) then aDataSet.Fields[i].AsVariant := a[i]; end; end; |
Eine Zuweisung von NULL (Unit Variants) an die "gefährlichen Felder" bringt auch einen Fehler. Wichtig ist nun, dass berechnete Felder in der Felddefinition (wie in der OH beschrieben) mit fkInternalCalc attributiert werden.
Viel Glück
Bernd.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!