Autor Beitrag
dm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 83



BeitragVerfasst: Do 17.10.02 10:53 
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 83



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123

Windows XP Pro
Delphi 7 Enterprise
BeitragVerfasst: 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.

_________________
Wer in die Fußstapfen anderer tritt hinterlässt keine eigenen Spuren!
aladin60
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20



BeitragVerfasst: 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:

ausblenden 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.