关于动态设置数据源?(100分)

  • 主题发起人 主题发起人 kadi88
  • 开始时间 开始时间
K

kadi88

Unregistered / Unconfirmed
GUEST, unregistred user!
我作了一个数据库小程序,因为我想作成在一个在小局域网中
运行的,支持三四个人共用的小数据库程序.所以把它作成可以动态设置
数据源.

DataModule.AC.Close;
EditConnectionString(DataModule.AC);
DataModule.AC.Open;

可是这样的话,必须每次启动程序都要设置一次数据源.
现在我想在一台电脑上只设置一次就可,程序下次重启
默认数据源为上次设置的,请问该如何?

我的后台数据库是ACCESS.放在一个共享文件夹中.
我现在是用Delphi作前台数据输入和查询界面.
平时最多也就三四个人同时用.
请问我该采用什么思路最好.

欢迎提见解!
 
你是想程序下次重启默认数据源为上次设置的,有很多方法可以实现,关键是在本次程序关闭时
将上次数据源的位置保存下来,在下次程序启动时先把保存的数据源位置读出来,然后对数据
库进行设置后再打开就行了
你可以用文本文件保存,也可以用ini文件,也可以保存在注册表中,也可以直接用二进制文件
保存,看你哪种方法熟悉了,自己选一种熟悉的用就行了
 
把ConnectionString写到注册表到呵
启动时把这个读出来
然后.
DataModule.AC.Close;
DataModule.AC.ConnectionString;=s;
DataModule.AC.Open;

如改变了再置注册表就是了
或者写在
不INI文件放在共享文件夹中
 
我是第一次用delphi写程序的,对这些都还不是很了解,最重要的是还不会操作细节,
请问resun. vine能给我个细节点的东西吗?
 

uses Registry;

procedure TMainForm.InitFromReg;
begin
with Tregistry.create do
try
RootKey:=HKEY_LOCAL_MACHINE;
openKey(KeyStr,true);
try
DataName:=Readstring('DataName');
if DataName='' then raise Exception.Create('Reed Error');
except
DataName:=ExtractFilePath(Application.exename)+'Data.vic';
writeString('DataName',DataName);
end;
finally
Free;
end; //end one try and with do
end;

procedure TMainForm.LoginInDatabase;
begin
with DM do
begin
ADOConnection.connected:=FALSE;
ADOConnection.connectionstring:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataName+';Persist Security Info=False';
Try
ADOConnection.connected:=true;
TaType.open;
taReg.Open;
taUser.Open;
Except
if Messagedlg('打开数据文件出错!'+#13#10+
'确认数据表文件:'+DataName+'格式正确?'+#13#10+
'重新选取数据文件?',
mtError,[mbyes,mbNo],0)=mrYes then
begin
...
//弹出选取数据库窗体让人选择数据库所在
else Application.terminate;
End; //end try
End; // end with do
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
InitFromReg;
LoginInDatabase;
end;

//如果数据文件有改动,则写入到注册表'DataName'键值中
//这样应该能明白了吧
//在上面的代码中。有些变量没有给出声明,相信能看懂
 
注册表或者Ini操作,本论坛有不少阿
查找一下就可以了。
uses
IniFiles;
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(ChangeFileExt(Paramstr(0),'Ini'));
try
//设定
Ini.WriteString('Data','Connection',DataModule.AC.ConnectionString);
//读取
DataModule.AC.ConnectionString :=
Ini.ReadString('Data','Connection',DataModule.AC.ConnectionString);
finally
Ini.Free;
end;
end;
 
我试过shenloqi的方法但可能是我理解错误我的具体如下:但有问题?
不知道是那里出了问题? 我自己认为可能是procedure TMainForm.M_configClick(Sender: TObject);
有问题,但不知该如何改?
procedure TMainForm.M_configClick(Sender: TObject);
begin
MainDataModule.AC.Close;
EditConnectionString(MainDataModule.AC);
MainDataModule.AC.Open;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Ini := TIniFile.Create(ChangeFileExt(Paramstr(0),'Ini'));
try
//读取
MainDataModule.AC.ConnectionString :=
Ini.ReadString('Data','Connection',MainDataModule.AC.ConnectionString);
finally
Ini.Free;
end;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
try
//设定
Ini.WriteString('Data','Connection',MainDataModule.AC.ConnectionString);
finally
Ini.Free;
end;
end;
 
//Ini.Free;
 
谁能帮我看看?
 
多人接受答案了。
 
后退
顶部