DELPHI ado丢失连接

ironcat 2009-04-09 04:11:49
各位,我的ado控件中connection属性使用的是另一个单元的TADOConnection


但最近发现,每次都必须打开这个TADOConnection的单元,否则,其他单元使用的ADO控件的connection串为空.

不知道为什么.
多谢指教..
...全文
176 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsingfeng_bhcss 2009-05-15
  • 打赏
  • 举报
回复
在工程文件里面先把DataModule创建出来
abcd_nonqq 2009-05-14
  • 打赏
  • 举报
回复
在程序里打开也可吧.
equn93 2009-05-14
  • 打赏
  • 举报
回复
没遇到过。。关注
ironcat 2009-05-14
  • 打赏
  • 举报
回复
我现在是每次都打开dm。但以前并不需要这样子。
有没有解决办法
DreamMan81 2009-05-11
  • 打赏
  • 举报
回复
应该是ado控件的ACTIVE设置为True,而你又没有打开DataModule5.如果在编写程序时,先打开DataModule5
然后再打开ado控件所在的窗体
sxper 2009-05-10
  • 打赏
  • 举报
回复
use data(unit) 先
healVire 2009-05-07
  • 打赏
  • 举报
回复
学习
abcd_nonqq 2009-05-06
  • 打赏
  • 举报
回复
当你把ADOconnection放在一个数据模块时,打开这个数据模块,再去打开其它窗口就可以了.
foxe 2009-05-06
  • 打赏
  • 举报
回复
没有试验,本人通常使用时:
所有数据控件均放在DM里,若在其它单中需要使用而又不想在DM里再创建,就动态创建,然后指定属性。没有遇见过此类问题
MyCrooner 2009-04-09
  • 打赏
  • 举报
回复
楼主的意思大概了解: 说的是delphi设计时的问题,不是运行时的问题,还没到编译和运行那会儿。

我整理下需求,会的帮看看,因为我也偶尔会碰到,还没解决。
1.运行delphi建个win32项目;

2.新建数据模块dm,放一个adoconnection控件;新建其他窗口unit1、unit2等,并uses了dm模块,放入adoquery等,将窗口上的adoquery的connection设置为dm上的adoconnection控件;

3. 保存,关闭项目;
4. 再打开项目,在不打开dm模块时(即不显示dm的窗体,编辑器没创建dm的实例),打开引用了dm上adoconnection控件的窗体,如unit1等;
5. 此时的问题现象:unit1的adoquery控件中原来引用的dm上adoconnection已经没了,保存时会提示没有引用dm,强行保存,引用就丢失了,即
unit1的adoquery.connection = nil了

说明:
dm模块已经生命了全局数据模块变量;
编译运行都没问题,排除语法错误;
不是所有项目都这样,不知道楼主是不是。我的是采用了多重可视化集成时出现该问题,也没深究;

ironcat 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zxf_feng 的回复:]
其他单元的ado控件的connection属性指定 XXX.ADOconnecton

为什么不把所有的ado放在一个datamodule中呢

另外,ado.connection=xxx.adoconnection也是没有问题的,主要是你的公共单元中的xxx.adoconnection的字符串是如何设的,在这找找原因吧
[/Quote]

你好,即使是在某个单元里引用了公共datamodule的数据集,在不打开那个公共数据集时也是dataset空。
比方说,我某个单元里的一个DBGridEh指定了公共DataModule里的某个datasource,如果我不在工程里打开这个DataModule,那DBGirdEh里Datasource也是空的。
唉,真不知道动了什么地方,会变成这样。从前不是这个样子的啊。。。。。。


各位,有知道的帮帮我吧。谢谢了。实在不知道怎么办了。
ironcat 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chris_mao 的回复:]
楼主可以到工程文件中将ADOConnection所在的数据窗体创建语句移至主窗体的创建语句之后试一下。
如下例中的Data Module窗体。

Delphi(Pascal) code
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4},
Unit5 in 'Unit5.pas' {DataModule5: TDataModule};

{$R *.res}

begin
Applica…
[/Quote]


谢谢。可还是不起作用。单独打开某个单元,其中ado的connecting的属性还是空。
ironcat 2009-04-09
  • 打赏
  • 举报
回复
还是不行。
阿三 2009-04-09
  • 打赏
  • 举报
回复
其他单元的ado控件的connection属性指定 XXX.ADOconnecton

为什么不把所有的ado放在一个datamodule中呢

另外,ado.connection=xxx.adoconnection也是没有问题的,主要是你的公共单元中的xxx.adoconnection的字符串是如何设的,在这找找原因吧
禹爸爸 2009-04-09
  • 打赏
  • 举报
回复
楼主可以到工程文件中将ADOConnection所在的数据窗体创建语句移至主窗体的创建语句之后试一下。
如下例中的Data Module窗体。

program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4},
Unit5 in 'Unit5.pas' {DataModule5: TDataModule};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1); //Main Form
Application.CreateForm(TDataModule5, DataModule5); //Data Module
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.Run;
end.
ironcat 2009-04-09
  • 打赏
  • 举报
回复
因为我是多个unit公用一个unit(XXXunit)里的TADOConnection。所以,其他单元的ado控件的connection属性指定 XXX.ADOconnecton.

每次打开其他单元的时候,都必须打开XXXunit单元,否则保存的时候会报错,说是XXXunit单元没有引用到当前工程,直到XXXUnit单元打开时才能保存。可是我的确把XXXunit单元add到project里了。
starluck 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 ironcat 的帖子:]
各位,我的ado控件中connection属性使用的是另一个单元的TADOConnection


但最近发现,每次都必须打开这个TADOConnection的单元,否则,其他单元使用的ADO控件的connection串为空.

不知道为什么.
多谢指教..
[/Quote]

偶爾有這個情況發生。翠前在BDE下是經常,沒有什麼好辦法。
de410 2009-04-09
  • 打赏
  • 举报
回复
你把TADOConnection的connected 属性设为true
bdmh 2009-04-09
  • 打赏
  • 举报
回复
每次都必须打开这个TADOConnection的单元,是什么意思,是创建这个单元吗

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧