各位大哥帮帮小弟,这个问题困扰了我几天了,不知道为什么
请各位哥哥帮忙看看,小弟先行谢谢
// This unit named unit_DMOperatorDB Implement base operate for database
unit unit_DMOperatorDB;interfaceuses
SysUtils, Classes, DB, ADODB,Dialogs;type
TDMOperatorDB = class(TDataModule)
con: TADOConnection;
procedure DataModuleCreate(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
function fun_ExecuteQuery(strSqlQuery:string):boolean;
function fun_OpenQuery(strSqlQuery:string):TADOQuery;
end;var
DMOperatorDB: TDMOperatorDB;implementation{$R *.dfm}
// Connection database
procedure TDMOperatorDB.DataModuleCreate(Sender: TObject);
begin
con.Close;
con.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;pwd=sa;Initial Catalog=pubs;Data Source=.';
try
con.Open;
except
ShowMessage('Database connection fail...');
end;
end;// Execute without record of query
function TDMOperatorDB.fun_ExecuteQuery(strSqlQuery:string):boolean;
var
Query:TADOQuery;
begin
Query:=TADOQuery.Create(nil);
Query.Connection:=con;
Query.Close;
Query.SQL.Clear;
Query.SQL.Text:=strSqlQuery;
con.BeginTrans;
try
Query.ExecSQL;
con.CommitTrans;
fun_ExecuteQuery:=true;
except
fun_ExecuteQuery:=false;
con.RollbackTrans;
end;
Query.Free;
end;// Execute have record of query
function TDMOperatorDB.fun_OpenQuery(strSqlQuery:string):TADOQuery;
var
Query:TADOQuery;
begin
Query:=TADOQuery.Create(nil);
Query.Connection:=con;
Query.Close;
Query.SQL.Clear;
Query.SQL.Text:=strSqlQuery;
try
Query.Active:=true;
result := query;
showmessage(inttostr(result.RecordCount));
except
Query.Free;
result:=nil;
end;
end;
end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls,DB,ADODB;type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
editQuery: TEdit;
btnQuery: TButton;
GroupBox2: TGroupBox;
gridView: TDBGrid;
Button1: TButton;
procedure btnQueryClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses
unit_DMOperatorDB;
{$R *.dfm}procedure TForm1.btnQueryClick(Sender: TObject);
var
// 保存用户输入的查询条件
strInPutQuery:string;
// 查询语句
strSqlQuery:string;
//Query:TADOQuery;
begin
//Query:=TAdoquery.Create(nil);
// 设置查询语句
//strSqlQuery:='select * from tbl_user where 1=1';
strInPutQuery:= editQuery.Text;
// 判断用户是否输入
// 如果没有输入,则查询所有记录
// 否则根据条件执行查询所需要的记录
if strInPutQuery='' then
strSqlQuery:='select * from publishers where 1=1'
//gridView.DataSource.DataSet:= DMOperatorDB.fun_OpenQuery(strSqlQuery)
//Query:= DMOperatorDB.fun_OpenQuery(strSqlQuery)
else
// 重置查询语句
strSqlQuery:=strSqlQuery+'and pub_id='+ ''''+ strInPutQuery + '''';
//Query:=DMOperatorDB.fun_OpenQuery(strSqlQuery)
gridView.DataSource.DataSet:= DMOperatorDB.fun_OpenQuery(strSqlQuery); //Query := DMOperatorDB.fun_OpenQuery(strSqlQuery);
//gridView.DataSource.DataSet:= Query; // 如果查询结果不为空,显示记录
if gridView.DataSource.DataSet.RecordCount>0 then
begin
gridView.Columns[0].FieldName:='pub_id';
gridView.Columns[1].FieldName:='pub_name';
gridView.Columns[2].FieldName:='city';
gridView.Columns[3].FieldName:='state';
gridView.Columns[4].FieldName:='country';
end
else
ShowMessage('Record is null');
// 释放结所得果集
if gridView.DataSource.DataSet <> nil then
gridView.DataSource.DataSet.Free
//else
// ShowMessage('Data operation fail');
{ try
Query := DMOperatorDB.fun_OpenQuery('select * from publishers where 1=1');
//Datasource1.DataSet := Query;
gridView.DataSource.DataSet:= Query;
if gridView.DataSource.DataSet.RecordCount>0 then
begin
gridView.DataSource.DataSet:=DMOperatorDB.fun_OpenQuery(strSqlQuery);
gridView.Columns[0].FieldName:='pub_id';
gridView.Columns[1].FieldName:='pub_name';
gridView.Columns[2].FieldName:='city';
gridView.Columns[3].FieldName:='state';
gridView.Columns[4].FieldName:='country';
//gridView.DataSource.DataSet.Free;
end
//else
//if gridView.DataSource.DataSet <>nil then
//gridView.DataSource.DataSet.Free;
finally
Query.Free;
gridView.DataSource.DataSet.Free;
end;
//DMOperatorDB.Free; }
end;procedure TForm1.Button1Click(Sender: TObject);
var
Tage:boolean;
begin
Tage:=DMOperatorDB.fun_ExecuteQuery('update publishers set pub_name='+'''shan xi chu ban she'''+ 'where pub_id=0736');
if Tage=true then
showmessage('update access')
else
showmessage('update fail');
end;end.就是查询出问题,总出现 Project prjUserManager.exe raised exception class
EAccessViolation with message'Access violation at address 004865AD in module'prjUserManager.exe'.Read of address 00000030',Process stopped.Use Step or Run to
continue.
请各位哥哥帮忙看看,小弟先行谢谢
// This unit named unit_DMOperatorDB Implement base operate for database
unit unit_DMOperatorDB;interfaceuses
SysUtils, Classes, DB, ADODB,Dialogs;type
TDMOperatorDB = class(TDataModule)
con: TADOConnection;
procedure DataModuleCreate(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
function fun_ExecuteQuery(strSqlQuery:string):boolean;
function fun_OpenQuery(strSqlQuery:string):TADOQuery;
end;var
DMOperatorDB: TDMOperatorDB;implementation{$R *.dfm}
// Connection database
procedure TDMOperatorDB.DataModuleCreate(Sender: TObject);
begin
con.Close;
con.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;pwd=sa;Initial Catalog=pubs;Data Source=.';
try
con.Open;
except
ShowMessage('Database connection fail...');
end;
end;// Execute without record of query
function TDMOperatorDB.fun_ExecuteQuery(strSqlQuery:string):boolean;
var
Query:TADOQuery;
begin
Query:=TADOQuery.Create(nil);
Query.Connection:=con;
Query.Close;
Query.SQL.Clear;
Query.SQL.Text:=strSqlQuery;
con.BeginTrans;
try
Query.ExecSQL;
con.CommitTrans;
fun_ExecuteQuery:=true;
except
fun_ExecuteQuery:=false;
con.RollbackTrans;
end;
Query.Free;
end;// Execute have record of query
function TDMOperatorDB.fun_OpenQuery(strSqlQuery:string):TADOQuery;
var
Query:TADOQuery;
begin
Query:=TADOQuery.Create(nil);
Query.Connection:=con;
Query.Close;
Query.SQL.Clear;
Query.SQL.Text:=strSqlQuery;
try
Query.Active:=true;
result := query;
showmessage(inttostr(result.RecordCount));
except
Query.Free;
result:=nil;
end;
end;
end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls,DB,ADODB;type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
editQuery: TEdit;
btnQuery: TButton;
GroupBox2: TGroupBox;
gridView: TDBGrid;
Button1: TButton;
procedure btnQueryClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses
unit_DMOperatorDB;
{$R *.dfm}procedure TForm1.btnQueryClick(Sender: TObject);
var
// 保存用户输入的查询条件
strInPutQuery:string;
// 查询语句
strSqlQuery:string;
//Query:TADOQuery;
begin
//Query:=TAdoquery.Create(nil);
// 设置查询语句
//strSqlQuery:='select * from tbl_user where 1=1';
strInPutQuery:= editQuery.Text;
// 判断用户是否输入
// 如果没有输入,则查询所有记录
// 否则根据条件执行查询所需要的记录
if strInPutQuery='' then
strSqlQuery:='select * from publishers where 1=1'
//gridView.DataSource.DataSet:= DMOperatorDB.fun_OpenQuery(strSqlQuery)
//Query:= DMOperatorDB.fun_OpenQuery(strSqlQuery)
else
// 重置查询语句
strSqlQuery:=strSqlQuery+'and pub_id='+ ''''+ strInPutQuery + '''';
//Query:=DMOperatorDB.fun_OpenQuery(strSqlQuery)
gridView.DataSource.DataSet:= DMOperatorDB.fun_OpenQuery(strSqlQuery); //Query := DMOperatorDB.fun_OpenQuery(strSqlQuery);
//gridView.DataSource.DataSet:= Query; // 如果查询结果不为空,显示记录
if gridView.DataSource.DataSet.RecordCount>0 then
begin
gridView.Columns[0].FieldName:='pub_id';
gridView.Columns[1].FieldName:='pub_name';
gridView.Columns[2].FieldName:='city';
gridView.Columns[3].FieldName:='state';
gridView.Columns[4].FieldName:='country';
end
else
ShowMessage('Record is null');
// 释放结所得果集
if gridView.DataSource.DataSet <> nil then
gridView.DataSource.DataSet.Free
//else
// ShowMessage('Data operation fail');
{ try
Query := DMOperatorDB.fun_OpenQuery('select * from publishers where 1=1');
//Datasource1.DataSet := Query;
gridView.DataSource.DataSet:= Query;
if gridView.DataSource.DataSet.RecordCount>0 then
begin
gridView.DataSource.DataSet:=DMOperatorDB.fun_OpenQuery(strSqlQuery);
gridView.Columns[0].FieldName:='pub_id';
gridView.Columns[1].FieldName:='pub_name';
gridView.Columns[2].FieldName:='city';
gridView.Columns[3].FieldName:='state';
gridView.Columns[4].FieldName:='country';
//gridView.DataSource.DataSet.Free;
end
//else
//if gridView.DataSource.DataSet <>nil then
//gridView.DataSource.DataSet.Free;
finally
Query.Free;
gridView.DataSource.DataSet.Free;
end;
//DMOperatorDB.Free; }
end;procedure TForm1.Button1Click(Sender: TObject);
var
Tage:boolean;
begin
Tage:=DMOperatorDB.fun_ExecuteQuery('update publishers set pub_name='+'''shan xi chu ban she'''+ 'where pub_id=0736');
if Tage=true then
showmessage('update access')
else
showmessage('update fail');
end;end.就是查询出问题,总出现 Project prjUserManager.exe raised exception class
EAccessViolation with message'Access violation at address 004865AD in module'prjUserManager.exe'.Read of address 00000030',Process stopped.Use Step or Run to
continue.
解决方案 »
- 关于VFW中使用capSetVideoFormat调用总是失败,高手请进!!!顶者有分!!!
- 用户要求按回车后按钮跳转到下一个控件,可是一按回车,对话框就退出了?
- 字节流的问题
- ★★★ 讨论: Delphi vs VB
- 怎样把SQL 查询的结果输出
- 谁知道getdiskfreespace这个API怎么用?有什么好的获得硬盘空间的方法?
- dbgrid简单问题
- 大伙快进来看看!!!!!!
- 只有DCU没有PAS的VCL怎么安装?
- 一名新手的呼唤
- 请教高手 delphi调用C++ dll问题
- ★★★★★★★★★★★★★看看是不是还有疯子在下载,看到报道★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
function TDMOperatorDB.fun_OpenQuery(strSqlQuery:string):TADOQuery;
var
Query:TADOQuery;
begin
Query:=TADOQuery.Create(nil);
Query.Connection:=con;
Query.Close;
Query.SQL.Clear;
Query.SQL.Text:=strSqlQuery;
try
//添加
Query.ExecSQL;
//添加完毕
Query.Active:=true;
result := query;
showmessage(inttostr(result.RecordCount));
except
Query.Free;
result:=nil;
end;
end;
我原来用Open也都不行
小弟实在急的很,刚开始学习Delphi三四天,由于项目要求,马上就要开始了
求各位大哥帮帮,谢谢
这样用法不对
procedure TDMOperatorDB.fun_OpenQuery(mTempQuery:TADOQuery);你原来的结果集在出函数的时候都被释放掉了。