ado动态链接数据库

时间:2022-06-05 04:47:59
请高手帮帮忙

怎样实现动态连接数据库(access)
我要的是有设置路径
在程序运行时查找(access)库

15 个解决方案

#1


最快的办法就是在程序中利用adoconnetion的属性直接连接数据库的
然后把这些字符串拷贝出来分析的 
修改数据库的名称 密码等信息
修改后动态的赋值给adoconnetionstring属性
最后connected设置为true就是可以的了

#2


转帖:
procedure TfrmMain.ConnectDB;
var
  ConnStr,DBPath:String;        //保存连接字符串和数据库路径
begin
  {ExtractFilePath函数从一个完整的文件名中分离出路径,以'\'结束,
   Application.ExeName得到程序执行文件本身的文件名,
   这里要求数据库文件(UserInfo.mdb)必须放在程序同一个目录,
   否则就连接不上了,呵呵!}

  try
    DBPath:=ExtractFilePath(Application.ExeName)+'UserInfo.mdb';
    ConnStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
        DBPath+';Persist Security Info=False';
    ADOConnection1.Close; //要改变它的属性前要关闭连接!
    ADOConnection1.ConnectionString:=ConnStr;     //指定连接串
    ADOconnection1.LoginPrompt:=False;  //不显示默认的登录对话框
    ADOConnection1.Open   //打开连接
  except
    on E:Exception do
    begin
      ShowMessage('出错!'+e.Message);  //显示出错信息
      frmMain.Close;    //退出程序算了,数据库都连不上还有什么用!^_^
    end;
  end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  ConnectDB;    //连接数据库
end;

#3


在程序中的连接字符串中写下数据库的相对路径

#4


我要有设置路径的ado

#5


如果是采用本地的ACCESS,应该在ODBC库中设置系统DNS,那里可以设置ACCESS的路径。

#6


with AdoConnection1 do
  begin
    Connected:=false;
    Connectionstring := '';
    ConnectionString :=' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog= '
                               + DataBaseName
                               + ' ;Data Source='
                               + ServerName;
    Connected := true;

  end;
Databasename是你的数据库名称
Servername是你的服务器名称

#7


这是连接Sql server2000的
连接Access的是
Path:=ExtractFilePath(ParamStr(0));
  if not FileExists(Path+'Data\Pack.Dll') then
    begin
      Msg:='数据库文件"Pack.Dll"没有找到!'+#10#13+
           '请查找到该文件以"Pack.Dll"为文件名放置到目录:'+#10#13+
           Path+'Data\ 中。';
      Application.MessageBox(Pchar(Msg),'错误',MB_OK+MB_ICONERROR);
      Application.Terminate;
    end;
  AdoCon.Connected:=False;
  ConStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Path+'Data\Pack.Dll;Persist Security Info=True';
  AdoCon.ConnectionString:=ConStr;
  try
    AdoCon.Connected:=True;
  except
    Application.MessageBox('数据库连接错误,请重试!','错误',MB_OK+MB_ICONERROR);
    Application.Terminate;
  end;

#8


悔恨..恨........................

来晚了.............

#9


sigh..
来晚了就是晚了..

进最后的努力吧...

上面的代码是正确的..
我只能给你写思路..
首先得到你的软件所在的路径..Path:=ExtractFilePath(ParamStr(0));
然后动态打开ado..其数据库文件便是path+你的数据库名.也可以是相对与你主程序的路径,比如你的主程序在目录"c:\test\"目录下.数据是"c:\test\data\db.mdb"..
那么.就path+'data\db.mdb'..data前面不要加\..因为.path已经在后面加了\了...

#10


简单

procedure TfrmMain.ADOConnection1BeforeConnect(Sender: TObject);
begin
  ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
    + stFileName.Caption + ';Persist Security Info=False';
end;

#11


procedure TfrmLogin.FormCreate(Sender: TObject);
begin

if fileexists(extractfilepath(application.exename)+'yh.mdb') then
begin
//连接数据库字串
connstr:='Provider=Microsoft.Jet.OLEDB.4.0;data Source='+extractfilepath(application.exename)+'yh.mdb';
//建立Connection
conn:=CreateOleObject('ADODB.Connection');
//打开连接
conn.open(connstr);
rs:=CreateOleObject('ADODB.Recordset');
rs.open('select * from tuser order by userid',conn,1,1);

还可以动态创建一个Q控件,再连,

#12


这个我做过: 
    getdir(0,path) ;
    g_path:=path+'\db1.mdb';
    ADOConnection1.close;
ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+g_path+''';Persist Security Info=False';
    ADOConnection1.Open ;
    ADOConnection1.Connected :=true;

#13


楼主啊,这么多的热心人都在帮你,你还没做好吗,
我来晚了,就不再说了,上面的代码都很不错的。

#14


别提,偶来得更晚,看到那么多方法
相信楼主应该做好了

#15


动态连接用上面的方法都可以,
但是有一种情说,说是不用 Microsoft.Jet.OLEDB.4.0 时,你怎么办?
即你要用不同的数据库引擎时怎么办?

有以下的方法可以很好的实现,
原理:
    在我们连数据库时,系统会有一个向导,可以选择数据库引擎,数据库。
我们也可以用他的方法,从VCL 库中我们知道,在连接时,他会调用一个方法:PromptDataSource,该方法要求有一个窗口句柄。

我们也可以用它的方法:
实现如下:
必须要包含单元:ADOConEd,IniFiles

代码:


procedure TfrmMain.FormCreate(Sender: TObject);
var
  ConnectString: String;
  ConfigFile: TIniFile;
begin
  ConfigFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Config.ini');
  
  If Not FileExists(ExtractFilePath(Application.ExeName) + 'Config.ini') Then
  Begin
    ShowMessage('数据库没有连接,请先连接数据库');              
    ConnectString := PromptDataSource(Handle, ConnectString);
    ConfigFile.WriteString('ConnectString', 'CurConnectString', ConnectString);
  End
  Else
  Begin
    ConnectString := ConfigFile.ReadString('ConnectString', 'CurConnectString', '');
  End;

  frmDM.ADOConnection1.ConnectionString := ConnectString;
  Try
    frmDM.ADOConnection1.Open;
  Except
    ShowMessage('数据库连接错误,请检查配置文件 Config.ini !');
    DeleteFile(ExtractFilePath(Application.ExeName) + 'Config.ini');
    Application.Terminate;
  End;


#1


最快的办法就是在程序中利用adoconnetion的属性直接连接数据库的
然后把这些字符串拷贝出来分析的 
修改数据库的名称 密码等信息
修改后动态的赋值给adoconnetionstring属性
最后connected设置为true就是可以的了

#2


转帖:
procedure TfrmMain.ConnectDB;
var
  ConnStr,DBPath:String;        //保存连接字符串和数据库路径
begin
  {ExtractFilePath函数从一个完整的文件名中分离出路径,以'\'结束,
   Application.ExeName得到程序执行文件本身的文件名,
   这里要求数据库文件(UserInfo.mdb)必须放在程序同一个目录,
   否则就连接不上了,呵呵!}

  try
    DBPath:=ExtractFilePath(Application.ExeName)+'UserInfo.mdb';
    ConnStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
        DBPath+';Persist Security Info=False';
    ADOConnection1.Close; //要改变它的属性前要关闭连接!
    ADOConnection1.ConnectionString:=ConnStr;     //指定连接串
    ADOconnection1.LoginPrompt:=False;  //不显示默认的登录对话框
    ADOConnection1.Open   //打开连接
  except
    on E:Exception do
    begin
      ShowMessage('出错!'+e.Message);  //显示出错信息
      frmMain.Close;    //退出程序算了,数据库都连不上还有什么用!^_^
    end;
  end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  ConnectDB;    //连接数据库
end;

#3


在程序中的连接字符串中写下数据库的相对路径

#4


我要有设置路径的ado

#5


如果是采用本地的ACCESS,应该在ODBC库中设置系统DNS,那里可以设置ACCESS的路径。

#6


with AdoConnection1 do
  begin
    Connected:=false;
    Connectionstring := '';
    ConnectionString :=' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog= '
                               + DataBaseName
                               + ' ;Data Source='
                               + ServerName;
    Connected := true;

  end;
Databasename是你的数据库名称
Servername是你的服务器名称

#7


这是连接Sql server2000的
连接Access的是
Path:=ExtractFilePath(ParamStr(0));
  if not FileExists(Path+'Data\Pack.Dll') then
    begin
      Msg:='数据库文件"Pack.Dll"没有找到!'+#10#13+
           '请查找到该文件以"Pack.Dll"为文件名放置到目录:'+#10#13+
           Path+'Data\ 中。';
      Application.MessageBox(Pchar(Msg),'错误',MB_OK+MB_ICONERROR);
      Application.Terminate;
    end;
  AdoCon.Connected:=False;
  ConStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Path+'Data\Pack.Dll;Persist Security Info=True';
  AdoCon.ConnectionString:=ConStr;
  try
    AdoCon.Connected:=True;
  except
    Application.MessageBox('数据库连接错误,请重试!','错误',MB_OK+MB_ICONERROR);
    Application.Terminate;
  end;

#8


悔恨..恨........................

来晚了.............

#9


sigh..
来晚了就是晚了..

进最后的努力吧...

上面的代码是正确的..
我只能给你写思路..
首先得到你的软件所在的路径..Path:=ExtractFilePath(ParamStr(0));
然后动态打开ado..其数据库文件便是path+你的数据库名.也可以是相对与你主程序的路径,比如你的主程序在目录"c:\test\"目录下.数据是"c:\test\data\db.mdb"..
那么.就path+'data\db.mdb'..data前面不要加\..因为.path已经在后面加了\了...

#10


简单

procedure TfrmMain.ADOConnection1BeforeConnect(Sender: TObject);
begin
  ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
    + stFileName.Caption + ';Persist Security Info=False';
end;

#11


procedure TfrmLogin.FormCreate(Sender: TObject);
begin

if fileexists(extractfilepath(application.exename)+'yh.mdb') then
begin
//连接数据库字串
connstr:='Provider=Microsoft.Jet.OLEDB.4.0;data Source='+extractfilepath(application.exename)+'yh.mdb';
//建立Connection
conn:=CreateOleObject('ADODB.Connection');
//打开连接
conn.open(connstr);
rs:=CreateOleObject('ADODB.Recordset');
rs.open('select * from tuser order by userid',conn,1,1);

还可以动态创建一个Q控件,再连,

#12


这个我做过: 
    getdir(0,path) ;
    g_path:=path+'\db1.mdb';
    ADOConnection1.close;
ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+g_path+''';Persist Security Info=False';
    ADOConnection1.Open ;
    ADOConnection1.Connected :=true;

#13


楼主啊,这么多的热心人都在帮你,你还没做好吗,
我来晚了,就不再说了,上面的代码都很不错的。

#14


别提,偶来得更晚,看到那么多方法
相信楼主应该做好了

#15


动态连接用上面的方法都可以,
但是有一种情说,说是不用 Microsoft.Jet.OLEDB.4.0 时,你怎么办?
即你要用不同的数据库引擎时怎么办?

有以下的方法可以很好的实现,
原理:
    在我们连数据库时,系统会有一个向导,可以选择数据库引擎,数据库。
我们也可以用他的方法,从VCL 库中我们知道,在连接时,他会调用一个方法:PromptDataSource,该方法要求有一个窗口句柄。

我们也可以用它的方法:
实现如下:
必须要包含单元:ADOConEd,IniFiles

代码:


procedure TfrmMain.FormCreate(Sender: TObject);
var
  ConnectString: String;
  ConfigFile: TIniFile;
begin
  ConfigFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Config.ini');
  
  If Not FileExists(ExtractFilePath(Application.ExeName) + 'Config.ini') Then
  Begin
    ShowMessage('数据库没有连接,请先连接数据库');              
    ConnectString := PromptDataSource(Handle, ConnectString);
    ConfigFile.WriteString('ConnectString', 'CurConnectString', ConnectString);
  End
  Else
  Begin
    ConnectString := ConfigFile.ReadString('ConnectString', 'CurConnectString', '');
  End;

  frmDM.ADOConnection1.ConnectionString := ConnectString;
  Try
    frmDM.ADOConnection1.Open;
  Except
    ShowMessage('数据库连接错误,请检查配置文件 Config.ini !');
    DeleteFile(ExtractFilePath(Application.ExeName) + 'Config.ini');
    Application.Terminate;
  End;