tadoquery再次打开时出错(300分)

  • 主题发起人 主题发起人 g622
  • 开始时间 开始时间
G

g622

Unregistered / Unconfirmed
GUEST, unregistred user!
这个函数的大致作用是读数据库并把内容写道webbrowser里并打印预览,过程如下
查询一个access表,用一个TStringStream把一个ole字段写到webbrowser里,
select webcontent from tb_webdata where id=1232,然后预览:
WebBrowser.ExecWB(OLECMDID_PRINTPREVIEW,0);

奇怪的是 第2次调用时 会在tadoquery.open处出错,如果不打印预览则正常
错误信息是:
变量或者类型不正确,或者不在可以接受的范围之内,要不就是与其他数据冲突。
 
把原代码贴出来
 
没有代码,只能瞎猜了,你的TStringStream是否每次都动态生成,将这东西动态生成实验一下。
记着释放它。[:D]
 
贴代码!
可能是你的ADOQUERY,
在这其间又被别的过程调用了
 
是不是同时有两个adoquery连接同张表?我也碰到过类似问题,把一个close了就好了。
 
真是的,你不帖出来代码,大伙干着急啊!
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, ADODB, OleCtrls, SHDocVw, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
WebBrowser: TWebBrowser;
Button2: TButton;
ADOQ: TADOQuery;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser.Navigate('http://www.sina.com.cn');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
adoq.Close;
adoq.Open;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
WebBrowser.ExecWB(OLECMDID_PRINTPREVIEW,0);
end;
end.
大家试一试就知道了 先用webbrowser得到一个页面,然后用button3打印,
再反复打开ADOQUERY就会出错。如果你不打印,什么都是正常的
 
procedure TForm1.Button3Click(Sender: TObject);
begin
if WebBrowser.QueryStatusWB(OLECMDID_PRINT)=3 then
try
WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT,EmptyParam,EmptyParam);
except

end;
end;
 
// 看错了,是打印预览!
procedure TForm1.Button3Click(Sender: TObject);
begin
if WebBrowser.QueryStatusWB(OLECMDID_PRINTPREVIEW)=3 then
WebBrowser.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT,EmptyParam,EmptyParam);
end;
 
谢谢各位
可以出错并不是因为我的ie不支持,不是预览本身出错,而是在预览后,再次
close;open adoquery一遍就会出错。
 
几种可能:
1、你的DELPHI的ADO控件没有升级;
2、TStringStream这个变量出错(可能性比较大);
3、对于BLOB字段,当读取完毕一条记录时,再重新读取该记录,必须重新定位指针,因为
该指针已经指向BLOB字段的尾部(至于为什么,我也不知道,不要多问我)。
 
1)ado是补丁2了
2)在我上面的简单测试中没有使用stream
3)测试中似乎打印预览和打开数据库之间没有什么关联
我总觉得是接口的问题
 
两个都是OLE,难道会是冲突?
我手工添加了coinitialize什么的,也没有作用!
继续关注![:)]
 
并没看到错误,SQL是怎么写的
 
select * from tb
关键是 只要不预览打印 就不会出错 而预览打印和数据库部分没有关系
 
绝对不是SQL的问题。
 
select webcontent from tb_webdata where id=1232
这儿的1232是从哪来的?
如果是从类似Tedit中输入的结果,当Tedit等输入框中为空时,就会出现你所说的错误!
如果该数值是由程序运行结果得出,你应该检查一下,程序运行时会不会产生一个数值不
在你数据范围以内,那样也会出现这种错误。
比如:你数据库定义为
ID webcontent
1231 。。。。。。
1232 。。。。。。。
1233 。。。。。。。
当程序产生的ID值为1234时,Select语句就出错了~
 
1232是已经存在的一个值,因为是测试代码,所以sql是固定的
ADOQ.close;
ADOQ.sql.clear;
ADOQ.sql.add('select webcontent from tb_webdata where id=1232');
....
 
这是你全部的代码吗?
从这上面看没问题呀!
从你的代码看来,Button1、Button3事件的执行都和Button2没关系的。
我没使用测试代码,即“1232”,是连到我自己的一个库上执行的,很正常。
我想你的目的是点击Button2查询,点击Button1打开Button2的查询结果,再用Button3打
印页面,是吗?
 
我测试过这个问题,两者就是没有任何关系,但是就偏偏打印预览一下就不能再次打开那个Query了。
我想,应该是Delphi的Bug。[:(]
 
后退
顶部