![]() |
DDBAC Fehler: "Interface nicht unterstützt"
Hi,
ich schreibe grad an einer Anwendung in der ich Kontodaten abrufen will. Dafür nutze ich DDBAC. Aber an einer Stelle komme ich nicht weiter. Hier der Source:
Delphi-Quellcode:
in der markierten Zeile
procedure TBankList.GetAmounts(ID, pin: string; bank: TBank);
var aHKKAZ: BACSegment; aMsgLogin, aMsgLogout: BACMessage; aMsg: BACMessage; fHaveSomething: Boolean; sCursor: String; aDataObject: BACDataObject; aTxn: BACTransaction; aHIKAZ, aHIKAZ2: BACSegment; aBlob: BACDataObject; aMT940: BACSwiftStatement; aLine: BACSwiftStatementLine; aBDP: BACSegments; a: TAmount; i, l, iSpeicherzeitraum: Integer; von, bis: TDateTime; begin aDialog:=bank.contact.aContact.NewDialog(pin); if aDialog<>nil then begin aMsgLogin:=BACMessage(aDialog.BeginDialog(bacDialogStandard, ID, nil)); if aDialog.HBCIResultCode>=9000 then Exit; end else Exit; fHaveSomething:=False; aBDP:=bank.contact.aContact.BankData.Segments; l:=aBDP.FindSegmentType('HIKAZS', 0); if l>=0then begin aHIKAZ:=BACSegment(aBDP.Item[l]); iSpeicherzeitraum:=aHIKAZ.Item['Parameter1', 'Speicherzeitraum1']; bis:=Now; von:=bis-iSpeicherzeitraum; end else begin bis:=Now; von:=bis-7; end; aDataObject:=CoBACDataObject.Create; aHKKAZ:=CreateTransactionSegment('HKKAZ', bank); SetAuftraggeberKontoverbindung(aHKKAZ, bank); aHKKAZ.Item['Kontowaehrung1',1]:=bank.account.aAccount.Currency; aHKKAZ.Item['AlleKonten1', 1]:=False; aHKKAZ.Item['DatumVon1', 1]:=von; aHKKAZ.Item['DatumBis1', 1]:=bis; repeat aMsg:=BACMessage(aDialog.ExecuteSegment(aHKKAZ)); ReportResult(aMsg, sCursor, aHKKAZ); aTxn:=aMsg.Transactions[0]; if aTxn.ResponseSegments.Count=1 then begin aHIKAZ2:=BACSegment(aTxn.ResponseSegments[0]); DoDisplayTransactionStatusText(aHIKAZ2.GetXML); if not VarIsEmpty(aHIKAZ2.Item['UmsaetzeGebucht1', 1]) then begin fHaveSomething:=True; aBlob:=IUnknown(aHIKAZ2.item['UmsaetzeGebucht1', 1]) as IBACDataObject2; // <<<<<<<< - Hier tritt der Fehler auf aDataObject.PutString(aDataObject.GetString+aBlob); end; end; if Length(sCursor)=0 then Break else aHKKAZ.Item['Aufsetzpunkt1', 1] := sCursor; until true; if fHaveSomething then begin aMT940:=CoBACSwiftStatement.Create; aDataObject.WriteToObject(aMT940); //a:=TAmount.Create; for i:=0 to aMT940.StatementLines.Count-1 do begin aLine:=BACSwiftStatementLine(aMT940.StatementLines[i]); //a.AccountNumber:=aLine.AccountNumber; //Daten lesen end; //bank.amountList.Add(a); end; aMsgLogout:=BACMessage(aDialog.EndDialog(nil)); end;
Delphi-Quellcode:
tritt folgender Fehler auf: "Im Projekt ist eine Exception der Klasse EIntfCastError mit der Meldung 'Interface nicht unterstützt' aufgetreten".
aBlob:=IUnknown(aHIKAZ2.item['UmsaetzeGebucht1', 1]) as IBACDataObject2;
Da ich mich mit Interfaces so gar nicht auskenne bleibt mir der Ursprung dieses Fehlers verborgen und ich hoffe auf eure Hilfe. Bis zu dieser Zeile funktioniert alles. Auch werden Umsatzdaten geholt. Kennt jemand dieses Problem und kann mir bei der Lösung helfen? Danke. |
AW: DDBAC Fehler: "Interface nicht unterstützt"
Welche Version von DDBAC setzt Du ein?
Wo ist sie her? Da sind einige unterschiedliche im Umlauf. |
AW: DDBAC Fehler: "Interface nicht unterstützt"
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für deine Antwort: Ich verwende Version: 5.3.23.0.
Hab gestern mal getestet ob das mitgelieferte Beispiel FinTSPadDelphi ausprobiert. Läuft Fehlerfrei. Dem zur Folge kann es an DDBAC und dessen Installation eigentlich nicht liegen. Also habe ich meine komplette Implementierung erst mal wieder gelöscht und stumpf per CopyAndPaste alle relevanten Methoden aus der FinTSPadDelphi übernommen und nur geringfügig an die Gegebenheiten angepasst. Lieder tritt wieder der gleiche Fehler auf. Aber Grundsätzlich muss es ja doch an mir liegen. Ich habe mal meine Unit angehängt. Vielleicht hat ja jemand Lust und Muße mal drüber zu schauen. Der Fehler tritt in der Procedure GetAmount in Zeile 739 auf. Wie gesagt, Anmeldung bei der Bank und das Holen der Buchungen funktioniert auch. Lediglich bei dem Cast als IUnKnown kommt der Fehler. Vielen Dank |
AW: DDBAC Fehler: "Interface nicht unterstützt"
Keiner eine Idee?
|
AW: DDBAC Fehler: "Interface nicht unterstützt"
ich habe keine Ahnung von den verwendeten Dingen aber ich würde wie immer erst mal die Zeile zerlegen. In dem Fall in drei. Erstmal "aHIKAZ2.item['UmsaetzeGebucht1', 1]" einer lokalen Variablen zuweisen und schauen (direkt oder im debugger) was das überhaupt ist.
Vermutlich ist das gar kein IUnknown. |
AW: DDBAC Fehler: "Interface nicht unterstützt"
Da geht's ja schon los ;-)
Leider steh ich bei Interfaces auch komplette daneben. Wenn ich aHIKAZ.Item['UmsaetzeGebucht1', 1] auslesen will, dann bekomme ich die Fehlermeldung das wäre vom Typ Dispatch. Ich kann wohl aHIKAZ.GetXML ausführe und bekomme dann die Umsaetze als XML in einen WideString. Da steht auch alles drin wie erwartet, aber ich muss das ja irgendwie in den aBlob vom Typ BACDataObject kriegen. Möglicherweise könnte ich das XML selbst auswerten, aber da das ja geht wenn ich die FinTSPadDelphi, die mitgeliefert wurde, ausführe sollte es ja gehen. Und ich würde das auch gerne so machen. Wenn ich versuche direkt auf IBACDataObject2 zu casten geht das ebenfalls nicht. Es wird schon gar nicht compiliert wegen ungültiger Typenumwandlung. Ich habe ja alles per CopyAndPaste übernommen, und es sollte dann auch so funktionieren. Der einzige Unterschied den ich erkennen kann, ist die Tatsache das es in der FinTSPadDelphi in einer Class(TForm) eingebettet ist, und bei mir in einer Class(TObject). Aber das sollte keinen Unterschied ausmachen. |
AW: DDBAC Fehler: "Interface nicht unterstützt"
Liste der Anhänge anzeigen (Anzahl: 2)
Ich muss dieses Thema noch mal aufgreifen, weil ich leider noch kein Stück weiter gekommen bin.
Mittlerweile habe ich meinen kompletten Code wieder verworfen, und mir ein kleines Testprogramm geschrieben, mit welchem ich das noch mal überprüft habe. Im Testprojekt funktioniert es wieder. Dann habe ich alles in dem eigentlichen Zielprojekt nochmal gemacht, funktioniert wieder nicht! Gleicher Fehler. Der Unterschied zwischen meinem Testprojekt (und auch dem mitgelieferten Beispiel) und dem eigentlichen Zielprojekt ist, dass im Testprojekt und im mitgelieferten Beispiel alle Variablen und Funktionen innerhalb der Form deklariert sind, bzw. in dieser Instanz ablaufen. In meinem Zielprojekt möchte ich das ganze aber in eine Klasse packen, wo es dann wieder nicht funktioniert. Fehler: 'Interface nicht unterstützt' in der gleichen Zeile wie im ersten Post. Kenn es sein, dass ein Interface irgendwie von einer Form abhängig sein kann? Kann ich mir zwar nicht vorstellen, aber es muss ja irgendwas damit zu tun haben. Ich hänge mal mein Testprojekt und die Klassenunit an. |
AW: DDBAC Fehler: "Interface nicht unterstützt"
Hallo,
könntest Du bitte noch die fehlende Unit "AMAmountObject.pas" in Dein Testprojekt hochladen. Die DDDBAC-Type Libraries habe ich mir selbst erstellt. MfG |
AW: DDBAC Fehler: "Interface nicht unterstützt"
Liste der Anhänge anzeigen (Anzahl: 1)
Natürlich ;-) Hatte vergessen, dass man die benötigt.
|
AW: DDBAC Fehler: "Interface nicht unterstützt"
Hallo Hobbycoder,
habs mit Deinen Units ausprobiert. Klappt einwandfrei. Getestet mit verschiedenen, privaten Bankkonten. Jedoch basierten meine Typelibs auf der DDBAC-Version 5.6.71, die vor 4 Wochen noch aktuell war. Mittlerweile sind wir bei 5.6.73. Meine Vermutung ist, dass Deine Typlibs zu alt sind. Vorschlag: Hol Dir das aktuelle DDBAC-SDK, installiere es, erstelle die beiden Typelibs neu (also auf keinen Fall die aus dem mitgelieferten Demo-Projekt nehmen) und binde sie in Dein Projekt ein. Achte auf Win32bit als Zielplattform beim Kompilieren. Erstelle dann im Homebanking Banking Admin (Systemsteuerung) mindestens einen Bankkontakt und synchronisiere diesen. Nimm ein Bankkonto, auf dem in den letzten acht Tagen Bewegungen waren. Dann sollten auch bei Dir die Umsatzbeträge im Memo-Feld angezeigt werden.:-D Bei Fragen zu Interfaces hilft vielleicht diese englische Einführung ![]() erklärt. MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 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