对RemObjects不是很熟悉,照着例子写个测试程序,在调用 SQLExecuteCommand('delete from xxx')
时报错“No more results”数据库为Oracle,连接SQL数据执行SQLExecuteCommand是可以的。熟悉的朋友能否提醒一下需要注意哪些地方,先谢谢了。
procedure TClientForm.Button2Click(Sender: TObject);
var
aRowsAffacted: integer;
begin
try
aRowsAffacted := FService.SQLExecuteCommand(AnsiToUtf8(Memo.Text));
ShowMessage('aRowsAffacted:'#9 + intToStr(aRowsAffacted));
except
on e: Exception do
ShowMessage(e.Message);
end;
end;
时报错“No more results”数据库为Oracle,连接SQL数据执行SQLExecuteCommand是可以的。熟悉的朋友能否提醒一下需要注意哪些地方,先谢谢了。
procedure TClientForm.Button2Click(Sender: TObject);
var
aRowsAffacted: integer;
begin
try
aRowsAffacted := FService.SQLExecuteCommand(AnsiToUtf8(Memo.Text));
ShowMessage('aRowsAffacted:'#9 + intToStr(aRowsAffacted));
except
on e: Exception do
ShowMessage(e.Message);
end;
end;
请各位熟悉RemObjects朋友帮忙看看。
TROIndyHTTPServer 和TROBinMessage,
只是RO自动生成的 ***_Impl单元继承TDataAbstractService类的属性需要做一些设置才可以在客户端执行SQL。
这个单元可以填加一些方法,让客户端可以通过这些方法调用数据,比如:
procedure ExecHasReSult(SqlText:string;out FDelta:variant);
begin
//执行Sql语句
Result :=clientdataset1.data;
end; 你的方法应该跟我这边的不一样吧..我没有调用TDataAbstractService类
你在服务器端返回到ClientDataSet,那客户端通过什么方法获取返回的结果?
如:
var
FDelta:variant;
ExecHasReSult('select * from sysobjects',FDelta)
clientDataset.data := FDelta;//这样,就传到客户端了。。
var
adoquery:TADoQuery;
DataSetProvider:TDataSetProvider;
begin
DataSetProvider :=TDataSetProvider.Create(Nil);
adoquery := TADoQuery.Create(nil);
Try
DataSetProvider.dataset := Adoquery;
adoquery.connection := con;//con是已经连接的Tconnection,
adoquery.close;
adoquery.sql.clear;
adoquery.sql.text := SqlText;
adoquery.open;
FDelta := DataSetProvider.data;
Finally
FreeAndNil(adoquery);
FreeAndNil(DataSetProvider);
end;
end;
可能对于移植老的项目比较方便。我实在找不出原因所在,只好把uDAADODriver.pas中调用ExecSQL的函数修改了一下,注释掉异常处理就可以了,但是不知道会不会产生什么影响。function TDAEADOQuery.DoExecute: integer;
begin
result := TADOQuery(Dataset).ExecSQL;
//if TADOQuery(Dataset).Connection.Errors.Count>0 then
//raise Exception.Create(TADOQuery(Dataset).Connection.Errors.Item[0].Description);
end;
结贴了,谢谢各位关注的朋友,希望熟悉RO的朋友能告知真正的原因。