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.