麻煩各位高手幫忙小弟解決以下問題:
窗體的一個函數調用datamodule的連接對像(connect_dbms)時就出現missing connection or connectionstring 的錯誤提示!!!請各位高手幫忙解決!!!謝謝!!!
下面是datamodule裡的程序:
unit u_dm;interfaceuses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
DB,
ADODB,
IniFiles,
Registry,
DateUtils, ComCtrls,Clipbrd, OleServer,unit1, Excel2000, Sockets;type
TDM = class(TDataModule)
function readinifiled:string;
function testConnect(strconn:string):boolean;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
connect_dbms:tadoconnection;//一個公共連接對象
end;var
DM: TDM;implementation
uses
Unit2;
var
connect:Tinifile;
{$R *.dfm}
function TDM.readinifiled:string;
var //斐膘蟀諉趼睫揹
ps_temp:boolean;
filename,
ic_temp,
ds_temp,
ui_temp,
pw_temp,
strconn:string;
begin
try
filename:=ExtractFilePath(paramstr(0))+'connection.ini';
// filename:=extractfilepath('h:\connection.ini');
connect:=Tinifile.Create(filename);
ps_temp:=connect.ReadBool('serverconn','Persist Security Info',false);
ic_temp:=connect.ReadString('serverconn','Initial Catalog','');
ds_temp:=connect.ReadString('serverconn','Data Source','');
ui_temp:=connect.ReadString('serverconn','User ID','sa');
pw_temp:=connect.ReadString('serverconn','Password','');
if ps_temp=false then
begin //NT桄痐諳鍔
strconn:='Provider=SQLOLEDB.1;Integrated Security=SSPI;';
strconn:=strconn+'Persist Security Info=false;Initial Catalog='+trim(ic_temp)+';Data Source='+trim(ds_temp)+';';
end
else
begin //SQL桄痐
strconn:='Provider=SQLOLEDB.1;Password='+trim(pw_temp)+';';
strconn:=strconn+'Persist Security Info=false;User ID='+trim(ui_temp)+';';
strconn:=strconn+'Initial Catalog='+trim(ic_temp)+';Data Source='+trim(ds_temp)+'';
end;
connect.Destroy;
result:=strconn;
except
//messagedlg('蠟羶衄蛁聊杅擂踱督昢',mterror,[mbok],0);
strconn:='';
result:=strconn;
connect.Destroy;
halt(0);
end;end;
//****************************88
function TDM.testConnect(strconn:string):boolean;
var //聆彸蟀諉杅擂踱岆瘁傖髡
cnn:Tadoconnection;
begin
cnn:=tadoconnection.create(application.owner);
cnn.connectionstring:=strconn;
cnn.LoginPrompt:=false;
try
cnn.open();
cnn.close;
cnn.free;
result:=true;
except
result:=false;
exit;
end;
end;
//***************************88procedure TDM.DataModuleCreate(Sender: TObject);
var //膘蕾蟀諉
strconn:string;
begin
strconn:=readinifiled();
//rszl.Edit1.Text:=strconn;
if (not testconnect(strconn)) then //測試是否能與數據庫連接。問題:但當我在ini文件把數據名//去掉依然沒提示錯誤,我不知道為什麼??????
begin
messagedlg('你還沒注冊服務器!',mterror,[mbok],0);
halt(0);
end;
try
connect_dbms:=tadoconnection.Create(application.owner);
connect_dbms.LoginPrompt:=false;
connect_dbms.Provider:='sqloledb.1';
connect_dbms.ConnectionString:=strconn;
connect_dbms.Connected:=true;
connect_dbms.KeepConnection:=true;
except
messagedlg('連接數據庫出錯',mterror,[mbok],0);
halt(0);
end;
end;
end.而當我在其它窗口調用connect_dbms時就出現missing connection or connectionstring的錯誤提示!?
如以下的調用:
function Trszl.dbgridconnect(yourdbgrid:Tdbgrid;strsql:string;constring:tadoconnection):integer;
var
adotemp:TAdoquery;
datatemp:TDataSource;
i:integer;
begin
i:=-1;
try
adotemp:=tadoquery.Create(application.owner);
datatemp:=TDataSource.Create(application.owner);
adotemp.Connection:=dm.connect_dbms;
// adotemp.Active:=true;
adotemp.Close;//程序執行到這裡就出現以上錯誤提示!
adotemp.SQL.Clear;
adotemp.SQL.Add(strsql);
adotemp.ExecSQL;
adotemp.Active:=true;
datatemp.DataSet:=adotemp;
yourdbgrid.DataSource:=datatemp;
i:=yourdbgrid.SelectedRows.Count;
finally
adotemp.Close;
adotemp.Free;
result:=i;
end;
end;
窗體的一個函數調用datamodule的連接對像(connect_dbms)時就出現missing connection or connectionstring 的錯誤提示!!!請各位高手幫忙解決!!!謝謝!!!
下面是datamodule裡的程序:
unit u_dm;interfaceuses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
DB,
ADODB,
IniFiles,
Registry,
DateUtils, ComCtrls,Clipbrd, OleServer,unit1, Excel2000, Sockets;type
TDM = class(TDataModule)
function readinifiled:string;
function testConnect(strconn:string):boolean;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
connect_dbms:tadoconnection;//一個公共連接對象
end;var
DM: TDM;implementation
uses
Unit2;
var
connect:Tinifile;
{$R *.dfm}
function TDM.readinifiled:string;
var //斐膘蟀諉趼睫揹
ps_temp:boolean;
filename,
ic_temp,
ds_temp,
ui_temp,
pw_temp,
strconn:string;
begin
try
filename:=ExtractFilePath(paramstr(0))+'connection.ini';
// filename:=extractfilepath('h:\connection.ini');
connect:=Tinifile.Create(filename);
ps_temp:=connect.ReadBool('serverconn','Persist Security Info',false);
ic_temp:=connect.ReadString('serverconn','Initial Catalog','');
ds_temp:=connect.ReadString('serverconn','Data Source','');
ui_temp:=connect.ReadString('serverconn','User ID','sa');
pw_temp:=connect.ReadString('serverconn','Password','');
if ps_temp=false then
begin //NT桄痐諳鍔
strconn:='Provider=SQLOLEDB.1;Integrated Security=SSPI;';
strconn:=strconn+'Persist Security Info=false;Initial Catalog='+trim(ic_temp)+';Data Source='+trim(ds_temp)+';';
end
else
begin //SQL桄痐
strconn:='Provider=SQLOLEDB.1;Password='+trim(pw_temp)+';';
strconn:=strconn+'Persist Security Info=false;User ID='+trim(ui_temp)+';';
strconn:=strconn+'Initial Catalog='+trim(ic_temp)+';Data Source='+trim(ds_temp)+'';
end;
connect.Destroy;
result:=strconn;
except
//messagedlg('蠟羶衄蛁聊杅擂踱督昢',mterror,[mbok],0);
strconn:='';
result:=strconn;
connect.Destroy;
halt(0);
end;end;
//****************************88
function TDM.testConnect(strconn:string):boolean;
var //聆彸蟀諉杅擂踱岆瘁傖髡
cnn:Tadoconnection;
begin
cnn:=tadoconnection.create(application.owner);
cnn.connectionstring:=strconn;
cnn.LoginPrompt:=false;
try
cnn.open();
cnn.close;
cnn.free;
result:=true;
except
result:=false;
exit;
end;
end;
//***************************88procedure TDM.DataModuleCreate(Sender: TObject);
var //膘蕾蟀諉
strconn:string;
begin
strconn:=readinifiled();
//rszl.Edit1.Text:=strconn;
if (not testconnect(strconn)) then //測試是否能與數據庫連接。問題:但當我在ini文件把數據名//去掉依然沒提示錯誤,我不知道為什麼??????
begin
messagedlg('你還沒注冊服務器!',mterror,[mbok],0);
halt(0);
end;
try
connect_dbms:=tadoconnection.Create(application.owner);
connect_dbms.LoginPrompt:=false;
connect_dbms.Provider:='sqloledb.1';
connect_dbms.ConnectionString:=strconn;
connect_dbms.Connected:=true;
connect_dbms.KeepConnection:=true;
except
messagedlg('連接數據庫出錯',mterror,[mbok],0);
halt(0);
end;
end;
end.而當我在其它窗口調用connect_dbms時就出現missing connection or connectionstring的錯誤提示!?
如以下的調用:
function Trszl.dbgridconnect(yourdbgrid:Tdbgrid;strsql:string;constring:tadoconnection):integer;
var
adotemp:TAdoquery;
datatemp:TDataSource;
i:integer;
begin
i:=-1;
try
adotemp:=tadoquery.Create(application.owner);
datatemp:=TDataSource.Create(application.owner);
adotemp.Connection:=dm.connect_dbms;
// adotemp.Active:=true;
adotemp.Close;//程序執行到這裡就出現以上錯誤提示!
adotemp.SQL.Clear;
adotemp.SQL.Add(strsql);
adotemp.ExecSQL;
adotemp.Active:=true;
datatemp.DataSet:=adotemp;
yourdbgrid.DataSource:=datatemp;
i:=yourdbgrid.SelectedRows.Count;
finally
adotemp.Close;
adotemp.Free;
result:=i;
end;
end;
该错误说明你的你的控件AdoConnection或者AdoQuery等的ConnectionString属性为空
这样AdoConnection.connected:=true,AdoQuery.Active:=true时候就有这个错误
有点乱,看晕了