ADOQUERY SQL 赋值问题

lyguo 2008-11-23 08:49:40
try
CoInitialize(nil); //加了此 。还是出错
sSql:='select * from DetRes ';
with FGAdoQuery do
begin
Close;
Connection := FADOConnect;
SQL.Clear;
SQL.Add(sSql); //只要一给ADOQ 赋SQL语句就出错 提示地址错误
//Text := sSql; //FAdoQuery 此处经常出错,为什么 ?是不是我的控件名字和系统的重复了?将控件名称换为FGAdoQuery 还出错
//Prepared;
Open;
finally
CoUninitialize;
end;

但这一个过程,在同一程序中,主单元调用此过程却没有错。


//下面是此控件的生成部分
FGAdoQuery := NewQuery(FADOConnect,'FAdoQuery');
function NewQuery(FADOConnect:TADOConnection;sQName:String):TAdoQuery;
begin
Result:=TADOQuery.Create(Application);
Result.Connection:=FADOConnect;
Result.Name := sQName;
Result.SQL.Text := '';
end;

...全文
249 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyguo 2008-12-01
  • 打赏
  • 举报
回复
constructor TADOConnection.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FConnectionObject := CreateADOObject(CLASS_Connection) as _Connection;
OleCheck(ConnectionPoint.Advise(Self as IUnknown, FConnEventsID)); << 问题出在这
FCommands := TList.Create;
LoginPrompt := True;
FIsolationLevel := ilCursorStability;
CursorLocation := clUseClient;
FKeepConnection := True;
end;
lyguo 2008-12-01
  • 打赏
  • 举报
回复
好像和ADODB.dcu有关。正在学习中
starluck 2008-11-28
  • 打赏
  • 举报
回复


你看下 FADOQUERY 的釋入是如何處理的.

數據集的連接 CONNECTION 你重點看下,跟蹤下他吧。個人感覺是這裏的問題

你本身代碼應該是沒有錯的。
lyguo 2008-11-28
  • 打赏
  • 举报
回复
自己找取问题,是ADOCONNECTION 的问题,如果不使用动态创建的 ADOCONNECTION 就没有问题了。
jfjy_0 2008-11-28
  • 打赏
  • 举报
回复
对象是否存在哦

对象的创建与释放要成对出现
beifangke 2008-11-24
  • 打赏
  • 举报
回复
估计是FADOConnect不是有效的对象或者FADOConnect的connectionstring连接错误
添加一个adoconnection,并且手动先连接好试试
lyguo 2008-11-24
  • 打赏
  • 举报
回复
如果整体把这段代码给 屏蔽掉的话, 下面 给ADO控件 赋SQL语句时出错。
rainlovesea 2008-11-24
  • 打赏
  • 举报
回复
FGAdoQuery
没有创建吧?
僵哥 2008-11-24
  • 打赏
  • 举报
回复
如果是在Timer当中使用,那么过程当中不要试图使用Application.ProcessMessage之类的。否则会因为Timer事件重入,而导致ADOQuery的操作混乱(前者访问还没有完成,后者又把它重新初始化...)
火龙岛主 2008-11-24
  • 打赏
  • 举报
回复
try
CoInitialize(nil); //加了此 。还是出错 //如果你用到了com或者是ActiveX的内容才使用,否则就没必要了。
sSql:='select * from DetRes ';
with FGAdoQuery do
begin
Close;
Connection := FADOConnect;
SQL.Clear;
SQL.Add(sSql); //只要一给ADOQ 赋SQL语句就出错 提示地址错误
//Text := sSql; //FAdoQuery 此处经常出错,为什么 ?是不是我的控件名字和系统的重复了?将控件名称换为FGAdoQuery 还出错
//Prepared;
Open;
finally
CoUninitialize;
end;

提示地址错误,指你没有创建就访问了,由此看出,错误不在这里。
另外一种是,你把对象释放了,指针还保留的话也会报告地址错误。
设置断点跟踪一下,看看到底是哪里错了?
整体来看,这段代码没有什么大问题。
僵哥 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lyguo 的回复:]
引用 11 楼 unsigned 的回复:
引用 3 楼 lyguo 的回复:
算是多线程吧,用了TTimer组件,在它里面的。

什么叫算是多线程?是多线程就是多线程,不是多线程就不是多线程。至于用不用Timer跟是否多线程没有直接联系。
如果是多线程,比A线程创建的ADOQuery之类的,要给B线程用,那么CoInitialize(nil);就要改为CoInitializeEx(Nil,COINIT_MULTITHREADED);


呵呵,算是多进程,用了TTimer 组件,好多代码都在时钟控件…
[/Quote]
拜托,我前面已经说过了TTimer跟多线程没有任何关系。是否多线程就是有没有用到TThread或者CreateThread,这里指你程序当中显式使用的。
lyguo 2008-11-24
  • 打赏
  • 举报
回复
把些处屏蔽掉,其它第一次用到ADOQUERY.sql 的地方出错了。
lyguo 2008-11-24
  • 打赏
  • 举报
回复
ParamCheck := False 加上此句也还出错。
lyguo 2008-11-24
  • 打赏
  • 举报
回复
ParamCheck := False 加上此句也不出错啊。
lyguo 2008-11-24
  • 打赏
  • 举报
回复
算是多线程吧,用了TTimer组件,在它里面的。
xuliabc 2008-11-24
  • 打赏
  • 举报
回复

xue xi
lyguo 2008-11-24
  • 打赏
  • 举报
回复
当然 创建了。

DTest.FGAdoQuery.Close; //调试用,回头记得删除
DTest.FGAdoQuery.SQL.Text := 'select * from detres';
DTest.FGAdoQuery.Open;
if DTest.FGAdoQuery.recordcount > 0 then
MessageBox(0, '有数据', '正常', MB_OK);


在前面一些地方还能调用啊。
ajiwuweibin 2008-11-24
  • 打赏
  • 举报
回复
地址错误?大哥,你估计连ADOQuery都没创建成功吧?
lyguo 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 unsigned 的回复:]
引用 3 楼 lyguo 的回复:
算是多线程吧,用了TTimer组件,在它里面的。

什么叫算是多线程?是多线程就是多线程,不是多线程就不是多线程。至于用不用Timer跟是否多线程没有直接联系。
如果是多线程,比A线程创建的ADOQuery之类的,要给B线程用,那么CoInitialize(nil);就要改为CoInitializeEx(Nil,COINIT_MULTITHREADED);
[/Quote]

呵呵,算是多进程,用了TTimer 组件,好多代码都在时钟控件中运行。
tjg5202 2008-11-24
  • 打赏
  • 举报
回复
路过学习。。。。。
加载更多回复(4)

2,497

社区成员

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

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