我要实现数据库采用INI文件连接的方式,也就是在系统加载的时候连接数据库,连接数据库的字符串是用INI文件中的一些参数生成的,如果连接失败弹出一个窗口,可以重新配置INI文件,并且自动重新连接。这个东西我写了一点代码,不过不明白为什么资源无法释放掉,能不能告诉我应该在什么地方连接数据库,在什么地方判断是否连接!
解决方案 »
- API检测系统版本
- 如何看 00003ac9 这个地址 是什么模块调用的? Runtime error 203 at 00003ac9
- *****请问数值型数据怎么转化为大写*****
- 如何使Edit1只能输入数字而不能输入别的字母或组合键啊?(问题够菜鸟级)
- 为什么程序运行过程中会自已消失,急,在线等!
- 怎样获得屏幕上某一个象素点的颜色,用什么函数
- 找MS TTS 的资料
- 一个软件封面的制作,停留3秒后显示第二个窗口,谁有这样代码,能供我参考?
- tooltip怎么折行?
- delphi往Mq服务器发消息的客户端电脑要安装软件吗
- 请问怎样在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';用这段字串连接试试