unit pro_unit
interface
uses ...,qry_unit,.. //qry_unit 是Tquery_form窗体单元文件
type TXquery=class(TComponent)
private
Fquery_form:Tquery_form; //这个是查询窗体. 生成SQL条件
//该窗件上有一个按钮的modalresult为mrok. 其它为普通按钮.
Fdelimiter:char;
FSqlText:Tstrings;
Fcaption:string;
FtableName:string;
FSubQuery:boolean;
procedure setDelimiter(value:char);
procedure setCaption(value:string);
procedure setAdoquery(value:Tadoquery);
procedure setTableName(value: string);
procedure setSubQuery(value:boolean);
public
OutSQL:String;
Fadoquery:TAdoquery;
constructor Create(AOwner:Tcomponent);override;
destructor Destroy;override;
function Execute:Boolean;
published
property tablename:string read FTableName write Settablename;
property adoquery:Tadoquery read Fadoquery write setAdoquery;
property delimiter:char read Fdelimiter write setDelimiter default #39;
property caption:string read Fcaption write setCaption ;
property SubQuery:boolean read FSubQuery write setSubQuery default false;
protected
{}
end;
.............
implementation{ TXquery }...........
constructor TXquery.Create(AOwner: Tcomponent);
begin
inherited create(AOwner);
Fcaption:='X查询';
end;destructor TXquery.Destroy;
begin
inherited Destroy;
end;function TXquery.Execute: Boolean;
begin
try
Fquery_form:=TQuery_form.create(self);
with Fquery_form do //初始化数据
begin
caption:=Fcaption;
delimiter:=Fdelimiter;
if not Initial(Fadoquery) then //执行初始化操作
messagedlg('初始化失败!',mtinformation,[mbok],0);
end;
if Fquery_form.ModalResult=mrok then//ERROR: //<--这句会出错
begin
OutSQL:=Fquery_form.WideSQL;
result:=true;
end else result:=false;
finally
Fquery_form.free;
end;
end;
.........
----------------------------------------------------------
unit Unit1;
interface
uses ..,pro_unit,... //引用TXquery所在单元type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
end;
var
xquery:TXQuery;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
xquery:=Txquery.Create(self);
xquery.Fadoquery := adoquery1;
xquery.execute; //调用Txquery的方法.
end;
end.
当我执行xquery.execute后,弹出查询窗体。然后在查询窗体上点击 modalresult 为mrok 的按钮后就弹出错信息:
project project1.exe raised exception class EAccessViolation
with message 'Access violation at address 00490ff8 in module 'project1.exe'.Readof address 0000009D'.Proces stopped. Use Step or Run to continue.
我有跟踪过光标停在 ERROR:(上面有标识ERROR:) 处.
为什么会出错? 应该怎么解决?
interface
uses ...,qry_unit,.. //qry_unit 是Tquery_form窗体单元文件
type TXquery=class(TComponent)
private
Fquery_form:Tquery_form; //这个是查询窗体. 生成SQL条件
//该窗件上有一个按钮的modalresult为mrok. 其它为普通按钮.
Fdelimiter:char;
FSqlText:Tstrings;
Fcaption:string;
FtableName:string;
FSubQuery:boolean;
procedure setDelimiter(value:char);
procedure setCaption(value:string);
procedure setAdoquery(value:Tadoquery);
procedure setTableName(value: string);
procedure setSubQuery(value:boolean);
public
OutSQL:String;
Fadoquery:TAdoquery;
constructor Create(AOwner:Tcomponent);override;
destructor Destroy;override;
function Execute:Boolean;
published
property tablename:string read FTableName write Settablename;
property adoquery:Tadoquery read Fadoquery write setAdoquery;
property delimiter:char read Fdelimiter write setDelimiter default #39;
property caption:string read Fcaption write setCaption ;
property SubQuery:boolean read FSubQuery write setSubQuery default false;
protected
{}
end;
.............
implementation{ TXquery }...........
constructor TXquery.Create(AOwner: Tcomponent);
begin
inherited create(AOwner);
Fcaption:='X查询';
end;destructor TXquery.Destroy;
begin
inherited Destroy;
end;function TXquery.Execute: Boolean;
begin
try
Fquery_form:=TQuery_form.create(self);
with Fquery_form do //初始化数据
begin
caption:=Fcaption;
delimiter:=Fdelimiter;
if not Initial(Fadoquery) then //执行初始化操作
messagedlg('初始化失败!',mtinformation,[mbok],0);
end;
if Fquery_form.ModalResult=mrok then//ERROR: //<--这句会出错
begin
OutSQL:=Fquery_form.WideSQL;
result:=true;
end else result:=false;
finally
Fquery_form.free;
end;
end;
.........
----------------------------------------------------------
unit Unit1;
interface
uses ..,pro_unit,... //引用TXquery所在单元type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
end;
var
xquery:TXQuery;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
xquery:=Txquery.Create(self);
xquery.Fadoquery := adoquery1;
xquery.execute; //调用Txquery的方法.
end;
end.
当我执行xquery.execute后,弹出查询窗体。然后在查询窗体上点击 modalresult 为mrok 的按钮后就弹出错信息:
project project1.exe raised exception class EAccessViolation
with message 'Access violation at address 00490ff8 in module 'project1.exe'.Readof address 0000009D'.Proces stopped. Use Step or Run to continue.
我有跟踪过光标停在 ERROR:(上面有标识ERROR:) 处.
为什么会出错? 应该怎么解决?
解决方案 »
- 为什么源码相同生成的dll文件大小不一样?
- 请求C++做的的DLL函数,Delphi怎么调?int WINAPI GetDeviceVersion(WCHAR* buf);
- 身份证号码15位转换成18位的算法(在线等)
- 哪有便宜又好用的网站虚拟主机(最好赠送免费域名注册)谢谢大家
- 如何保存和显示unicode字符串?
- BDE中怎样才能打开ODBC中的名为dbase files数据源呢?
- 请问各位,怎样才能 模拟 鼠标的右键点击事件( 在线等待);
- 祝大家节日快乐,散分庆祝!!!!!!!!!!!!!
- 如何制作像QQ那样具有“停靠”和“隐藏”功能的窗体!
- 有关数据库的一些问题
- 我在公司做了个程序,我把原程序带回家再编译,提示说不能建立输出一个.DCU文件,这个.DCU文件是控件产生的。请问各位什么原因?
- 关于求错误码的问题(急)。
[email protected]
with Fquery_form do //初始化数据
begin
caption:=Fcaption;
delimiter:=Fdelimiter;
if not Initial(Fadoquery) then //执行初始化操作
messagedlg('初始化失败!',mtinformation,[mbok],0);
if ModalResult=mrok then//ERROR: //<--这句会出错 改动这里//
begin
OutSQL:=Fquery_form.WideSQL;
result:=true;
end
else result:=false;
with Fquery_form do //初始化数据
begin
caption:=Fcaption;
delimiter:=Fdelimiter;
if not Initial(Fadoquery) then //执行初始化操作
messagedlg('初始化失败!',mtinformation,[mbok],0);
if ModalResult=mrok then//ERROR: //<--这句会出错 改动这里//
begin
OutSQL:=Fquery_form.WideSQL;
result:=true;
end
else result:=false;
end; // 补上end;