我的需求很简单:
    通过物资科目,物资大类,物资小类标示一类物资[物资科目下分大类,大类下面分小类],在库存表里存储每类物资的库存量现有4个表:
    物资科目表,物资大类表,物资小类表,和物资库存表
    
表结构分别如下:    物资科目表:(物资科目id,物资科目name)
    物资大类表:(物资科目id,物资大类id,物资大类name)
    物资小类表:(物资大类id,物资小类id,物资小类name)
    
    物资库存表:(物资科目id,物资大类id,物资小类id,物资库存量)目的:
    在dbgrid中显示出物资各级分类的名称,而非编号,而且修改时,当科目改变后,大类列表自动改变;大类改变后,小类列表自动改变;
    [于是,我采取了建立查询字段(lookupfield)和主从表,来解决这个问题]
我的做法是这样的:
  1。用了4个TADOTable分别指向上面提及的4个表[还有几个TDataSource],分别为:
    tbl_mat_store(指向物资库存表),ds_mat_store(用于帮定dbgrid等,数据感知控件);
    tbl_mat_sub(物资科目表),ds_mat_sub(用于建立和tbl_mat_first_class的主从关系);
    tbl_mat_first_class(物资大类表),ds_mat_first_class(用于建立和tbl_mat_second_class的主从关系);
    tbl_mat_second_class(物资小类表);
    
  2。设置物资科目,大类,小类表之间的主从关系:
    这里我将tbl_mat_sub设置为tbl_mat_first_class的主表,tbl_mat_first_class设置为tbl_mat_second_class的主表
    [详细过程不写了,请各位大虾相信我是设对了]
    
  3。在物资库存表tbl_mat_store中建立3个查询字段如下:
    lkupf_mat_sub[Key Fields:物资科目id,Dataset:tbl_mat_sub,Lookup Keys:物资科目id,Result Field:物资科目name]
    lkupf_mat_first_class[Key Fields:物资大类id,Dataset:tbl_mat_first_class,Lookup Keys:物资大类id,Result Field:物资大类name]
    lkupf_mat_second_class[Key Fields:物资小类id,Dataset:tbl_mat_second_class,Lookup Keys:物资小类id,Result Field:物资小类name]
    [其实也就是正规的做法,呵呵]
    
  4。添加了dbgrid,dbLookupComboBox,等控件,用于数据的增删改
     这些数据感知控件都用ds_mat_store连接,显示库存信息,其中:
     用了3个dbLookupComboBox分别显示物资科目,物资大类,小类,即分别指向上面刚刚建立的3个查询字段
问题出现了:
    我在我的计算机上作了一遍,一切OK,增删改查都可以。
    同事按照上述的步骤在他的机器上作了一遍,一加载窗体,就报错EOleException with message '发生未知错误。 '程序就停在了 Application.Run;这一句上;
    于是,我们在代码里能try的地方都try了一下[Application.Run;也try了],并想在except时输出错误信息[on e:Exception do ShowMessage(e.Message);]可是调试时一句都没抓到
    又重新找了一台机器重做了一下,窗体加载都没有问题,数据能正常显示,但是每当运行tbl_mat_store.Insert;就会出错,错误也是EOleException with message '发生未知错误。 ',用try也抓不到
    更奇怪的是,今天同事来,重新运行他做的那个,竟然一点为题都没有了,见鬼了    我怀疑:
    这是不是与Delphi在窗体初始化的时候对窗体上数据集的加载顺序有关?还是和tbl们在代码中声明的先后顺序有关?还是和天气有关?嗬嗬,晕了
    另外,我想问在作Lookup字段和主从表的时候有什么注意的问题没有?大家遇到过类似的情况没有?
    兄弟姐妹们有时间的话也试试,看看还有什么情况发生,能指条道的给指指,不胜感激
     
另外,我还能提供的线索:    
    [我们所有的机器硬件配置相同,delphi7.61版也相同,一个盘装出来的]
    [除了物资库存表tbl_mat_store的LockType被我改为ltBatchOptimistic以外,其他tbl都是默认设置]
    [各个物资分类表中的数据是完整的,每个科目都有对应的大类,每个大类都有对应的小类]
    [现在,我不能准确的回忆起,我建立表的主从关系和查询字段的顺序了,难道设计期这个顺序如此重要???]