AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fehler: Falscher Variablentyp
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler: Falscher Variablentyp

Ein Thema von ByTheTime · begonnen am 18. Nov 2011 · letzter Beitrag vom 14. Jun 2012
Antwort Antwort
Seite 2 von 3     12 3      
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#11

AW: Fehler: Falscher Variablentyp

  Alt 19. Nov 2011, 20:58
Also, (ihr quetscht mich ja ganz schön aus ), mit "Es will nicht" habe ich das Programm gemeint. Aber ich habe auch eine erfreuliche Nachricht. Ich habe erst gedacht, der Fehler tritt auf, wenn ich Excel öffne, da ich erst an ein Problem mit der Excel-Variable gedacht habe. Aber es war mal wieder ganz simpel, ich habe den Fehler durch "ausklammern" gefunden (mit {} immer den Code ausgeklammert, der es sicher nicht ist bis ich ganz nahe an der Fehlerquelle bin ).

Delphi-Quellcode:
Excel.Cells[4, 4].Value := EdName; //Was stimmt da wohl nicht?!

--> Excel.Cells[4, ].Value := EdName.Text;
Die Fehlermeldung hat mich etwas verwirrt, weil ich sie nicht mit dem Fehler in Verbindung bringen konnte... Hätte eher sowas erwartet wie 'Inkompitable Typen...'

Aber danke für den "Nachhilfeunterricht" in Sachen IDE
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Fehler: Falscher Variablentyp

  Alt 19. Nov 2011, 21:07
Weil das Ausklammern so umständlich ist, gibt es den Debugger.

Der Debugger funktioniert aber nur, wenn in den Projekt-Optionen "Debug" eingestellt ist.

Dann kann man Halte-Punkte setzen und komplett Schritt für Schritt durch das Programm gehen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
schierl

Registriert seit: 16. Jul 2006
10 Beiträge
 
Delphi XE2 Architect
 
#13

AW: Fehler: Falscher Variablentyp

  Alt 11. Jun 2012, 10:53
Hallo an alle Wissenden,

gibt es zu diesem Thema schon eine Lösung?
Ich habe das selbe Problem mit Delphi XE2, von D2005 bis zu XE hat es immer ohne Probleme geklappt!

In meinen Excel Exporten verwende ich folgende Zeile

...
ExcelWorksheet1.Cells.Item[i,1].value := q_crack_bei_km['ppa_Verfahren'];
...

Wobei ExcelWorksheet1.Cells.Item[i,1].value ein OleVariant,
q_crack_bei_km ein Dataset
und q_crack_bei_km['ppa_Verfahren'] ein TStringField ist.

Wenn ich die Zeile wie folgt abändere

...
ExcelWorksheet1.Cells.Item[i,1].value := string(q_crack_bei_km['ppa_Verfahren']);
...

oder

...
ExcelWorksheet1.Cells.Item[i,1].value := q_crack_bei_kmppa_Verfahren.Value;
...

funktioniert es wieder ohne Problem!
Bei den anderen Typen wie TIntegerField oder TFloatField tritt dieser Effekt nicht auf!
Genauso wenn ich es mit Delphi XE compiliere tritt der Fehler auch nicht auf.
Ich würde mir aber gerne ersparen alle TStringField ab jetzt zu casten!
Sollte ich noch etwas vergessen haben oder mehr Source Notwendig sein bitte bescheid geben!

Danke schon mal im Voraus

Johann
Johann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#14

AW: Fehler: Falscher Variablentyp

  Alt 11. Jun 2012, 11:44
Zitat:
ExcelWorksheet1.Cells.Item[i,1].value := string(q_crack_bei_km['ppa_Verfahren']);
Das Ziel ist ja ein Variant/OleVariant und das andere ein Objekt.
Grundsätzlich solltest du einfach immer davon ausgehn, daß es nicht einfach so eine Konvertierunbg von Ojekt in was Anderes gibt.

Vor einer Weile wurde zwar Delphi-Referenz durchsuchenTObject.ToString eingeführt, aber dieses wurde noch nahezu nirgendwo verwendet/überschrieben, denn dieses muß für jeden Objekttyp einzeln implementiert werden, da es von alleine nicht weiß, wie der Inhalt dieses Objektes in ein String umgewandelt werden könnte.
Somit ist es auch nicht sicher, was die String(...)-Konvertierung zurückgibt, da sie am Ende "hoffentlich" auf ToString gemäppt wird.
(Sollte hier direkt der Objektzeiger in einen Stringzeiger gecastet werden, dann hast du ein großes Problem)

Wenn es sich bei dir um TField-Nachfahren handelt, solltest du besser immer .Value verwenden, oder notfalls einfach immer .AsString (was ja auch bei Integer und Co. ginge).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Jun 2012 um 11:47 Uhr)
  Mit Zitat antworten Zitat
schierl

Registriert seit: 16. Jul 2006
10 Beiträge
 
Delphi XE2 Architect
 
#15

AW: Fehler: Falscher Variablentyp

  Alt 11. Jun 2012, 13:58
Hallo himitsu,

Zitat:
Grundsätzlich solltest du einfach immer davon ausgehn, daß es nicht einfach so eine Konvertierunbg von Ojekt in was Anderes gibt.
du hast natürlich vollkommen recht, aber der Code denn ich verwende funktioniert schon seit Jahren so (Delphi 7 bis XE).
Ich bin gerade dabei alle meine Programme auf Delphi XE2 umzustellen und dabei über das Problem gestolpert.
Ich kann mir nicht vorstellen, daß eine Konvertierung die es schon seit Jahren gibt, auf einmal nicht mehr geht.
Das von dir zitierte Beispiel wäre auch der schlechteste Fall um das Problem zu beheben.
Änderung zwei ist mein Favorit derzeit, gefällt mir aber so nicht.
Der Aufruf DataSet['Variablenname'] ist einfach flexibler als der Aufruf DataSetVariablenname.Value. In einigen Fällen
ermitlle ich erst zur Laufzeit wie die Variable heist und exportiere sie dann nach Excel. Und wie schon erwähnt funktioniert
das mit allen Typen ausser mit TStringField in der Kompination mit TDataset.
Johann
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#16

AW: Fehler: Falscher Variablentyp

  Alt 11. Jun 2012, 14:05
Ich kann mir nicht vorstellen, daß eine Konvertierung die es schon seit Jahren gibt, auf einmal nicht mehr geht.
So wenig Phantasie?
Auch wenn ich Deine Emotionen verstehen kann, Du solltest zunächst einmal das Verhalten des Compilers akzeptieren und bei Gelegenheit Deine Schlüsse daraus ziehen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
schierl

Registriert seit: 16. Jul 2006
10 Beiträge
 
Delphi XE2 Architect
 
#17

AW: Fehler: Falscher Variablentyp

  Alt 11. Jun 2012, 14:24
Ich kann mir nicht vorstellen, daß eine Konvertierung die es schon seit Jahren gibt, auf einmal nicht mehr geht.
So wenig Phantasie?
Auch wenn ich Deine Emotionen verstehen kann, Du solltest zunächst einmal das Verhalten des Compilers akzeptieren und bei Gelegenheit Deine Schlüsse daraus ziehen.
Das dürfte woll stimmen denn ich verstehe diese/n Antwort/Kommentar leider nicht!
Was hat das mit dem Thema zu tun? Oder versteht man darunter die Aussage 'It's not a bug, it's a feature!'
Ich sehe das ganze eigentlich ziemlich Emotionslos sondern eher so das es sicher viele Leute gibt,
die mehr wissen und verstehen als ich.

Gruß

Johann
Johann
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#18
  Alt 11. Jun 2012, 16:56
...
Wobei ExcelWorksheet1.Cells.Item[i,1].value ein OleVariant,
q_crack_bei_km ein Dataset
und q_crack_bei_km['ppa_Verfahren'] ein TStringField ist.
Der letzte Satz ist nicht korrekt: Es muss heißen
Zitat von Der Klugsch...:
und q_crack_bei_km['ppa_Verfahren'] ein TStringField Variant ist.
Neuerdings verwendet Delphi WideString, wenn irgendwo 'String' steht. Ich vermute, das steht in direktem Zusammenhang. Denn so gesehen ist an deinem Code nichts verwerfliches festzustellen.

Die Sache mit den Emotionen und der fehlenden Phantasie verstehe ich auch nicht so ganz.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#19

AW: Fehler: Falscher Variablentyp

  Alt 11. Jun 2012, 17:21
[QUOTE=Iwo Asnet;1170328]Der letzte Satz ist nicht korrekt: Es muss heißen
Zitat von Der Klugsch...:
und q_crack_bei_km['ppa_Verfahren'] ein TStringField Variant ist.
Wobei das eine komplett andere Aussage darstellt ... meine Antwort war natürlich uf das TStringField bezogen.

Neuerdings verwendet Delphi WideString, wenn irgendwo 'String' steht. Ich vermute, das steht in direktem Zusammenhang. Denn so gesehen ist an deinem Code nichts verwerfliches festzustellen.
Seit Delphi 2009 ist String (nicht der ShortString) ein Alias für den Delphi-Referenz durchsuchenUnicodeString und davor zeigte er auf den Delphi-Referenz durchsuchenAnsiString.
Der Delphi-Referenz durchsuchenWideString ist ein komplett eigenständiger Stringtyp.

LongString = AnsiString und UnicodeString sind quasi aufgemotzte dynamische Arrays of AnsiChar/WideChar
ShortString = ShortString und String[123] sind Records mit einem statischen Array of AnsiChar
WideString = ein Wraper für OleString (MSDN-Library durchsuchenSysAllocString und Freunde)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
schierl

Registriert seit: 16. Jul 2006
10 Beiträge
 
Delphi XE2 Architect
 
#20

AW: Fehler: Falscher Variablentyp

  Alt 12. Jun 2012, 08:19
Danke an den Iwo Asnet für die Richtigstellung, bei dem Versuch soviel Information wie möglich zu geben,
habe ich mich dann ver(w)irrt und entschuldige mich dafür!
Johann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 22:53 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