AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Den Typ einer Variable herausfiinden

Ein Thema von Kostas · begonnen am 4. Mai 2005 · letzter Beitrag vom 5. Mai 2005
Antwort Antwort
Kostas

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

Den Typ einer Variable herausfiinden

  Alt 4. Mai 2005, 22:17
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
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Den Typ einer Variable herausfiinden

  Alt 4. Mai 2005, 22:19
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
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Kostas

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

Re: Den Typ einer Variable herausfiinden

  Alt 4. Mai 2005, 22: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
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Den Typ einer Variable herausfiinden

  Alt 4. Mai 2005, 23:23
Moin Kostas,

wenn Du mit Variants arbeitest: Schau Dir mal die Funktion Delphi-Referenz durchsuchenVarType an.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: Den Typ einer Variable herausfiinden

  Alt 5. Mai 2005, 08:59
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Kostas

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

Re: Den Typ einer Variable herausfiinden

  Alt 5. Mai 2005, 09:47
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz