Entwickler-Ecke

Datenbanken - Datensatz kopieren


landwehr - Di 03.01.12 13:42
Titel: Datensatz kopieren
Hallo Leute,

ich habe folgenden Code um einen Datensatz auf einer DB in eine andere DB mit gleicher Struktur zu kopieren.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        dmMain.qryEmpfang.Open;
        dmMain.qryEmpfang.Append;
        for i := 0 to Patient1Qry.fieldcount -1 do
         begin
              dmMain.qryEmpfang.Fields[i].Value := Patient1Qry.Fields[i].Value;
         end;
        dmMain.qryEmpfang.post;
       end;
Die Schleife läuft alle Felder durch un am ende kommt die Meldung EListError "ListenIndex überschreitet das Maximum(141)"

141 Felder sind in der Tabelle.

Warum kommt diese Meldung und was mache ich da falsch.?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


bummi - Di 03.01.12 13:44

hast Du zusätzlich berechete oder Lookupfelder im Dataset Patient1Qry?


Lemmy - Di 03.01.12 13:57

Hi,

Durchdebuggen bis zum schluss und dann schauen welche der Queries keine 141 Felder hat und dann überlegen warum die Struktur doch nicht übereinstimmt. Hast Du ggf. vergessen nach einer DB Anpassung die manuell erzeugten Felder zu aktualisieren?

GRüße


landwehr - Di 03.01.12 14:39

Ich habe ein Computed Feld 'Namekomplett' (Vorname|| ' ' ||Name)

Ist das der Grund?

DB1 ist gleich DB2 habe ich kopiert. Die DB ist nicht verändert worden.


HelgeLange - Di 03.01.12 17:01

Wenn DU im der Quelle ein computed field hast, dann ist das im Ziel wohl eher nicht vorhanden, da es ja kein physisches Feld in Deiner DB ist. Vielleicht einfach in der Schleife fragen, ob das Feld ein Datenfeld ist oder nicht. Der Fehler scheint ja zu sein, dass Deine Quelle mehr Felder hat als Dein Ziel.


landwehr - Mi 04.01.12 14:56

Wie kann ich denn in einer Schleife nachfragen ob dis ein Datenfeld ist?


zuma - Mi 04.01.12 15:14

z.b mit

Delphi-Quelltext
1:
quelle.Fields[i].DataType ?                    


ich mach sowas eher so:
1 Quelldaten lesen
2 Zielstruktur aus quellstruktur erzeugen (Select wie bei Quellstruktur aber mit zusatz rows = 0 oder bedingung 1=0, ergibt ne leere Datenmenge mit lediglich der Struktur)
3 Daten schaufeln in etwa so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
while not quelle.eof do
begin
 Ziel.Append;
 for i := 0 to quelle.fieldcount-1 do
  fields[i].asvariant := quelle.asvariant
 // evtl. Keyfelder anpassen
 ziel.post;
 quelle.next
end;


landwehr - Mi 04.01.12 17:22

Hab ich jetzt so gelöst.

for i := 0 to Patient1Qry.FieldCount -2 do
begin
if dmMain.qryEmpfang.Fields[i] <> Nil then
dmMain.qryEmpfang.Fields[i].asVariant := Patient1Qry.Fields[i].AsVariant;
end;
dmMain.qryEmpfang.post;
end;