Moin,
folgendes Problem:
Ich habe einen
SOAP-Server erstellt, mit dem ich per Datasetprovider die geöffneten Datensätze verteile. Nun möchte ich aber das
Query-Statement zur Laufzeit ändern.
Rufe ich die Funktion Open auf so erhalte ich das neue Statement. Nur wird mir beim
Query.Open eine
Exception ausgeworfen, nach der das Statement leer sein soll.
Vielleicht weiß ja einer von euch nen Rat.
Delphi-Quellcode:
unit Unit3;
interface
uses
SysUtils,
Classes,
InvokeRegistry,
Midas,
SOAPMidas,
SOAPDm,
xmldom,
Provider,
Xmlxform,
DB,
SDEngine,
XSBuiltIns,
Types,
dgDatabase,
dgQuery,
U_Databases;
type
IMyAppServerSoapDataModule =
interface(IAppServerSOAP)
['
{2D42D6A7-5243-42F6-9D96-35734722891C}']
function HelloWorld(Param1 :
string) :
string;
stdcall;
end;
TMyAppServerSoapDataModule =
class(TSoapDataModule, IMyAppServerSoapDataModule, IAppServerSOAP, IAppServer)
DataSetProvider1 : TDataSetProvider;
procedure SoapDataModuleCreate(Sender : TObject);
private
FBKODB : TBKODatabase;
public
function Open(Param1 :
string) :
string;
stdcall;
end;
implementation
uses
recht;
{$R *.DFM}
procedure TMyAppServerSoapDataModuleCreateInstance(
out obj : TObject);
begin
obj := TMyAppServerSoapDataModule.Create(
nil);
end;
function TMyAppServerSoapDataModule.Open(Param1 :
string) :
string;
stdcall;
begin
FBKODB.Query1.SQL.Text := Param1;
In Param1 steht das richtige Statement FBKODB.Query1.Open;
Exception, weil Statement leer
Delphi-Quellcode:
end;
procedure TMyAppServerSoapDataModule.SoapDataModuleCreate(Sender : TObject);
var
locParams : TStringList;
begin
locParams := TStringList.Create;
try
ReadDatabaseParams('
Bko-DB', locParams);
FBKODB := TBKODatabase.Create(locParams);
finally
locParams.Free;
end;
DataSetProvider1.DataSet := FBKODB.Query1;
end;
initialization
InvRegistry.RegisterInvokableClass(TMyAppServerSoapDataModule, TMyAppServerSoapDataModuleCreateInstance);
InvRegistry.RegisterInterface(TypeInfo(IMyAppServerSoapDataModule));
end.