数据库应用程序三层结构中,客户端保存问题
数据库应用程序三层结构中,客户端保存问题
应用程序服务端如下:
在工程中加入Remote Data Module,
在Remote Data Module中加入以下控件:
1. ADOConnection1 通过ODBC连接到数据库
2. ADODataSet1
3. DataSetProvider1
客户端如下:
在工程中加入Data Module中的Customer Data,
在Customer Data中加入以下控件:
1. SocketConnection1
2. ClientDataSet1
3. DataSource1
4. DBGrid1
以InterBase Server 7.5 做后台数据库,利用工具软件连接到数据库,加入测试数据。
客户端登录连接服务端成功,DBGrid1中能正常显示出数据库表中的数据。
问题是:
CustomerData-> ClientDataSet1-> Append(); //添加空记录
CustomerData-> ClientDataSet-> FieldByName( "MANUFACTURE ")-> AsString = Edit1-> Text;
CustomerData-> ClientDataSet1-> FieldByName( "NAME ")-> AsString = Edit2-> Text;
CustomerData-> ClientDataSet1-> FieldByName( "TYPE ")-> AsString = Edit3-> Text;
CustomerData-> ClientDataSet1-> FieldByName( "MAKE_DATE ")-> AsDateTime = DateTimePicker-> Date;
CustomerData-> ClientDataSet1-> Post(); //保存记录
经以上操作后,DBGrid1的显示中已增加了一条不完整的记录-----只有日期类型的字段有文字出现,其他字段都是空白!
继续将记录保存到数据库表中后
CustomerData-> ClientDataSet1-> ApplyUpdates(0);
数据库表中已增加了记录,但也是不完整----跟DBGrid1中显示的一样!
为什么?
[解决办法]
“DBGrid1的显示中已增加了一条不完整的记录”先解决此问题,很可能是数据类型问题导致
检查你的赋值及赋值过程有没有不妥的地方
[解决办法]
只有日期类型的字段可以正确保存,其他是空值,则很大程度上是数据类型匹配的问题引起的.
你不要使用TEdit类,改用数据感知的TDBEdit类,应该可以解决问题.
使用以下来添加空记录
CustomerData-> ClientDataSet1-> Insert(); //添加空记录
然后直接在数据感知组件中输入数据
最后使用以下来保存数据
CustomerData-> ClientDataSet1-> Post(); //保存记录