怎么通过ado动态的连接数据库
解决方案 »
- 请问用DELPHI6或DELPHI7是用什么组件进行网络编程啊?
- ■■■如何突破string[255]的限制?■■■
- 想开一家类似阿里巴巴的公司
- 如何取得dbGridEh中多项选中的行的某些字段的值?另外,如何代码选中DBGridEh中的所有行?
- Delphi2006里无法使用StarTeam吗?
- 读取Excel的Items[x,y]内容的问题。100分
- 如何在内存中创建一个TlistItems,然后定时用此listitems的数据去更新一个listview?
- //TmyClass中的one方法,是抽象的方法,你并没有实现它,
- 想让c#用string来接delphi写的dll传出的值,遇到内存出错困难,求助
- 编译错误
- 讨论:哪种皮肤控件最稳定!
- 关于PB动态库Delphi调用的问题!
因为你的问题不是很清楚,我只能说这么多了,见谅!
不知你是不是想要这个。
var
SYSINI: TINIFile;
ServerName, UserName, Password, tmpstr: string;
begin
SYSINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+'DB.INI');
try
ServerName := SYSINI.ReadString('Database', 'ServerName', '');
UserName := SYSINI.ReadString('Database', 'UserName', '');
tmpstr := SYSINI.ReadString('Database', 'Password', '');
Password := Decrypt(tmpstr, '');
Result := '';
Result := 'Provider=OraOLEDB.Oracle.1;Password=' + Password + ';Persist Security Info=True;User ID=' + UserName + ';Data Source='+ServerName+';Extended Properties=""';
finally
SYSINI.Free;
end;
end;
上面是我的方法,我把connectionstring需要的内容写到db.ini这个配置文件中,需要的时候再从文件中读取出来,动态配置adoconnection;
函数的调用 :
begin
Application.CreateForm(TDataModule1, DataModule1);
DataModule1.ADOConnection1.Connected:= false;
try
DataModule1.ADOConnection1.ConnectionString:= GetConnectionString;
DataModule1.ADOConnection1.Connected:= true;
except
MessageBox(Application.Handle,'数据库初始化设置错误,请与系统管理员联系!','错误',MB_OK OR MB_ICONSTOP);
Exit;
end;
Application.CreateForm(TMainform, Mainform);
Application.Run;
end;
var
m_reg:TRegistry;
begin
//获得数据库连接串
//ConString='' 从注册表中获得连接串,如果不存在则生成
//ConString<>'' 编辑存在的连接串,然后更新注册表
m_reg:=TRegistry.Create;
m_reg.RootKey:=HKEY_LOCAL_MACHINE;
m_reg.OpenKey(app.RegKey,true);
if ConString='' then //从注册表中读取
begin
Result:=m_reg.ReadString(strKey);
if Result='' then
begin
Result:=PromptDataSource(Application.Handle,ConString);
if Result<>'' then
m_reg.WriteString(strKey,Result);
end;
end
else //编辑存在的连接串
begin
Result:=PromptDataSource(Application.Handle,ConString);
m_reg.WriteString(strKey,Result);
end;
m_reg.Free;
end;
错了
在adodb单元中
这两上String,你分别保存下来,比如cnStr1,cnStr2
然后若要连接cnStr1,你就这样。
conn.close;
conn.ConnectionString:=cnStr1;
conn.open;
.......
然后要换成另外一个数据库的时候只要如上一样先关闭再换string,再open就可以了啊?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Registry;type
TForm1 = class(TForm)
Button1: TButton;
ADOConnection1: TADOConnection;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
//动态选择数据源和数据库procedure TForm1.Button1Click(Sender: TObject);
var
strConnection: string;
Reg01: TRegistry;
begin
strConnection := '';
Reg01 := Tregistry.Create;
try
//从注册表中读出ConnectionString
Reg01.RootKey := HKEY_CURRENT_USER;
if Reg01.OpenKey('\Software\LdcErpAcc\AdoCon', TRUE) then
strConnection := Reg01.ReadString('Connection');
adoconnection1.ConnectionString := strConnection;
try
adoconnection1.open;
except
adoconnection1.Close;
strConnection := PromptDataSource(Handle, ADOConnection1.ConnectionString);
showmessage(strConnection); if strConnection <> '' then
begin
adoconnection1.ConnectionString := strConnection; if (Reg01.OpenKey('\Software\LdcErpAcc\AdoCon', False)) = False then
//如果注册表中没有信息则创建信息
reg01.CreateKey('\Software\LdcErpAcc\AdoCon');
//将ConnectionString写到注册表中
Reg01.OpenKey('\Software\LdcErpAcc\AdoCon', True);
Reg01.WriteString('Connection', strConnection);
adoconnection1.Open;
end
else
Application.Terminate;
end;
finally
Reg01.closekey;
Reg01.free;
end;
end;end.
var
rtn:boolean;
conn:string;
begin
with dm1.ADOConnection1 do
begin
if connected then close;
conn:='Provider=MSDAORA.1;Password='+pass+';User ID='+user+';Persist Security Info=True;'+'Data Source='+servername;
adoconnection1.ConnectionString:= conn;
try
Open;
rtn:= true;
except
rtn:= false;
end;
end;
result:= rtn;
end;
Constr:='Provider=Microsoft.Jet.OLEDB.4.0;Password="' + 口令 + '";User ID="' + 用户名 + '";Data Source="' + 数据库名 + '";Mode=ReadWrite';连接SQLServer
constr:='Provider=SQLOLEDB.1;Password="' + 口令
+ '";Persist Security Info=True;User ID="' + 用户名 + '";Initial Catalog="' + 数据库名 + '";Data Source="' + 服务器名 + '"';
with ADOConection do
begin
Close;
ConnectionString:=Constr;
Open;
end;
//当主窗体建立时连接数据库,我用的是Access
procedure Tmainform.FormCreate(Sender: TObject);
var dbpath,connectstr: String;
begin
getdir(0,dbpath);
dbpath := dbpath + '\table.mdb';//dbpath: Access数据库路径
connectstr := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
connectstr := connectstr + dbpath;
connectstr := connectstr + ';Mode=ReadWrite|Share Deny None;Persist Security Info=False';
AdoQuery.ConnectionString := connectstr;
//以上代码用于AdoQuery与Access数据库的连接(动态实现)
end;