Danke für die schnelle Antwort,
aber ich habe tatsächlich eine Anforderung dafür.
Ich habe einen neuen Record-Typ definiert mit mehrere Elemente.
Delphi-Quellcode:
type TKDFahrzeug = Record
kfAdressNr:integer;
kfArtikelNr:String;
kfAbholID:integer;
kfAbholPosID:integer;
kfAuftragID:integer;
kfAuftragPosID:integer;
kfTyp:String;
kfBezeichnung:String;
kfEingangsdatum:TDateTime;
kfGebremst:String;
kfHoeche:Double;
kfBreite:Double;
kfLaenge:Double;
kfEigengewicht:Double;
kfGesamtgewicht:Double;
kfBereifung:String;
kfKennzeichen:String;
kfFahrgestellNr:String;
kfHersteller:String;
kfTuevBis:TDateTime;
kfErstzulassung:TDateTime;
kfFarbe:String;
end;
Dann habe ich eine Procedure dieser übergeben ich den Record.
Die Procedure füllt die
Query-Parameter und führ sie aus.
Das Problem ist, ich muß jedes einzelne Feld inhaltlich prüfen
um es dem Parameter zuzuordnen.
Delphi-Quellcode:
{---------------------------------------------------------------}
{}function TdmH.InsertKDFahrzeug(KDFahrzeug:TKDFahrzeug):integer;
{---------------------------------------------------------------}
var
i:integer;
begin
result := 0;
with dsInsertKDFahrzeug, KDFahrzeug do
begin
if not prepared then prepare;
i := Gen_ID('GEN_KDFAHRZEUGE_ID',1);
ParamByName('KDFAHRZEUGEID').AsInteger := i;
if (kfAdressNr>0)
then ParamByName('ADRESSNR').AsInteger := kfAdressNr
else ParamByName('ADRESSNR').clear;
if (kfArtikelNr='')
then ParamByName('ARTIKELNR').AsString := kfArtikelNr
else ParamByName('ARTIKELNR').clear;
if (kfHoeche>0.0)
then ParamByName('HOEHE').AsFloat := kfHoeche
else ParamByName('HOEHE').Clear;
if (kfEingangsdatum>0.0)
then ParamByName('EINGANGSDATUM').AsDate := kfEingangsdatum
else ParamByName('EINGANGSDATUM').clear;
....
Diesen Vorgang muß ich mehrere Hundert mal im Programm machen.
Ich stelle mit vor ich hätte eine Procedure derer übergebe ich
den Feldnamen und die Wert-Varialbe z.B. so:
Delphi-Quellcode:
{---------------------------------------------------------------}
{}function TdmH.InsertKDFahrzeug(KDFahrzeug:TKDFahrzeug):integer;
{---------------------------------------------------------------}
procedure SetParamValues(FieldName:String; ValueVariable:????);
begin
with dsInsertKDFahrzeug do
begin
case GetVarType(ValueVariable) of
Integer:
begin
if (Integer(ValueVariable)>0)
then ParamByName(FieldName).AsInteger := Integer(ValueVariable)
else ParamByName(FieldName).clear;
end;
String:
begin
if (String(ValueVariable)<>'')
then ParamByName(FieldName).AsString := String(ValueVariable)
else ParamByName(FieldName).clear;
end;
...
end;
end;
end;
var
i:integer;
begin
result := 0;
with dsInsertKDFahrzeug, KDFahrzeug do
begin
if not prepared then prepare;
i := Gen_ID('GEN_KDFAHRZEUGE_ID',1);
SetParamValues('KDFAHRZEUGEID', i);
SetParamValues('ADRESSNR', kfAdressNr);
SetParamValues('ARTIKELNR', kfArtikelNr);
SetParamValues('HOEHE', kfHoeche);
SetParamValues('EINGANGSDATUM', kfEingangsdatum);
....
Dabei habe ich zweites Problem wie übergebe ich die Varialbe selbst?
Wenn es keine andere Möglichkeit gibt werde ich es wohl über einen
weiteren Parameter machen z.b.
procedure SetParamValues(FieldName:String; ValueVariable:variant; ValueTyp:Byte);
Gruß Kostas