Einzelnen Beitrag anzeigen

Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: Den Typ einer Variable herausfiinden

  Alt 4. Mai 2005, 23:45
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
  Mit Zitat antworten Zitat