哥哥、姐姐帮忙! 我要实现数据库采用INI文件连接的方式,也就是在系统加载的时候连接数据库,连接数据库的字符串是用INI文件中的一些参数生成的,如果连接失败弹出一个窗口,可以重新配置INI文件,并且自动重新连接。这个东西我写了一点代码,不过不明白为什么资源无法释放掉,能不能告诉我应该在什么地方连接数据库,在什么地方判断是否连接! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码贴出来看看~~~ //设置数据源; str:='Provider=SQLOLEDB.1;Password='+PassWord+';Persist Security Info=True;User ID=sa;Initial Catalog=Li;Data Source='+DataSource; ADOConnection1.Close; ADOConnection1.ConnectionString:=str; ADOConnection1.LoginPrompt:=False; ADOConnection1.Open; 什么资源释放不掉,这个连接么?如果连接失败弹出一个窗口,可以重新配置INI文件,并且自动重新连接。// 你可以弹出选择框 让用户选择呀.选择好了再重新连接 是这样的了!我的代码是在主窗口的ONCreate事件里写的不知道这样对不对 部分代码如下procedure TfrmMain.FormCreate(Sender: TObject);var ServerName,DBName,LoginType:string; F:TIniFile; S:string;begin Self.LoadMapSetIniMap; Self.FeatureRecordLoad; F:=TIniFile.Create(GetAppPath()+'Config.INI'); ServerName:=F.ReadString('DataBase','ServerName','127.0.0.1'); DBName:=F.ReadString('DataBase','DataBaseName','WaterMC'); LoginType:=F.ReadString('DataBase','LoginType','0'); F.Free; s:='Provider=SQLOLEDB.1;Integrated Security=SSPI;'+ 'Persist Security Info=False;Initial Catalog='+DBName+';'+ 'Data Source='+ServerName; Application.CreateForm(TDM,DM); With DM.ADOCon do begin Close; ConnectionString:=S; try Open; Except ShowMessage('与数据库建立连接失败,请在系统配置中重新初始化变量'); Application.CreateForm(TfrmConfig,frmConfig); frmConfig.ShowModal; //Application.CreateForm(TfrmCheck,frmCheck); //frmCheck.Show; end; end;end;不过在窗口frmConfig打开后,如果关闭frmConfig 窗口然后我在frmconfig 窗口中编写如下代码procedure TfrmConfig.B_CancelClick(Sender: TObject);begin Close; //frmMain.Show; //frmLogo.Close; //frmMain.Close;end;不过这样不是系统直接终止,就是系统卡在了那里什么画面都没有我的主窗口怎么都看不到了procedure TfrmConfig.FormCreate(Sender: TObject);Var F:TIniFile;beginif fileExists('Config.ini') then begin try F:=TIniFile.Create(ExtractFilePath(paramStr(0))+'Config.ini'); FE_ServerName.Text:=F.ReadString('DataBase','Servername','127.0.0.1'); FE_DataBaseName.Text:=F.ReadString('DataBase','DataBaseName','WaterMC'); finally F.Free; end;end;end;procedure TfrmConfig.FormClose(Sender: TObject; var Action: TCloseAction);begin Action:=caFree;end;procedure TfrmConfig.B_OKClick(Sender: TObject);var IniF:TIniFile; DBName:String; ServerName:String;begin try IniF:=TIniFile.Create(ExtractFilePath(paramStr(0))+'Config.ini'); IniF.WriteString('DataBase','ServerName',FE_ServerName.text); IniF.WriteString('DataBase','DataBaseName',FE_DataBaseName.Text); ServerName:=FE_ServerName.Text; DBName:=FE_DataBaseName.Text; finally IniF.Free; end; with DM.ADOCon do begin Close; ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;'+ 'Persist Security Info=False;Initial Catalog='+DBName+';'+ 'Data Source='+ServerName; try Connected:=True; Self.Close; except ShowMessage('数据库连接失败!'); end; end;end; 一般来说,创建一个数据模块来存放大量的数据库控件,以便于统一管理,ADOConnection也放在这个DataModule上,ADOConnection的连接动作可以放在DataModule的OnCreate事件中: ConnectionString:= ' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=;Initial ' + 'Catalog=' + DBName + ';Data Source=' + ServerName + ';Locale Identifier=2052;Connect Timeout=60;Use Procedure for Prepare=1;' + 'Auto Translate=True;Packet Size=4096';用这段字串连接试试 函数帮助文档问题 快进来看看!!! 表自动生成序号的问题 如何把数据库中的数据读出并与String型比较 急,帮忙关于olecontainer的问题 ADO问题,急......... 为什么又要结贴强制结贴? 没人回答问题怎么结? Delphi中DBGrid显示数据问题 [Fatal Error] dclusr.dpk(41): File not found: 'FolderDialog.dcu'但编译的时候老提示我找不到这东西 ADOTable没有ApplyUpdates怎么办? 请问怎样在DELPHI中实现键盘上WINDOWS键的功能, 十万火急DBGrid控件的一种用法
str:='Provider=SQLOLEDB.1;Password='+PassWord+';Persist Security Info=True;User ID=sa;Initial Catalog=Li;Data Source='+DataSource;
ADOConnection1.Close;
ADOConnection1.ConnectionString:=str;
ADOConnection1.LoginPrompt:=False;
ADOConnection1.Open;
// 你可以弹出选择框 让用户选择呀.选择好了再重新连接
我的代码是在主窗口的ONCreate事件里写的不知道这样对不对 部分代码如下
procedure TfrmMain.FormCreate(Sender: TObject);
var
ServerName,DBName,LoginType:string;
F:TIniFile;
S:string;
begin
Self.LoadMapSetIniMap;
Self.FeatureRecordLoad;
F:=TIniFile.Create(GetAppPath()+'Config.INI');
ServerName:=F.ReadString('DataBase','ServerName','127.0.0.1');
DBName:=F.ReadString('DataBase','DataBaseName','WaterMC');
LoginType:=F.ReadString('DataBase','LoginType','0');
F.Free;
s:='Provider=SQLOLEDB.1;Integrated Security=SSPI;'+
'Persist Security Info=False;Initial Catalog='+DBName+';'+
'Data Source='+ServerName; Application.CreateForm(TDM,DM);
With DM.ADOCon do
begin
Close;
ConnectionString:=S;
try
Open;
Except
ShowMessage('与数据库建立连接失败,请在系统配置中重新初始化变量');
Application.CreateForm(TfrmConfig,frmConfig);
frmConfig.ShowModal;
//Application.CreateForm(TfrmCheck,frmCheck);
//frmCheck.Show;
end;
end;
end;不过在窗口frmConfig打开后,如果关闭frmConfig 窗口
然后我在frmconfig 窗口中编写如下代码procedure TfrmConfig.B_CancelClick(Sender: TObject);
begin
Close;
//frmMain.Show;
//frmLogo.Close;
//frmMain.Close;
end;不过这样不是系统直接终止,就是系统卡在了那里什么画面都没有我的主窗口怎么都看不到了procedure TfrmConfig.FormCreate(Sender: TObject);
Var
F:TIniFile;
begin
if fileExists('Config.ini') then begin
try
F:=TIniFile.Create(ExtractFilePath(paramStr(0))+'Config.ini');
FE_ServerName.Text:=F.ReadString('DataBase','Servername','127.0.0.1');
FE_DataBaseName.Text:=F.ReadString('DataBase','DataBaseName','WaterMC');
finally
F.Free;
end;
end;
end;procedure TfrmConfig.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;procedure TfrmConfig.B_OKClick(Sender: TObject);
var
IniF:TIniFile;
DBName:String;
ServerName:String;
begin
try
IniF:=TIniFile.Create(ExtractFilePath(paramStr(0))+'Config.ini');
IniF.WriteString('DataBase','ServerName',FE_ServerName.text);
IniF.WriteString('DataBase','DataBaseName',FE_DataBaseName.Text);
ServerName:=FE_ServerName.Text;
DBName:=FE_DataBaseName.Text;
finally
IniF.Free;
end;
with DM.ADOCon do
begin
Close;
ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;'+
'Persist Security Info=False;Initial Catalog='+DBName+';'+
'Data Source='+ServerName;
try
Connected:=True;
Self.Close;
except
ShowMessage('数据库连接失败!');
end;
end;
end;
ConnectionString:= ' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=;Initial '
+ 'Catalog=' + DBName + ';Data Source=' + ServerName
+ ';Locale Identifier=2052;Connect Timeout=60;Use Procedure for Prepare=1;'
+ 'Auto Translate=True;Packet Size=4096';用这段字串连接试试