在做数据库用控件连接时,发现一个问题。
如果我用BDE连,每次启动时都会要我登陆数据库。
而且我在自己电脑上编的程序,在别人电脑就是因为数据库连接问题
而不能运行
我试过用ADO控件,虽然在启动时可以不用登陆,但移植性还是不好。请问我想用自己写的程序连接数据库,应该如何写?
最好能有可移植性,就是有一个.ini的配置文件
这样我可以在程序作完后,通过改写配置文件就能,访问数据库。
请问如何作。能给出实例吗??
多谢!

解决方案 »

  1.   

    用BDE,加一个Datamodule,再加Database就可以,要移植必须保证你的数据库开着!这是一个C/S模式!
      

  2.   

    我想用.ini手工连接应如何做?
      

  3.   

    unit Login;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB,inifiles;type
      TFrmLogin = class(TForm)
        GroupBox1: TGroupBox;
        Label1: TLabel;
        Label2: TLabel;
        PwdEdit: TEdit;
        Label3: TLabel;
        UserKindBox: TComboBox;
        UserNameEdit: TEdit;
        ADOQuery: TADOQuery;
        Button1: TButton;
        Button2: TButton;
        ADOConnection: TADOConnection;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
         s1:string;
      end;var
      FrmLogin: TFrmLogin;implementationuses ZhuServer;
     var myinifile:TInifile;//uses ZhuServer;{$R *.dfm}procedure TFrmLogin.Button1Click(Sender: TObject);
    var
        pwd:string[30];
        times:integer;
    begin
         if UserNameEdit.Text=''then
         begin
           Showmessage('用户名不能为空!');
           exit;
         end;
         //username:=trim(UserNameEdit.Text);     FrmLogin.ADOQuery.SQL.Add('select * from Priority where username='''+UserNameEdit.Text+''' AND kinds='''+UserKindBox.Text+'''');
         try
         FrmLogin.ADOQuery.Open;
         except
           Showmessage('数据库打开失败!');
         end;
         pwd:=trim(FrmLogin.ADOQuery.FieldByName('password').AsString);
         //s1:=trim(UserNameEdit.Text);
           //Showmessage(s1+pwd);
         s1:=trim(UserKindBox.Text);
         if pwd<>trim(PwdEdit.Text)  then
         begin
           Showmessage('登陆失败!');
           FrmLogin.ADOQuery.Close;
           exit;
         end
         else
           begin
            Showmessage('登陆成功!'+s1);
            //FrmLogin.Close();
            FrmLogin.Hide();
            FrmLogin.ADOQuery.Close();
            MainForm.ShowModal();
           end;
            //MainForm.Nqiantai.Enabled:=false;end;procedure TFrmLogin.Button2Click(Sender: TObject);
    begin
         FrmLogin.Close();
    end;procedure TFrmLogin.FormCreate(Sender: TObject);
      var filename,server,ds:string;
    begin
       filename:=ExtractFilePath(Paramstr (0))+'program.ini';
       myinifile:=Tinifile.Create(filename);
       ds:=myinifile.ReadString('DataBase','DataBase','');
       server:=myinifile.ReadString('DataBase','DBServer','');
       AdoConnection.connectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='+ds+';Data Source='+server;
       ADOQuery.Connection:=AdoConnection;
    end;end.这是我写的连接,
    dbset的内容为
    [DataBase]
    DBServer=hawk
    DataBase=Carte
    但是运行结果为数据库连接失败,溢出,找不到Priority。
    请问哪里有问题?怎么改?end.
      

  4.   

    你把连接放在datemodule中,我做的。楼主看看。unit Unit12;interfaceuses
      SysUtils, Classes, DB, ADODB, ADOConEd, Inifiles, Dialogs;type
      TDataModule12 = class(TDataModule)
        ADOConnection1: TADOConnection;
        procedure DataModuleCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      DataModule12: TDataModule12;implementationuses Unit1;
    var myinifile:TInifile;
    {$R *.dfm}procedure TDataModule12.DataModuleCreate(Sender: TObject);
    var filename:string;
        db,server:string;
    begin
       filename:=Extractfilepath(paramstr(0))+'DBset.ini';
       myinifile:=TInifile.Create(filename);
       db:=myinifile.ReadString('数据库配置','数据库名','customer');
       server:=myinifile.ReadString('数据库配置','数据库服务器名','HYS/HYS');
       datamodule12.ADOConnection1.Close;           //Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=customer;Data Source=HYS\HYS
       datamodule12.ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog='+db+';Data Source='+server;
       try
         datamodule12.ADOConnection1.Open;
       except
         showmessage('无法连接到指定的数据库.可能是网络不通或数据库连接文件配置错误!');
       end;
    end;end.
      

  5.   

    我在运行的时候没有错误。保证可以。呵呵,我的QQ是272733007。楼主有不明白的找我联系。联系的时候请注明:Delphi程序员。
      

  6.   

    用ADO照样可以,
    用配置文件改ADOConnection的ConnectionString属性!
      

  7.   

    同意电脑世界的实现,同时,我认为ado还是满不错的,我一直用ado进行,用动态的connectionstr来实现,比如,data_F.ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password='+密码+';Persist Security Info=False;User ID='+用户ID+';Initial Catalog='+数据库名称+';Data Source='+数据库服务器,把这些记录保存到ini文件(或其他文件类型)或注册表中,连接成功则不必进行重写,不成功则重写;在database里把所有的数据集都连到adoconnection1,这样就可以实现ado的移植
      

  8.   

    用ADO,在连接字符串中使用Microsoft.Jet.OLEDB.4.0或者3.51驱动方式!
    这样就一切OK,纯绿色软件,随拷随用!
    不过,一定要记住,连接字符串中的数据库路径使用相对路径!