敬请各位大侠不吝赐教!急!三层结构问题:如何通过客户端程序计算并更新远程SQL SEVER 7服务器表中的计算字段值?(100分)

  • 主题发起人 主题发起人 gzhn
  • 开始时间 开始时间
G

gzhn

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个有关产品生产计划的程序:
在三层结构:客户端程序->应用服务器->SLQ SEVER服务器的客户端程序中,通过一个
DBGRID控件显示一个Clientdataset表中的字段值,其中有个字段"合同余数"是通过本
Clientdataset的字段"合同计划数"减去另一个Clientdateset中的"数量"而得,条件
是:两个Clientdataset要按产品的录入日期(DATETIME字段,从中取出年月值)和规格
型号必须相同才能取以上的2个数计算出合同余数。请问如何编写代码?
 
建议你使用一个TClientDataset,在服务端使用TQuery组件,从两个表中取出所需要的字段
,然后再计算字段。
 
用ClientDataset的SQL属性来做,取数的时候实现计算合同余数。当然服务器要能允许客户更改
SQL语句。比如:ClientDataSet1.CommandText:='select Table1的字段名,
(Table1.合同计划数-Table2.数量) as 合同余数 from table1,table2 Where
Year(table1.日期)=Year(table2.日期) and Month(table1.日期)=Month(table2.日期) and
Day(table1.日期)=Day(table2.日期 and Table1.规格型号=Table2.规格型号'
 
谢谢两位大侠ljqljq 和踏雪无痕的指教!可由于条件中产品的规格型号是由6个字段值组
成的,因而判断的条件较多,在客户端的Clientdataset.commandtext中输入SQL语句时受到255个
字符长度的限制,所以无法按两位大侠的想法取数并计算出合同余数的字段值。我该怎么
办?能否在应用服务器端通过Query控件实现该功能?因我使用的应用服务器不是用的ODBC,
而是通过创建数据模块来创建应用服务器的。再次请教两位大侠。
 
可以把SQL直接写在中间层的Query中,如果SQL语句特长,可以写在存储过程中,用Query
来调用/用ClientDataSet.CommandText来用。
 
那就写一个存储过程吧(带参数的),把相关条件的值传过去,写存储过程其实挺好
的除非你的数据库不支持存储过程。我做的程序很多是这样的,写存储过程,数据库是
SQL Server的,如果发现数据不对只要改存储过程就行应用程序都不用重新编译。调用存储
过程也是用ClientDataSet.CommandText:='execute 存储过程名(存储过程参数)'。不过还有
一个不太好的办法,只要的内存够,SQL里的条件可以少几个,然后用其它的条件进行过滤就可
得到满足条件的结果。
 
踏雪无痕先生:你好!
  我也想过用存储过程,可手头有关这方面的书介绍得不详细,还从没用过。其书写格式
知道一些,但不知是写在哪个数据集控件的什么事件中?如果你手头有这方面的事例,能否
发一或二个如何建立和调用存储过程的事例启发一下?万分感谢!gzhn呈上
 
谢谢你的启发。
 
后退
顶部