三层结构:
中间层为ADOConnection, ADOQuery, DataSetProvider。
客户端为DCOMConnection,ClientDataSet
客户端执行的代码:
ClientDataSet2.Close;
ClientDataSet2.CommandText := 'insert into PE_CENTER_CONFIG(CODE,NAME,ADDRESS,POST_CODE,LINKMAN,TEL,GREETING,REMARK) values(:CODE,:NAME,:ADDRESS,:POST_CODE,:LINKMAN,:TEL,:GREETING,:REMARK)';
ClientDataSet2.Params.ParamByName('CODE').AsString := Trim(Edit8.Text);
ClientDataSet2.Params.ParamByName('NAME').AsString := Trim(Edit1.Text);
ClientDataSet2.Params.ParamByName('ADDRESS').AsString := Trim(Edit2.Text);
ClientDataSet2.Params.ParamByName('POST_CODE').AsString := Trim(Edit3.Text);
ClientDataSet2.Params.ParamByName('LINKMAN').AsString := Trim(Edit4.Text);
ClientDataSet2.Params.ParamByName('TEL').AsString := Trim(Edit5.Text);
ClientDataSet2.Params.ParamByName('GREETING').AsString := Trim(Edit6.Text);
ClientDataSet2.Params.ParamByName('REMARK').AsString := Trim(Edit7.Text);
ClientDataSet2.Execute;客户端执行代码之后,写到数据库里的记录,字段内容自动被截断了,比如:要保存的内容 实际存到数据库的内容
----------------- -----------------------
计算机中心啊 计算机
跟踪SQL Server数据库得到以下语句:SET NO_BROWSETABLE OFFSET FMTONLY ON select CODE,NAME,ADDRESS,POST_CODE,LINKMAN,TEL,GREETING,REMARK from PE_CENTER_CONFIG SET FMTONLY OFFSET NO_BROWSETABLE ONdeclare @P1 int
set @P1=2
exec sp_prepare @P1 output, N'@P1 varchar(6),@P2 varchar(40),@P3 varchar(60),@P4 varchar(6),@P5 varchar(8),@P6 varchar(20),@P7 varchar(200),@P8 varchar(40)', N'insert into PE_CENTER_CONFIG(CODE,NAME,ADDRESS,POST_CODE,LINKMAN,TEL,GREETING,REMARK) values(@P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8)', 1
select @P1exec sp_unprepare 2SET NO_BROWSETABLE OFFexec sp_executesql N'insert into PE_CENTER_CONFIG(CODE,NAME,ADDRESS,POST_CODE,LINKMAN,TEL,GREETING,REMARK) values(@P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8)', N'@P1 varchar(5),@P2 varchar(4),@P3 varchar(5),@P4 varchar(5),@P5 varchar(5),@P6 varchar(5),@P7 varchar(5),@P8 varchar(5)', 'Edit8', '体检', 'Edit2', 'Edit3', 'Edit4', 'Edit5', 'Edit6', 'Edit7'SET NO_BROWSETABLE ON
SET FMTONLY ON select * from PE_CENTER_CONFIG SET FMTONLY OFF俺又测试了几次,发现后一个语句exec sp_executesql中字段长度是根据传给它的参数决定的,如:ClientDataSet2.Params.ParamByName('NAME').AsString := Trim(Edit1.Text),如果 Edit1.text := ‘计算机中心啊’,则exec sp_executesql中的参数@P2 长度即为varchar(6),这样最终保存到数据库中的内容为” 计算机”,三个汉字,长度为6。不清楚这里的字段长度为什么不根据数据库中的字段长度来决定,而是根据所传给参数的长度。
中间层为ADOConnection, ADOQuery, DataSetProvider。
客户端为DCOMConnection,ClientDataSet
客户端执行的代码:
ClientDataSet2.Close;
ClientDataSet2.CommandText := 'insert into PE_CENTER_CONFIG(CODE,NAME,ADDRESS,POST_CODE,LINKMAN,TEL,GREETING,REMARK) values(:CODE,:NAME,:ADDRESS,:POST_CODE,:LINKMAN,:TEL,:GREETING,:REMARK)';
ClientDataSet2.Params.ParamByName('CODE').AsString := Trim(Edit8.Text);
ClientDataSet2.Params.ParamByName('NAME').AsString := Trim(Edit1.Text);
ClientDataSet2.Params.ParamByName('ADDRESS').AsString := Trim(Edit2.Text);
ClientDataSet2.Params.ParamByName('POST_CODE').AsString := Trim(Edit3.Text);
ClientDataSet2.Params.ParamByName('LINKMAN').AsString := Trim(Edit4.Text);
ClientDataSet2.Params.ParamByName('TEL').AsString := Trim(Edit5.Text);
ClientDataSet2.Params.ParamByName('GREETING').AsString := Trim(Edit6.Text);
ClientDataSet2.Params.ParamByName('REMARK').AsString := Trim(Edit7.Text);
ClientDataSet2.Execute;客户端执行代码之后,写到数据库里的记录,字段内容自动被截断了,比如:要保存的内容 实际存到数据库的内容
----------------- -----------------------
计算机中心啊 计算机
跟踪SQL Server数据库得到以下语句:SET NO_BROWSETABLE OFFSET FMTONLY ON select CODE,NAME,ADDRESS,POST_CODE,LINKMAN,TEL,GREETING,REMARK from PE_CENTER_CONFIG SET FMTONLY OFFSET NO_BROWSETABLE ONdeclare @P1 int
set @P1=2
exec sp_prepare @P1 output, N'@P1 varchar(6),@P2 varchar(40),@P3 varchar(60),@P4 varchar(6),@P5 varchar(8),@P6 varchar(20),@P7 varchar(200),@P8 varchar(40)', N'insert into PE_CENTER_CONFIG(CODE,NAME,ADDRESS,POST_CODE,LINKMAN,TEL,GREETING,REMARK) values(@P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8)', 1
select @P1exec sp_unprepare 2SET NO_BROWSETABLE OFFexec sp_executesql N'insert into PE_CENTER_CONFIG(CODE,NAME,ADDRESS,POST_CODE,LINKMAN,TEL,GREETING,REMARK) values(@P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8)', N'@P1 varchar(5),@P2 varchar(4),@P3 varchar(5),@P4 varchar(5),@P5 varchar(5),@P6 varchar(5),@P7 varchar(5),@P8 varchar(5)', 'Edit8', '体检', 'Edit2', 'Edit3', 'Edit4', 'Edit5', 'Edit6', 'Edit7'SET NO_BROWSETABLE ON
SET FMTONLY ON select * from PE_CENTER_CONFIG SET FMTONLY OFF俺又测试了几次,发现后一个语句exec sp_executesql中字段长度是根据传给它的参数决定的,如:ClientDataSet2.Params.ParamByName('NAME').AsString := Trim(Edit1.Text),如果 Edit1.text := ‘计算机中心啊’,则exec sp_executesql中的参数@P2 长度即为varchar(6),这样最终保存到数据库中的内容为” 计算机”,三个汉字,长度为6。不清楚这里的字段长度为什么不根据数据库中的字段长度来决定,而是根据所传给参数的长度。
解决方案 »
- 如何判断注册表键值是否等于某个值?
- 为什么 在 dbedit 数据关联控件 输入 0.000015 保存到数据库后, 就会 显示 1.5E-5 ???? 急!!!!
- (新手求教)请问怎样插入一值到相应字段下(Delphi )
- 问个问题!
- 图像保存问题!!得分好机会!!!!
- 如何隐藏界面
- installshield 7.02 打包问题
- 为什么我的IE不能打开第二层网叶。。???
- 简单的问题image的区域拷贝函数及函数使用方法参数(最好给个例子)!!!
- 折分如下字串,50分请进!!
- 各位删除基类界面的多余的组件后使得子界面自动删除?
- 请问Access怎么实现跟文本文件导入导出?加密之后怎么连接会失败
exec sp_executesql中的参数@P2 长度即为varchar(6),表示有6个中文。
数据库的长度是按照字节来的,6个中文实际上是12个字节。楼主处理一下中文的字节数量就ok。
不过建议三层最好不要用这种办法来保存数据,你可以真接用CLIENTDATASET;成批保存数据;
三层一般通过clientdataset来增加数据,最后applyupdate提交,因为中间层可能会要处理数据