我要实现数据库采用INI文件连接的方式,也就是在系统加载的时候连接数据库,连接数据库的字符串是用INI文件中的一些参数生成的,如果连接失败弹出一个窗口,可以重新配置INI文件,并且自动重新连接。这个东西我写了一点代码,不过不明白为什么资源无法释放掉,能不能告诉我应该在什么地方连接数据库,在什么地方判断是否连接!

解决方案 »

  1.   

    代码贴出来看看~~~  //设置数据源;
      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;
      

  2.   

    什么资源释放不掉,这个连接么?如果连接失败弹出一个窗口,可以重新配置INI文件,并且自动重新连接。
    // 你可以弹出选择框 让用户选择呀.选择好了再重新连接
      

  3.   

    是这样的了!
    我的代码是在主窗口的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;
      

  4.   

    一般来说,创建一个数据模块来存放大量的数据库控件,以便于统一管理,ADOConnection也放在这个DataModule上,ADOConnection的连接动作可以放在DataModule的OnCreate事件中:
     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';用这段字串连接试试