![]() |
Den Typ einer Variable herausfiinden
Hallo Zusammen,
ist es möglich den Typ einer Variable herauszufinden? Es hadelt sich nur um "Integer, String, TDateTime, Double und Boolean"
Delphi-Quellcode:
Procedure Beispiel;
var i:Integer; begin i:=1; // wie kann ich jetzt abfragen vom welchen Typ die Varialbe i ist? end; Das Beispiel ist sicherlich Unsinn, es soll jedoch nur visualisieren. Gruß Kostas |
Re: Den Typ einer Variable herausfiinden
hi,
das abfragen ist unmöglich, da sinnlos. du musst die variable schließlich selbst deklarieren, somit weißt du ja auch, von welchem typ sie ist. aenogym |
Re: Den Typ einer Variable herausfiinden
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:
Dann habe ich eine Procedure dieser übergeben ich den Record.
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; 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:
Diesen Vorgang muß ich mehrere Hundert mal im Programm machen.
{---------------------------------------------------------------}
{}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; .... Ich stelle mit vor ich hätte eine Procedure derer übergebe ich den Feldnamen und die Wert-Varialbe z.B. so:
Delphi-Quellcode:
Dabei habe ich zweites Problem wie übergebe ich die Varialbe selbst?
{---------------------------------------------------------------}
{}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); .... 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 |
Re: Den Typ einer Variable herausfiinden
|
Re: Den Typ einer Variable herausfiinden
Vielleicht ist es besser in deinem Fall Objekte zu nutzen und dann mit der RTTI zu arbeiten. Mit Records (selbst bei Variants) kommst du da nicht weit, da du nicht per String auf ein Feld in einem Record zugreifen kannst.
|
Re: Den Typ einer Variable herausfiinden
Hi,
VarTyp hatte ich mir bereits angeschaut. So weit ich weis, wird der Wert der Variant-Variable bewertet. Besser währe es den Typ der Variable selbst heraus zu finden. Vermutlich ist das nicht möglich. Mit Objekten und RTTI habe ich mich leider immer noch nicht beschäftigt. Ich glaube ich erzeuge Global für jeden Datentyp eine eigene Procedure und übergeben die Query, Feldname und den Wert um die Parameter richtig zu füllen. Es ist sicherlich nicht schön aber deutlich übersichtlicher als hunderte von Feldwerten einzeln zu prüfen. Gruß Kostas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz