Autor Beitrag
Ingo.Neumann
Hält's aus hier
Beiträge: 11

W2000 XP WIN7
Delphi X2
BeitragVerfasst: So 23.01.05 16:54 
Hallo miteinander,

mittlerweile bin ich am Verzweifeln.

Ich habe ein Formular in welchem ich einfach Standardbriefe (Brief) verfasse.

Nun möchte ich aus dem Kundenformular (Debitor) bestimmte Feldwerte an
eine Procedure im Formular übergeben, welche dann einen Insert auslöst und
diese Werte mit in das table1 einträgt.

Wenn alle Feldwerte im Kundenformular einen Wert enthalten, dann klappts auch
wunderbar, wenn jedoch ein Datenfeld NULL ist, dann gibt es einen Variant-Fehler.

Code in Debitor:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
brief := tbrief.create(self);
try
brief.schnellstart(table1['name1'],table1['name2'],table2['name'],
table1['strasse'], table1['plz'], table1['ort'], table2['telefax'],
'Ihre Kunden-Nr. bei uns: ' + table1['konto']);
brief.showmodal;
finally
brief.release;
end;


Code in Brief:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure tbrief.schnellstart(zname1 : string; zname2 : string; zname3 : string; zstrasse : string;
zplz : string; zort : string; ztelefax : string; zbetreff1 : string);
begin
table1.insert;
if zname1 = null then table1.FieldValues['name1'] := '' else table1.fieldvalues['name1'] := zname1;
if zname2 = null then table1.FieldValues['name2'] := '' else table1.fieldvalues['name2'] := zname2;
if zname3 = null then table1.FieldValues['name3'] := '' else table1.fieldvalues['name3'] := zname3;
if zstrasse = null then table1.FieldValues['strasse'] := '' else table1.fieldvalues['strasse'] := zstrasse;
if zplz = null then table1.FieldValues['plz'] := '' else table1.fieldvalues['plz'] := zplz;
if zort = null then table1.FieldValues['ort'] := '' else table1.fieldvalues['ort'] := zort;
table1.fieldvalues['betreff1'] := zbetreff1;
if ztelefax = null then table1.FieldValues['telefax'] := '' else table1.FieldValues['telefax'] := ztelefax;

end;


Ich habe auch schon versucht aus den Strings TFields zu machen - aber auch leider erfolglos - irgendwie habe ich zur Zeit ein Brett vor dem Kopf ....

wer kann schnell helfen ???

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
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: So 23.01.05 18:42 
Du machst imho die Prüfung zu spät.
Mach die Übergabe doch mal so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
brief := tbrief.create(self);
try
brief.schnellstart(table1['name1'].AsString,table1['name2'].AsString,table2['name'].AsString,
table1['strasse'].AsString, table1['plz'].AsString, table1['ort'].AsString, table2['telefax'].AsString,
'Ihre Kunden-Nr. bei uns: ' + table1['konto'].AsString);
brief.showmodal;
finally
brief.release;
end;

In deiner Routine übergibst du die Werte untypisiert (Variant). Ist es dann inhaltlich Null, ist die Typwandlung vermutlich nicht möglich. Daher bekommst du den Fehler.
Ist nur eine Vermutung. Ich habe das so noch nicht gemacht. 'Und zum Testen bin ich zu faul :wink:
Ingo.Neumann Threadstarter
Hält's aus hier
Beiträge: 11

W2000 XP WIN7
Delphi X2
BeitragVerfasst: So 23.01.05 20:15 
Titel: nahe dran - aber danke für die Hilfe
vielen Dank für die schnelle Hilfe - habe es getestet und klappte nicht,
war aber nahe dran.

Mit der Funktion table1.fieldbyname('FELDNAME').asstring hat es dann funktioniert !

Danke !
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: So 23.01.05 20:17 
Stimmt, da habe ich gepennt. *kopfschüttel*