AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi DDBAC Fehler: "Interface nicht unterstützt"
Thema durchsuchen
Ansicht
Themen-Optionen

DDBAC Fehler: "Interface nicht unterstützt"

Ein Thema von Hobbycoder · begonnen am 27. Feb 2018 · letzter Beitrag vom 7. Mär 2018
Antwort Antwort
Seite 1 von 2  1 2      
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#1

DDBAC Fehler: "Interface nicht unterstützt"

  Alt 27. Feb 2018, 09:07
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:
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;
in der markierten Zeile  aBlob:=IUnknown(aHIKAZ2.item['UmsaetzeGebucht1', 1]) as IBACDataObject2; tritt folgender Fehler auf: "Im Projekt ist eine Exception der Klasse EIntfCastError mit der Meldung 'Interface nicht unterstützt' aufgetreten".

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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (27. Feb 2018 um 09:09 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 27. Feb 2018, 12:43
Welche Version von DDBAC setzt Du ein?
Wo ist sie her? Da sind einige unterschiedliche im Umlauf.
Fritz Westermann
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#3

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 1. Mär 2018, 10:30
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
Angehängte Dateien
Dateityp: pas AMBank.pas (46,2 KB, 11x aufgerufen)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder ( 1. Mär 2018 um 10:35 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#4

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 2. Mär 2018, 09:52
Keiner eine Idee?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.446 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 2. Mär 2018, 11:58
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.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#6

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 2. Mär 2018, 12:37
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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#7

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 5. Mär 2018, 13:34
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.
Angehängte Dateien
Dateityp: pas DDBACHelper.pas (30,3 KB, 13x aufgerufen)
Dateityp: zip BankTest2.zip (7,9 KB, 13x aufgerufen)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Idiomatix

Registriert seit: 8. Sep 2015
5 Beiträge
 
#8

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 5. Mär 2018, 14:53
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
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#9

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 6. Mär 2018, 08:44
Natürlich Hatte vergessen, dass man die benötigt.
Angehängte Dateien
Dateityp: pas AMAmountObject.pas (14,3 KB, 11x aufgerufen)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Idiomatix

Registriert seit: 8. Sep 2015
5 Beiträge
 
#10

AW: DDBAC Fehler: "Interface nicht unterstützt"

  Alt 6. Mär 2018, 09:47
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.

Bei Fragen zu Interfaces hilft vielleicht diese englische Einführung http://techvanguards.com/ weiter. Zugegeben, ist schon etwas älter, aber sehr gut
erklärt.
MfG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:54 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