Autor Beitrag
stelmaszyk
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 28.12.06 18:35 
Wie kann man einen (einen!!!) Datensatz von einer Paradoxtabelle in eine andere kopieren.
Die Zieltabelle enthält nicht alle Felder der Quelltabelle.
Die Lösung mit ...fieldbyname...:=...fieldbyname...usw ist mir zu umfangreich (ca. 36 Felder). Wer hat eine Lösung, bitte nicht mit SQL, das klappt in einer Multiuserumgebung nicht immer sauber, mit batch-move bekomme ich bei einem Datensatz (ohne range ...) eine Indexfehler, warum...???.

Danke für die Hilfe.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 29.12.06 06:27 
Zitat:
Wer hat eine Lösung, bitte nicht mit SQL, das klappt in einer Multiuserumgebung nicht immer sauber
??? Mit SQL funktioniert es genauso gut oder schlecht wie mit TTable.
Dein Vorhaben würde so einfach aber nur mit SQL funktionieren:
ausblenden SQL-Anweisung
1:
Select ... into ...					

_________________
Markus Kinzler.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 29.12.06 08:57 
SQL wäre sicher die beste Lösung, aber wenn Du das nicht möchtest, dann gibt es auch andere Möglichkeiten.
Du musst nicht FieldByName verwenden. Es geht auch Fields[Feldnummer]. Mit einer Schleife kannst Du das dann sehr schnell durchlaufen.
Lake
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78


D6 prof., Delphi 10.2 Tokyo
BeitragVerfasst: Fr 29.12.06 11:07 
Davon ausgehend, dass beide Tabellen die gleiche Structur haben, würde ich es so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
tblZiel.edit;
tblZiel.insert;
for iCnt := 0 to tblQuelle.FieldCount - 1 do 
begin
  tblZiel.Fields[iCnt].AsVariant := tblQuelle.Fields[iCnt].AsVariant;
end;
tblZiel.post;

_________________
Gruss Lake
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 29.12.06 11:12 
[quote="user profile iconLake"]Davon ausgehend, dass beide Tabellen die gleiche Structur haben, würde ich es so machen:

stelmaszyk hat folgendes geschrieben:
Die Zieltabelle enthält nicht alle Felder der Quelltabelle.

_________________
Markus Kinzler.
Lake
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78


D6 prof., Delphi 10.2 Tokyo
BeitragVerfasst: Fr 29.12.06 11:45 
Wer lesen kann hat klare Vorteile. Sorry da habe ich nicht richtg hingesehen.

user profile iconstelmaszyk hat folgendes geschrieben:
Die Zieltabelle enthält nicht alle Felder der Quelltabelle.


Dann muss man die zu kopierenden Felder vorher definieren und sagen welches Feld wohin soll.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
arFeldVon[0]:='Feld1';
arFeldVon[1]:='Feld3';

arFeldNach[0]:='Feld1';
arFeldNach[1]:='Feld24';
 

tblZiel.edit;
tblZiel.insert;
for iCnt := 0 to high(arFeldVon) do 
begin
  tblZiel.FieldByName(arFeldNach[iCnt]).AsVariant := tblQuelle.FieldByName(arFeldVon[iCnt]).AsVariant;
end;
tblZiel.post;

_________________
Gruss Lake
stelmaszyk Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 29.12.06 14:09 
Danke für alle Antworten.
Es ist wohl doch nur mit viel Schreibarbeit zu lösen.

Guten Rutsch und alles Gute für 2007.

B. Stelmaszyk
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.12.06 15:40 
soviel schreibaufwand sollte das nicht sein.

es gibt halt 2 möglichkeiten (a) mit SQL und (b) mit der ganznormalen tabelle

ausblenden SQL-Anweisung
1:
insert into tabbelle (f1....) select * from tabbelle where....					


ausblenden Delphi-Quelltext
1:
2:
3:
4:
tabbelle.insert;
for i := 0 to tabbelle.fieldcount -1 do
 tabbelle.fields[i] := quelltabelle.fields[i];
tabbelle.post;


PS: wenn du am wenigsten arbeit haben möchtest, nimm das SQL statement, da kannst du dann die felder im insert als auch im select angeben... die übergabe erfolgt dann nach der stellung der parameter.

<HTH>