Einzelnen Beitrag anzeigen

Hobbycoder

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

DDBAC Fehler: "Interface nicht unterstützt"

  Alt 27. Feb 2018, 08: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 08:09 Uhr)
  Mit Zitat antworten Zitat