![]() |
Fehler: Falscher Variablentyp
Hallo Dephianer,
arbeite an einem Programm, der Click auf einen bestimmten Button öffnet es Excel. Doch in den letzen 2 Tagen habe ich diese Funktion nicht gebraucht und an anderen Funktionen gearbeitet. Dabei muss ich wohl mal einen Fehler gemacht haben: Wenn ich den Button jetzt Clicke, bekomme ich folgende Fehlermeldung: "Falscher Variablentyp." Ich nehme das mal wörtlich... Ich muss wohl meine globale Variable 'Excel' falsch deklariert haben. Aber es stimmt alles, sie ist vom Typ 'Variant'. Was könnte mein Problem sein? Danke, Lukas |
AW: Fehler: Falscher Variablentyp
:glaskugel: ich sehe ein Problem ... zu wenig Informationen
|
AW: Fehler: Falscher Variablentyp
Also ich weiß ehrlich gesagt nicht was es dazu noch zu sagen gibt :? Okay, das kann ich noch zusammenkratzen:
Delphi-Quellcode:
Aber was hilft das den weiter? Wie gesagt, ich bekomme den Fehler: "Falscher Variablentyp." Kann das aber nicht mit dem Code und der Variable in Verbindung bringen...
var //global
Excel: Variant; procedure TFormTPWrite.ArrayToExcel; begin try Excel := CreateOleObject('Excel.Application'); except ShowMessage('Excel konnte nicht gestartet werden!'); Exit; end; Excel.DisplayAlerts := false; Excel.Workbooks.Open(AppDataPath + 'Vorlage'); //Code Excel.ActiveWorkbook.SaveAs(Path + 'Datei ' + EdKalender.Text + ' - ' + EdUsername.Text); Excel.DisplayAlerts := true; Excel.Quit; Excel := Unassigned; |
AW: Fehler: Falscher Variablentyp
Zitat:
Oh großer Meister-Architect, vergebe uns unsere Unwissenheit und unsere beschränkte hellseherische Gabe, aber wir sind froh, dass du dich herablässt und uns Brocken vom gesegneten heiligen zusammengekratzten Code hinwirfst, wohlwissend dass wir dessen unwürdig sind. Ich glaube das weiß im Moment auch niemand mehr hier, denn mir fehlen ab jetzt die Worte :roll: |
AW: Fehler: Falscher Variablentyp
Okay, Sorry, hast wohl recht, war etwas zu voreilig. Neuer Versuch: Ich habe keine Ahnung wo der Fehler auftritt. Er tritt ja nicht beim compiliren auf, sonder beim Klick auf den Button. Ich versuche nochmal etwas genaueres zu finden, und werde es morgen hier posten, aber vllt. gibt es Leute die das Problem "falscher Variablentyp." schonmal hatten. Ich kann dort nur rausinterpretieren, das er ein Problem mit meiner Variable 'Excel: Variant;' hat, aber warum, würde ich selbt gerne wissen. Eine möglichkeit hätte ich: Ich habe "Variants" nicht in den Uses eingebunden, das hatte aber bis heute noch keine Auswirkungen auf mein Programm (Wenn ich es einbinden will, mekert er auch rum!).
|
AW: Fehler: Falscher Variablentyp
Wie man mit dem Debugger Zeile für Zeile durch den Source geht, weißt du aber, oder? Damit findet man dann die Stelle, die den Fehler verursacht.
|
AW: Fehler: Falscher Variablentyp
Zitat:
Für alle anderen: In der IDE den Cursor in die Zeile
Delphi-Quellcode:
setzen und dann einfach mal F4 drücken.
Excel := CreateOleObject('Excel.Application');
Dann solange auf F8 bis der Fehler kommt. Dann kennt man die Zeile, die den Fehler verursacht ... |
AW: Fehler: Falscher Variablentyp
Zitat:
|
AW: Fehler: Falscher Variablentyp
Also irgendwie will das bei mir nicht, aber ich kann schonmal sagen das es ein Error vom Typ "EOleSysErro" ist.
|
AW: Fehler: Falscher Variablentyp
Zitat:
Wenn du in einer fremden Stadt etwas suchst, fragst du dann auch "Wie komme ich da denn hin?"? Die Frage kannst du dir eigentlich sparen, denn die Antwort ist schon vorher klar: "Hä?" |
AW: Fehler: Falscher Variablentyp
Also, (ihr quetscht mich ja ganz schön aus :P), 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 :P).
Delphi-Quellcode:
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...'
Excel.Cells[4, 4].Value := EdName; //Was stimmt da wohl nicht?!
--> Excel.Cells[4, ].Value := EdName.Text; Aber danke für den "Nachhilfeunterricht" in Sachen IDE :) |
AW: Fehler: Falscher Variablentyp
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. |
AW: Fehler: Falscher Variablentyp
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 |
AW: Fehler: Falscher Variablentyp
Zitat:
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 ![]() 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). |
AW: Fehler: Falscher Variablentyp
Hallo himitsu,
Zitat:
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. |
AW: Fehler: Falscher Variablentyp
Zitat:
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 |
AW: Fehler: Falscher Variablentyp
Zitat:
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 |
Zitat:
Zitat:
Die Sache mit den Emotionen und der fehlenden Phantasie verstehe ich auch nicht so ganz. |
AW: Fehler: Falscher Variablentyp
[QUOTE=Iwo Asnet;1170328]Der letzte Satz ist nicht korrekt: Es muss heißen
Zitat:
Zitat:
![]() ![]() Der ![]() 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 ( ![]() |
AW: Fehler: Falscher Variablentyp
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!:oops: |
AW: Fehler: Falscher Variablentyp
Ich noch mal!
Für alle die vieleicht das selbe Problem haben hier meinen Lösungsansatz! Den Codeabschnitt
Code:
der in der Zeile 1 und 3 den Fehler 'Falscher Variablentyp' gebracht hat,
ExcelWorksheet1.Cells.Item[i, 1].Value := q_crack_bei_km['Variable1'];
ExcelWorksheet1.Cells.Item[i, 2].Value := q_crack_bei_km['Variable2']; ExcelWorksheet1.Cells.Item[i, 3].Value := q_crack_bei_km['Variable3']; ExcelWorksheet1.Cells.Item[i, 4].Value := q_crack_bei_km['Variable4']; ExcelWorksheet1.Cells.Item[i, 5].Value := q_crack_bei_km['Variable5']; habe ich ersetzt durch
Code:
Vieleicht hilft es ja jemanden!
for j := 1 to q_crack_bei_km.FieldCount - 1 do
ExcelWorksheet1.Cells.Item[i,j].Value := q_crack_bei_km.FieldList[j].DisplayText; Gruß Johann |
AW: Fehler: Falscher Variablentyp
@schierl
kein Problem mit Fließkommazahlen? |
AW: Fehler: Falscher Variablentyp
Bisher noch nicht, habe aber erst ca. 20% umgestellt!
Ich schätze mal das ich bis Freitag damit fertig bin und wenn was auffällt schreibe ich es! |
AW: Fehler: Falscher Variablentyp
Er meinte vorallem wegen dem , und . , welches im DisplayText eventuell anders dargestellt wird, was bei der Rückumwandlung im Variant eventuell Probleme bereitet.
Intern und vorallem für eine weitere Verarbeitung würde ich darum nicht unbedingt den DisplayText verwenden. |
AW: Fehler: Falscher Variablentyp
Ok, ein Problem gelöst ein anderes damit eingetreten :?.
Ich habe das ganze jetzt noch mal erweitert.
Code:
for j := 0 to q_crack_bei_km.FieldCount - 1 do begin
if q_crack_bei_km.FieldList[j].DataType=ftstring then ExcelWorksheet1.Cells.Item[i,j+1].Value := q_crack_bei_km.FieldList[j].DisplayText else ExcelWorksheet1.Cells.Item[i,j+1].Value := q_crack_bei_km[q_crack_bei_km.FieldList[j].DisplayName]; end; |
AW: Fehler: Falscher Variablentyp
sicher ein "Vertipser" >> DisplayName
|
AW: Fehler: Falscher Variablentyp
jain, für die erste Zeile im Excel verwende ich DisplayName und die Datenzeilen FieldName!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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 by Thomas Breitkreuz