一个简单的数据连接有关问题
一个简单的数据连接问题
我是新手,我想做一个执行数据库的类,下面是我的类内容:
unit clstheAccess;
interface
Uses
SysUtils, Classes, DB, ADODB, Forms, Dialogs;
type
theAccess=class(TDataModule)
AdoConn: TADOConnection;
private
{ Private declarations }
public
procedure Conn;
function ExecuteSQL(strSQL:String;var strMsg:String):integer;
function ExecuteSQL1(strSQL:String;var strMsg:String;var rsReturn:TADOQuery):integer;
{ Public declarations }
end;
var
gtheAccess:theAccess;
implementation
procedure theAccess.Conn;
var
ConnectionString:String;
begin
ConnectionString:='User ID=sa;Password=123456;Data Source=;Initial Catalog=master';
AdoConn.Provider:='SQLOLEDB';
AdoConn.ConnectionString:=ConnectionString;
AdoConn.LoginPrompt:= False;
AdoConn.Mode:= cmShareDenyNone;
AdoConn.Connected:= True;
end;
function theAccess.ExecuteSQL(strSQL: String;var strMsg:String):Integer;
begin
try
if not AdoConn.Connected then Conn;
AdoConn.Execute(strSQL);
strMsg:='执行SQL语句成功';
result:=1;
except
strMsg:='执行SQL语句失败';
result:=0;
end;
end;
function theAccess.ExecuteSQL1(strSQL:String;var strMsg:String;var rsReturn:TADOQuery):integer;
var rs:TADOQuery;
begin
try
rs:=TADOQuery.Create(Application);
rs.Connection:=AdoConn; //这句有错误提示
if not AdoConn.Connected then Conn;
rs.SQL.Clear;
rs.SQL.Add(strSQL);
rs.Open;
rsReturn:=rs;
strMsg:='执行SQL语句成功';
result:=1;
rs.Free;
except
strMsg:='执行SQL语句失败';
result:=0;
end;
end;
end.
请大家帮我看看,这是哪里的错
------解决方案--------------------
在调用的时候,首要调用 procedure theAccess.Conn; 过程,否则,你直接调用那个function theAccess.ExecuteSQL1 就会报错的!
------解决方案--------------------
rs.Connection:=AdoConn; //这句有错误提示 ,
//adoConn你初始过了吗,还没初始化就调用能不出错吗
if not AdoConn.Connected then Conn;
这样
Conn;
rs.Connection:=AdoConn;
------解决方案--------------------
每次执行ExecuteSQL1都要创建出一个TADOQuery来,效率也太低了,,,,不合格 :)
------解决方案--------------------
up
------解决方案--------------------
Query 本身也不要用:var 去回传啊。直接 function 返回 Query 就行了,最终由调用者释放掉资源。
------解决方案--------------------
楼主的代码没什么问题了,呵呵
我是新手,我想做一个执行数据库的类,下面是我的类内容:
unit clstheAccess;
interface
Uses
SysUtils, Classes, DB, ADODB, Forms, Dialogs;
type
theAccess=class(TDataModule)
AdoConn: TADOConnection;
private
{ Private declarations }
public
procedure Conn;
function ExecuteSQL(strSQL:String;var strMsg:String):integer;
function ExecuteSQL1(strSQL:String;var strMsg:String;var rsReturn:TADOQuery):integer;
{ Public declarations }
end;
var
gtheAccess:theAccess;
implementation
procedure theAccess.Conn;
var
ConnectionString:String;
begin
ConnectionString:='User ID=sa;Password=123456;Data Source=;Initial Catalog=master';
AdoConn.Provider:='SQLOLEDB';
AdoConn.ConnectionString:=ConnectionString;
AdoConn.LoginPrompt:= False;
AdoConn.Mode:= cmShareDenyNone;
AdoConn.Connected:= True;
end;
function theAccess.ExecuteSQL(strSQL: String;var strMsg:String):Integer;
begin
try
if not AdoConn.Connected then Conn;
AdoConn.Execute(strSQL);
strMsg:='执行SQL语句成功';
result:=1;
except
strMsg:='执行SQL语句失败';
result:=0;
end;
end;
function theAccess.ExecuteSQL1(strSQL:String;var strMsg:String;var rsReturn:TADOQuery):integer;
var rs:TADOQuery;
begin
try
rs:=TADOQuery.Create(Application);
rs.Connection:=AdoConn; //这句有错误提示
if not AdoConn.Connected then Conn;
rs.SQL.Clear;
rs.SQL.Add(strSQL);
rs.Open;
rsReturn:=rs;
strMsg:='执行SQL语句成功';
result:=1;
rs.Free;
except
strMsg:='执行SQL语句失败';
result:=0;
end;
end;
end.
请大家帮我看看,这是哪里的错
------解决方案--------------------
在调用的时候,首要调用 procedure theAccess.Conn; 过程,否则,你直接调用那个function theAccess.ExecuteSQL1 就会报错的!
------解决方案--------------------
rs.Connection:=AdoConn; //这句有错误提示 ,
//adoConn你初始过了吗,还没初始化就调用能不出错吗
if not AdoConn.Connected then Conn;
这样
Conn;
rs.Connection:=AdoConn;
------解决方案--------------------
每次执行ExecuteSQL1都要创建出一个TADOQuery来,效率也太低了,,,,不合格 :)
------解决方案--------------------
up
------解决方案--------------------
Query 本身也不要用:var 去回传啊。直接 function 返回 Query 就行了,最终由调用者释放掉资源。
------解决方案--------------------
楼主的代码没什么问题了,呵呵