Delphi7+ADO(Access)主从表关联有有关问题,请教是什么有关问题?请帮忙。多谢
Delphi7+ADO(Access)主从表关联有问题,请问是什么问题?急啊。请帮忙。谢谢
装的是Delphi7,安装时选择的是Office Xp。
使用的Office版本为,Office2002,在Access建表时,主窗口显示的是“Access 2000格式”
主表
MainID (自动编号)
Name (文本)
Sex (文本)
从表
ID (自动编号)
MainID (长整型数字)
Company (公司)
在ACCESS的“工具”-“关系”中,将主表中的MainID与从表中的Main做一对多的关系。
Delphi设置
主表ADODataSet
主表DataSource1 (用于做主从关联)
主表DataSource2 (用于其它DataControls的DataSource设置)
从表ADODataSet (DataSource设置的为主表DataSource1;MasterFields也做了与主表的关联)
从表DataSource (用于其它DataControls的DataSource设置)
Locktype均设置为:ltBatchOptimistic
CursorType: ctStatic
CursorLocation: clUseClient
(ps:应该是跟上面这三项无关系,以前也做过类似的软件,也是这样的设置)
目前问题是:
做以下操作后
主表ADODataSet.Append;
主表ADODataSet.FieldByName( 'Name ').AsString := '小王 ';
从表ADODataSet.Append;
从表ADODataSet.FieldByName( 'Company ').AsString := 'A公司 ';
从表ADODataSet.Append;
从表ADODataSet.FieldByName( 'Company ').AsString := 'B公司 ';
从表中只显示一条数据项,可以说,从表中数据项的填写总是不正确。请问这是怎么回事呢?是不是我遗漏了哪?
我曾经试过,就主表的MainID改为长整理,自已填写,也是无效的。(估计跟这个原因无关,因为在ACCESS中做操作是没问题的)
我曾经试过,取消主表从表的关系,仅对从表做简单的数据Append操作。也没问题,应该跟ADO等数据库联接没问题)
请问这是什么原因?很急很急!谢谢。
------解决方案--------------------
用ltBatchOptimistic或三层更新,就不要用自增字段,字段也不要设默认值.
因为自增字段是提交后数据库自己生成,除非你提交后close再次open,否则程序里的值和数据库中的值会不一致,更新会出错.
你从表append后要设置从表.MainID=主表.id,access中的关系在你的程序里无效,要手动设置ID
------解决方案--------------------
,从表中数据项的填写总是不正确??
不知道你的主从表是如何关联的..
------解决方案--------------------
用事务控制一下,先提交主表,如果有异常Rollback就可以了
装的是Delphi7,安装时选择的是Office Xp。
使用的Office版本为,Office2002,在Access建表时,主窗口显示的是“Access 2000格式”
主表
MainID (自动编号)
Name (文本)
Sex (文本)
从表
ID (自动编号)
MainID (长整型数字)
Company (公司)
在ACCESS的“工具”-“关系”中,将主表中的MainID与从表中的Main做一对多的关系。
Delphi设置
主表ADODataSet
主表DataSource1 (用于做主从关联)
主表DataSource2 (用于其它DataControls的DataSource设置)
从表ADODataSet (DataSource设置的为主表DataSource1;MasterFields也做了与主表的关联)
从表DataSource (用于其它DataControls的DataSource设置)
Locktype均设置为:ltBatchOptimistic
CursorType: ctStatic
CursorLocation: clUseClient
(ps:应该是跟上面这三项无关系,以前也做过类似的软件,也是这样的设置)
目前问题是:
做以下操作后
主表ADODataSet.Append;
主表ADODataSet.FieldByName( 'Name ').AsString := '小王 ';
从表ADODataSet.Append;
从表ADODataSet.FieldByName( 'Company ').AsString := 'A公司 ';
从表ADODataSet.Append;
从表ADODataSet.FieldByName( 'Company ').AsString := 'B公司 ';
从表中只显示一条数据项,可以说,从表中数据项的填写总是不正确。请问这是怎么回事呢?是不是我遗漏了哪?
我曾经试过,就主表的MainID改为长整理,自已填写,也是无效的。(估计跟这个原因无关,因为在ACCESS中做操作是没问题的)
我曾经试过,取消主表从表的关系,仅对从表做简单的数据Append操作。也没问题,应该跟ADO等数据库联接没问题)
请问这是什么原因?很急很急!谢谢。
------解决方案--------------------
用ltBatchOptimistic或三层更新,就不要用自增字段,字段也不要设默认值.
因为自增字段是提交后数据库自己生成,除非你提交后close再次open,否则程序里的值和数据库中的值会不一致,更新会出错.
你从表append后要设置从表.MainID=主表.id,access中的关系在你的程序里无效,要手动设置ID
------解决方案--------------------
,从表中数据项的填写总是不正确??
不知道你的主从表是如何关联的..
------解决方案--------------------
用事务控制一下,先提交主表,如果有异常Rollback就可以了