在一个项目中,使用delphi来开发客户端+webservice结构的程序,客户端和服务端都由delphi制作。其中有个模块,要求服务端返回一个数据集,而这个数据集是在服务端通过对数据库中多个表格的数据进行复杂分析之后得到的一个数据集,而且这个数据集(视图)在数据库中没有对应的表进行存储(为什么?因为这个模块根据不同客户的需求,展示出来的分析结果的结构不同,如果要在数据库中对应一个表,那每次为不同客户部署都要对数据库进行修改,这个是不可接受的)。
我的思路是这样的,在分析开始之初,先根据要求返回的格式,通过ADOQUERY创建一个视图,sql语句如下:
select 1 as fld1,'' as fld2
然后在分析的时候,根据不同的步骤,往不同的字段里面插入数据,当然这个视图里面有其他的字段用来定位,每次修改字段的时候的语句如下: ADOQry1.Append;
ADOQry1.FieldByName('fld1').AsInteger := StrToInt(edt1.Text);
ADOQry1.FieldByName('fld2').AsString := edt2.Text;
//ADOQry1.Post; 现在的问题出来了,如果不执行post,我用dbgrid查看结果的时候发现,所有加进去的值都是空的,但是执行post明显不可能,因为没有实际的数据表和这个视图进行对应,没有办法更新。请教高手,这种问题是否有办法解决?为什么一定要用ADOQurey呢?因为delphi写的webservice返回数据集要通过ClientDataSet.XMLData的方法,返回一个widestring,客户端再把这个widestring转换成数据集,现在我知道的可行方案只能把ClientDataSet和ADOQurey绑定,这样才能把ADOQurey中的数据全部拷贝到ClientDataSet中。是否有其他的办法我不知道,还请各位高手赐教~~~跪求,在线等~~~
我的思路是这样的,在分析开始之初,先根据要求返回的格式,通过ADOQUERY创建一个视图,sql语句如下:
select 1 as fld1,'' as fld2
然后在分析的时候,根据不同的步骤,往不同的字段里面插入数据,当然这个视图里面有其他的字段用来定位,每次修改字段的时候的语句如下: ADOQry1.Append;
ADOQry1.FieldByName('fld1').AsInteger := StrToInt(edt1.Text);
ADOQry1.FieldByName('fld2').AsString := edt2.Text;
//ADOQry1.Post; 现在的问题出来了,如果不执行post,我用dbgrid查看结果的时候发现,所有加进去的值都是空的,但是执行post明显不可能,因为没有实际的数据表和这个视图进行对应,没有办法更新。请教高手,这种问题是否有办法解决?为什么一定要用ADOQurey呢?因为delphi写的webservice返回数据集要通过ClientDataSet.XMLData的方法,返回一个widestring,客户端再把这个widestring转换成数据集,现在我知道的可行方案只能把ClientDataSet和ADOQurey绑定,这样才能把ADOQurey中的数据全部拷贝到ClientDataSet中。是否有其他的办法我不知道,还请各位高手赐教~~~跪求,在线等~~~
ADOQry1.FieldByName('fld2').AsString := edt2.Text;
需要保存么?可以在stringgrid 上先显示。需要处理的话再处理好了
但是,我只是提供只读的浏览(类似clientdataset的内存表+dbgrid)
要增删改,则自动生成sql传递到应用服务器,由它代为执行