铁匠

做人要低调
随笔 - 133, 评论 - 255 , 引用 - 184

导航

公告

文章分类

存档

随笔分类

相册

BLOG

网站

论坛

DataModule的使用之我见

在做项目模拟的时候,由于没有使用它,结果发现数据连接这里总是有很大的问题:不是出现了重复连接,就是要不断地创建和释放。当发现有这个数据模块时,开始以为在不同的单元里面引用的时候,也会不断地重复地创建它,但是经过实验,发现它在程序运行的时候,只创建了一份(实验就是做在一个单元里面释放它,然后在另一个单元再次引用它,这时候程序就会出错了,这说明两个单元引用的东西是同一个。),感觉它应该是在程序启动后,启动了一个不可见的窗体,这样,其它的单元都可以去引用它内部的一些控件,变量等。同时也发现了,要在工程的自动启动里面加上它,这才有效,不然也是没有效果的。它只是一种引用,而不像C之类的包含完后再编译。同时,也可以利用它来保存一些全局的(也就是很多的单元要用到的)变量和常量.

发表于 2004年8月20日 8:13

评论

# re: DataModule的使用之我见

agree!
2004-11-30 15:59 | delphi

# re:DataModule的使用之我见

^_~,pretty good!csharpsseeoo
2005-5-16 20:36 | 粘度计

# re: DataModule的使用之我见

不知怎的,老是出错!!!!做了 两个窗口。一个FORM1。一个DATAMODULE窗口。在DATAMODULE中放只三个:一个DATASOURCE1。一个ADOCONNECTION1。一个ADOTABLE1。在FORM1中放一个DBGRID控件。连接一个SQL名教DUTY的数据库。在FORM1。CREATE中设置代码:
begin
Form1.DBGrid1.DataSource:=DataModule2.DataSource1 ;
end;
可老是出错!为什么呢?
2005-9-16 16:51 | hanxiu

# re: DataModule的使用之我见

我知道上面 的怎么错了,来说出来给大家分享:
应该是:
procedure TForm1.FormCreate(Sender: TObject);
begin
DataModule2 := TDataModule2.Create(Application);

Form1.DBGrid1.DataSource:=DataModule2.DataSource1 ;
end;

这样就好了!!!!
2005-9-16 16:56 | 韩秀

# re: DataModule的使用之我见

感谢帅哥,刚好碰上这问题。
2006-7-26 12:15 | 杨琳

# re: DataModule不会用

在DataModule中放入3个query控件,和一个adoconnection 没有放datasource在后面建立的窗体里怎么知道哪个query和哪个表连接呢?谢谢!在query的 SQL里也没有写select * form table 请问是不是用窗体和数据表连接的?怎么连接呢?
2007-1-8 9:48 | 望类

# re: DataModule的使用之我见

中间肯定要有一层DataSource
connection-query-datasource-DBGrid
控件的连接关系是这样的
2007-1-29 10:04 | 铁匠

# re: DataModule的使用之我见

除了在Form。create里面加那句之外,还可以用自动启动的方法:
菜单:project->options->Forms->Auto-create Forms,注意这个dataModule要放在其他引用了他的窗体的前面
2007-2-13 10:11 | 无处不在

# re: DataModule的使用之我见

我用Datamodule动态建立Access数据库,但就是建立不了。
我想知道Datamodule的工作原理,因为我的代码是写在Datamodule的OmCreate事件上的,应该一运行就执行阿。
2007-4-2 23:48 | 随风轻扬

# 关于在FormCteate事件中使用datamodule出错的解决方案

关于在formcteate事件中使用datamodule出错的解决方案:
我们先用记事本打开Project1.dpr文件发现有类似以下的语句
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TDataModule2, DataModule2);
Application.Run;
注意第一句和第二句的顺序
我们发现在执行formcteate的时候DataModule2还没有创建
所以我们直接使用DataModule2的话自然会报错,所以解决方法有二个:
一:将上面两句调换先后位置
二:在formcteate事件的开头加上一下语句:
DataModule2:=TDataModule2.create(application);
来创建DataModule2.
这样问题就解决了.
小弟也是遇到了这样的问题,经过各位大虾的指点加上自己的观察推测和实践.
终于发现问题所在,特在此和各位分享!!!!!!!!!
2008-6-12 11:27 | 竹马行空

Post Comment

主题  
姓名  
主页
校验码  
内容   
京ICP备 05050892号