开发时,用的dbx
比如在datamoduleA里,如果要引用datamoduleB里的某个dataset,明明已经use过dmB了,还是必须先把dmB先打开,在dmA里下拉框才会出现dmB里的dataset
这样很糟糕啊,如果dmA要引用很多个datamodule的东西,岂不是要全部把它们打开一遍?
开发时遇到的这种情况也很讨厌,dmA引用了dmB的connection,直接打开dmA,就报missing drivername connection,还得每次要打开某个模块,都得先开一堆datamodule
有没有什么设置可以解决这种每次打开某模块都需要先打开其引用的模块的烦人问题啊??

解决方案 »

  1.   

    该怎么做?不会是project/add to project吧?
      

  2.   

    就是的,然后输入datamoduleB.后,他里面的控件就会显示出来了
      

  3.   

    不是这个问题,所有的dm早加过了
    connection等信息也在代码里写死了,程序运行也没问题
    问题在于就是开发的时候必须要打开dma引用的dmb先打开才行,否则a里面的b的connection就全丢了,没人碰到这个问题吗???
    试了ado没这个问题,就是dbx有
      

  4.   

    我从来不用DataModule,觉得无甚效率
      

  5.   

    楼上的,大概不是datamodule的问题,是dbx的问题,就算把数据库控件拖到界面上,不事先打开该控件引用的模块也会报连接丢失等错误
      

  6.   

    我用delphi时间是不长,但是这个问题实在不知道怎么解决,每次要打开一个模块,都得先打开一串它所引用的东西,实在烦不胜烦
      

  7.   


    每个窗口的USES部分加datamoduleA
      

  8.   

    每增加一个窗体模块Preject里是自动加的. 什么说的很对啊,我是没有听明白.
      

  9.   

    感觉大家没明白我的意思
    程序run的是没问题,但是design的时候就有问题了
    比如dma、dmb,dmb.dataset.connection:=dma.connection,我在图形界面下设置了这种关联,在design的时候先打开dmb,dmb.dataset.connection就成了"SimpleDataSet.InternalConnection"而不是"dma.connection"了
      

  10.   

    DataModule不好用,到后来你想找那个界面连接的那个数据控件都很难,一大堆在一起,很难弄。不如放在使用窗体上合适。
      

  11.   

    这是 LZ 设计的问题
    为什么非要弄一大对 dma,dmb 出来呢!
    在程序里写好数据库操作类不是更方便么!
      

  12.   

    赞成楼上的 肯定不是delphi本身的问题
      

  13.   

    多个datamudule很好啊,把表的操作都分类封装在各个dm里了,当需要引用某个对象的信息时就找某个dm里的dataset,这样该对象信息有变化时只改这个dataset就可以了,数据库控件放在窗体里肯定做不到吧?况且李维的那本delphi2006就是这么做的
    也不是单纯datamodule的问题
    普通的窗体里也有这个问题,比如某个dbgrid的datasource引用其他模块的数据控件了,也得先打开那个模块才可以
     
      

  14.   

    我猜想是用Screen.DataModules来找其他数据模块里的控件的(Screen.Form找其他Form的控件)。我们知道Delphi的设计期,实际是把界面创建出来的。如果你不打开一个Form,这个Form就没被“创建”出来。你想引用一个没创建的Form里的东西,可能么?这不能怪Delphi,也许你会说,那打开Project的时候,把Form都创建出来,然后都隐藏掉不就行了么?然而:1、设计期设置visible是不起作用的;2、一定会有人跳出来说这样会引起打开Peoject时的效率问题。不想写死的话,多考虑用代码动态设置。
      

  15.   

    Form1:=TForm1.Create(nil);
    Form1.ShowModal;
      

  16.   

    修正下,Screen.DataModules的猜想不大正确,因为Delphi让你选的时候,显示的是DM1.xxx,而不是TDM1.xxx(似乎是引用了单元的那个全局变量)。如果觉得这样麻烦的话,还是建议减少这种关系,只需保证运行时正确即可。
      

  17.   

    不一定要开窗口啊,你在属性中,把你引用的connection激活就可以啊。
    这是必然的啊,要是如果一直保持链接,那对你数据库的会造成负担啊,本来这就是正常的啊。
      

  18.   

    LZ,借你这人气,问一个小问题:
    Doc.Application.Selection.goto(what :=wdGoToBook,Name :=BookMarkName); 
    这句话大家有人在D中用过吗?
    我在D6中,用时总提示wdGoToBook未定义啊!
      

  19.   

    DM1.xxx中的DM1是ComponentName而已,Delphi设计器都是用它当控件的命名的,而且这个名称都对应变量名
    没打开找不到的原因24楼已经说了
      

  20.   

    对不起LZ,再借您的宝地,共享下我刚才问题的解决方法:
    首先在Delphi中定义
          wdGoToItem=( wdGoToBook = -1,
            wdGoToSection = 0,
            wdGoToPage = 1,
            wdGoToTable = 2,
            wdGoToLine = 3,
            wdGoToFootnote = 4,
            wdGoToEndnote = 5,
            wdGoToComment = 6,
            wdGoToField = 7,
            wdGoToGraphic = 8,
            wdGoToObject = 9,
            wdGoToEquation = 10,
            wdGoToHeading = 11,
            wdGoToPercent = 12,
            wdGoToSpellingError = 13,
            wdGoToGrammaticalError = 14,
            wdGoToProofreadingError = 15);
    这样一个枚举类型,然后在需要地方引用这个枚举类型中相应值就可以了。
    如:
      GoalwdGoToItem : wdGoToItem;
      GoalwdGoToItem := wdGoToBook;
      Doc_Handle.Application.Selection.goto(what := GoalwdGoToItem,name := BookMarkName);
     
      

  21.   

    多谢楼下的回复,这位仁兄说的是对的,“设计期”(designtime我一直不知道怎么翻译,这个翻译挺好)不打开一个form他就没有被“创建”,所以其他对这个form的引用都会丢失,不止connection,datasource等等等等都会丢失。不过在设计期这样真挺郁闷的。现在每回打开一个form都得先想想它引用过什么其他form里的东西,先打开它们。我觉得这个问题又简单又普遍,但是就是死活找不到解决方法,其他高手似乎没这个问题,就算有也似乎没把这个烦人的问题当回事。我记得人家vb就没这样啊,郁闷。
    对runtime倒是没什么意见,相关信息写在代码里也勉强可以接受。
      

  22.   

    问dataset的问题的时候很多人都说从来不用datamodule、dataset,
    我觉得dataset非常好啊,我把可以看成一个对象的数据库表都对应成一个dataset,然后业务逻辑比较相关的dataset归置到一个datamodule里
    这样插改删查操作非常方便啊,省了多少sql语句和代码啊
    而且它把数据载入内存,每次查数筛数只要从内存locate、filter就可以了,快
    而且对于公用的对象比如省、市的信息,把这些ds放在一个dm里,可以让很多模块共用啊
    它非常好地实现了java里类似hibernate的功能啊,所以现在我坚定不移地用ds和dm
    但是似乎有更高明的数据库操作方法,烦请赐教?
      

  23.   

    dbgrideh-->datasource-->adoquery-->adoconnection
    后三个控件放入datamodule里,运行时,构建adoconnecton的连接在我做的数据库应用系统中,基本都是这种习惯,也未出过啥问题的。
      

  24.   

    如果adoconnection和adoquery放在不同的dm里就会出问题了吧
      

  25.   

    对LZ设计有问题
    用什么DataModule
      

  26.   

    我从来不用DataModule ,直接放在窗口上多方便.