三层开发高手请进,非高手免入(400分)不够等我以后有再给.........特急!特急!特急!(200分)

  • 主题发起人 主题发起人 zfgb_168
  • 开始时间 开始时间
Z

zfgb_168

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚刚接触三层开发,请教各位大虾。如何存储非数据源绑定的数据到数据库。
如:数据库有一数据表:Name,CodeId,Sex......
有三个Edit控件写入:李某某,12345,男
还有一个DBgrid控件是李某某的资料,
如何通过Clientdataset存储到数据库中?为什么用
clientdataset.insert
clientdataset.fieldbyname('Name').value:=edit1.text;
........
clientdataset.post
if clientdataset.changecount>0 then
Clientdataset.applyupdates(0)
不成功??
 
要调用应用服务器的保存命令才能存进数据库 。
 
这一语句Clientdataset.applyupdates(0) 就是了,可就是不行。
是数据源绑定的如DBgrid就行。
 
三层啊,你应用服务器怎么写的?
 
应用服务器只是用Query来连接数据库呀。
 
"存储非数据源绑定的数据到数据库"
调用含有INSERT语句的储存过程。
 
是不是用Clientdataset.commandtext来调用sql的insert语句?
 
不是。
在数据库上创建储存过程。
Clientdataset.commandtext来调用sql的insert语句也行吧
 
insert into tablename (field1, field2....fieldn)
values (value1, value2, ...valuen)
 
問題分析如下﹕
1﹐你的TClientDateSet是通過什么方式獲得數據結構的。如﹕Select * from Table
where 1= 0 .還是TClientDataSet中已有數據了。總之確保TClientDataSet
已經Open, 且已獲得表結構了。
2﹐你不采用數據源組件﹐那么TClentDataSet必重復使用于不同的表﹐如若是這樣
你需要指定表名﹐在TProvider的GetTableName事件中指定表名。
3﹐最好Trace程序執行的SQL Code.
4, Good lucky!^_^
 
是不是没有provider?
 
建立insert存储过程,再用Clientdataset.commandtext调用我没有试过,我会马上去试,但是,如果表中字段太多,有些可为空,insert要一一对齐,维护起来不太方便,
我的上述程序运行无错误提示,而且Clientdataset.changecount>0,表示数据已存入内存,只是applyupdates(0)是没有存进远程数据库中。
to coolzew:能否具体点,是不是也要调用存储过程,我的结构是:应用服务器其中一个连接数据库是:Qerry+Datasetprovider,sql:select * from
数据表。程序是用Dcomconnection连接,
 
1.在TProvider的GetTableName事件中指定表名
2.TProvider的ResolveToDataset:=False

如果还不行,检查交易情况,有可能需要强制COMMIT;
 
要指定Provider。
 
直接在中間層中寫Insert方法
然后在客戶端調用
 
加上事务吧
try
ADOConnection1.BeginTrans;
clientdataset.insert
clientdataset.fieldbyname('Name').value:=edit1.text;
........
clientdataset.post
Clientdataset.applyupdates(-1)

ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
947
SUNSTONE的Delphi笔记
S
I
回复
0
查看
737
import
I
后退
顶部