Hallo Herr Kosch,
ich versuche gerade einen ADO-Recordset in D7 aus einem in D8 geschriebenen COM+ Object einzulesen. Folgender Quellcode in D8:
<PRE>function D8AgroSenseEnterpriseObject.COMGetSchlagdaten(strB _NR,strWJ:string):ADODB.RecordSet;
var aCon : ADODB.Connection;
aRS : ADODB.Recordset;
aError : ASLogError.TASErrorLog;
iResult:Integer;
begin
iResult:=0;
try
aCon:= ADODB.ConnectionClass.Create;
aCon.CursorLocation:= CursorLocationEnum.adUseClient;
try
aCon.Open(sCSADODB,'','',0);
aRS:= ADODB.RecordClass.Create;
aRS.CursorLocation:=CursorLocationEnum.adUseClient Batch;
aRS.Open('SELECT * FROM SCHLAG WHERE (B_NR='''+strB_NR+''') AND (WJ='''+strWJ+''') ',aCon,
CursorTypeEnum.adOpenStatic,LockTypeEnum.adLockOpt imistic,0);
Result:=aRs;
aRS.ActiveConnection:=Nil;
iResult := 1;
except
on E: Exception do
begin
aError.WriteError(E.Message);
ContextUtil.SetAbort;
end;
end;
finally
aCon.Close;
ContextUtil.SetComplete;
end;
</PRE>
Der D7 Client:
<PRE>procedure TForm1.Button3Click(Sender: TObject);
var aSrv 8AgroSenseEnterpriseObject;
aObj :IAgroSenseEnterpriseObject;
aRS :_RecordSet;
iRes :Integer;
iStart,iStop:Integer;
begin
iStart:=GetTickCount;
aSrv:= CoD8AgroSenseEnterpriseObject.CreateRemote(Edit1.T ext);
aObj:= aSrv as IAgroSenseEnterpriseObject;
aRS:=aObj.COMGetSchlagdaten('1000','03');
ADODataSetSchlag.Recordset:= aRS as ADOInt._Recordset;
ADODataSetSchlag.Active:=true;
DBGrid1.DataSource:=DMSchlagquelle;
iStop:=GetTickCount;
Statusbar1.SimpleText:='Daten erfolgreich geladen..'+ Format('Zeitbedarf %d',[iStop-iStart]);
aSrv:=Nil;
aObj:=Nil;
end;
</PRE>
Beim Aufruf erscheint folgende Fehlermeldung am Client: <I>"Der Vorgang ist für ein geschlossenes Objekt nicht zugelassen"</I>
Ich haben einen Errorlog für die Ereignisanzeige geschrieben und sehe darin dann die Fehlermeldungen des COM+ Objekts. Je nachdem ob ich als Servertyp "Local" oder Remote einstelle kommen zwei unterschiedliche Meldungen. Zum einen bei "Remote":<I>Error 6420: The 'discovery' process for the Advantage Database Server failed. Unable to connect to the Advantage Database Server. axServerConnect AdsConnect</I>
und bei "Local":<I>Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
</I> beim Client erscheint daraufhin folgende Meldung:<I>Fehlende Connection oder Connectionstring</I>
Was mache ich falsch? In C# funktioniert das Beispiel mit ähnlichen Funktionen. (und dem selben ADO Connection String)
Vielen Dank im Voraus...
ich versuche gerade einen ADO-Recordset in D7 aus einem in D8 geschriebenen COM+ Object einzulesen. Folgender Quellcode in D8:
<PRE>function D8AgroSenseEnterpriseObject.COMGetSchlagdaten(strB _NR,strWJ:string):ADODB.RecordSet;
var aCon : ADODB.Connection;
aRS : ADODB.Recordset;
aError : ASLogError.TASErrorLog;
iResult:Integer;
begin
iResult:=0;
try
aCon:= ADODB.ConnectionClass.Create;
aCon.CursorLocation:= CursorLocationEnum.adUseClient;
try
aCon.Open(sCSADODB,'','',0);
aRS:= ADODB.RecordClass.Create;
aRS.CursorLocation:=CursorLocationEnum.adUseClient Batch;
aRS.Open('SELECT * FROM SCHLAG WHERE (B_NR='''+strB_NR+''') AND (WJ='''+strWJ+''') ',aCon,
CursorTypeEnum.adOpenStatic,LockTypeEnum.adLockOpt imistic,0);
Result:=aRs;
aRS.ActiveConnection:=Nil;
iResult := 1;
except
on E: Exception do
begin
aError.WriteError(E.Message);
ContextUtil.SetAbort;
end;
end;
finally
aCon.Close;
ContextUtil.SetComplete;
end;
</PRE>
Der D7 Client:
<PRE>procedure TForm1.Button3Click(Sender: TObject);
var aSrv 8AgroSenseEnterpriseObject;
aObj :IAgroSenseEnterpriseObject;
aRS :_RecordSet;
iRes :Integer;
iStart,iStop:Integer;
begin
iStart:=GetTickCount;
aSrv:= CoD8AgroSenseEnterpriseObject.CreateRemote(Edit1.T ext);
aObj:= aSrv as IAgroSenseEnterpriseObject;
aRS:=aObj.COMGetSchlagdaten('1000','03');
ADODataSetSchlag.Recordset:= aRS as ADOInt._Recordset;
ADODataSetSchlag.Active:=true;
DBGrid1.DataSource:=DMSchlagquelle;
iStop:=GetTickCount;
Statusbar1.SimpleText:='Daten erfolgreich geladen..'+ Format('Zeitbedarf %d',[iStop-iStart]);
aSrv:=Nil;
aObj:=Nil;
end;
</PRE>
Beim Aufruf erscheint folgende Fehlermeldung am Client: <I>"Der Vorgang ist für ein geschlossenes Objekt nicht zugelassen"</I>
Ich haben einen Errorlog für die Ereignisanzeige geschrieben und sehe darin dann die Fehlermeldungen des COM+ Objekts. Je nachdem ob ich als Servertyp "Local" oder Remote einstelle kommen zwei unterschiedliche Meldungen. Zum einen bei "Remote":<I>Error 6420: The 'discovery' process for the Advantage Database Server failed. Unable to connect to the Advantage Database Server. axServerConnect AdsConnect</I>
und bei "Local":<I>Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
</I> beim Client erscheint daraufhin folgende Meldung:<I>Fehlende Connection oder Connectionstring</I>
Was mache ich falsch? In C# funktioniert das Beispiel mit ähnlichen Funktionen. (und dem selben ADO Connection String)
Vielen Dank im Voraus...
Comment