我创建了一个Datasnap服务器(使用向导的独立tcp/ip),并添加了以下服务器方法:
function TServerMethods1.GetSomeData(tablename : String): TDataSet;
var
qry: TSQLQuery;
begin
qry := TSQLQuery.Create(nil);
qry.SQLConnection := SQLConnection1;
qry.SQL.Add('select *');
qry.SQL.Add('from ' + tablename);
qry.Open;
Result := qry;
end;
在客户端,我有一个
ClientModuleUnit
TSQLConnection->TsqlServerMethod->TDataSetProvider->TClientDataSet->DataSource->dBGrid
链接“连接”以从服务器检索只读数据。有一些关于如何做到这一点的教程,我已经成功了。
procedure TForm3.GetSomeDataClick(Sender: TObject);
begin
if combobox1.ItemIndex > -1 then
begin
// ClientModule.SQLConnection1.Close;
ClientModule.ClientDataSet1.Close;
ClientModule.ClientDataSet1.Params.ParamValues['TableName'] := Trim(combobox1.Text);
ClientModule.ClientDataSet1.Open;
end;
end;
组合框1中有几个表名。第一次选择表时,将检索数据并填充DBGrid。如果我选择一个字段少于第一个表的表,我将得到一个
例外。
有趣的是,如果我首先选择一个字段较少的表,那么第二个调用使用第一个调用中的字段,而不是显示所有字段。
错误出现在
Data.DBXCommon.TDBXValueList.GetValueType
-太深太复杂了,我无法理解,真的。
invalid ordinal
消息没有被提出,它按我的预期工作。
这是一个bug,还是只是当前Datasnap(DBX)实现的一个限制?