下载了一个远程连接数据库源码,其中登录窗口中放置了两个控件
Database1属性:
AliasName:posserver
DatabaseName:pos
USER NAME=sa
PASSWORD=
Query1属性:DatabaseName:pos
初始化代码如下:
 FileHandle := FileOpen(ExtractFilePath(Application.Exename) + 'Link.ini', fmOpenWrite or fmShareDenyNone);
  if FileHandle > 0 then
    FileClose(FileHandle)
  else
  begin
    FileClose(FileHandle);
    Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
    Link.WriteString('POS', 'SERVER NAME', '127.0.0.1');
    Link.WriteString('POS', 'USER NAME', 'sa');
    Link.WriteString('POS', 'PASSWORD', '');
    Link.WriteString('SERVER', 'DATABASE NAME', 'server');
    Link.WriteString('SERVER', 'SERVER NAME', 'server');
    Link.WriteString('SERVER', 'USER NAME', 'sa');
    Link.WriteString('SERVER', 'PASSWORD', '');
    Link.Destroy;
  end;
  try
    Database1.Connected := false;
    Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
    ch := 'pos';
    if AliasEditor1.Exists(ch) = false then
      AliasEditor1.Add(ch, 'MSSQL', Memo1.Lines);
    Database1.AliasName := 'pos';
    Database1.DatabaseName := 'pos';
    Database1.Params.Text := 'DATABASE NAME=master';
    Database1.Params.Add('SERVER NAME=' + Link.Readstring('POS', 'SERVER NAME', '127.0.0.1'));
    Database1.Params.Add('USER NAME=' + Link.Readstring('POS', 'USER NAME', 'sa'));
    Database1.Params.Add('PASSWORD=' + Link.Readstring('POS', 'PASSWORD', ''));
    Link.Destroy;
    Database1.Connected := true;
    try
      Query1.Close;
      Query1.SQL.Text := 'use pos';
      Query1.ExecSQL;
    except
      try
        Query1.Close;
        Query1.SQL.Text := 'CREATE DATABASE [POS] ON (NAME = N' + #39 + 'POS_DATA' + #39 +
          ',FILENAME = N' + #39 + ExtractFilePath(Application.Exename) + 'POS_DATA.MDF' + #39 +
          ', SIZE=10,FILEGROWTH=10%) LOG ON (NAME =N' + #39 + 'POS_LOG' + #39 + ', FILENAME =N' +
          #39 + ExtractFilePath(Application.Exename) + 'POS_LOG.LDF' + #39 + ',SIZE=2, FILEGROWTH=10%)' + #13 + 'COLLATE CHINESE_PRC_CI_AS';
        Query1.ExecSQL;
        ResToFile('DatBase', 'FILE1', ExtractFilePath(Application.Exename) + 'LXF.DAT');
        Query1.close;
        Query1.SQL.Clear;
        Query1.SQL.Add('RESTORE FILELISTONLY FROM DISK = ' + #39 + ExtractFilePath(Application.Exename) + 'LXF.DAT' + #39);
        Query1.ExecSQL;
        Query1.close;
        Query1.SQL.Clear;
        Query1.SQL.Add('RESTORE DATABASE POS FROM DISK=' + #39 + ExtractFilePath(Application.Exename) + 'LXF.DAT' + #39 + ' WITH REPLACE,');
        Query1.SQL.Add('MOVE ' + #39 + 'POS_DATA' + #39 + ' TO ' + #39 + ExtractFilePath(Application.Exename) + 'POS_DATA.MDF' + #39 + ',');
        Query1.SQL.Add('MOVE ' + #39 + 'POS_LOG' + #39 + ' TO ' + #39 + ExtractFilePath(Application.Exename) + 'POS_LOG.LDF' + #39);
        Query1.ExecSQL;
      except
      end;
    end;
    Database1.Connected := false;
    Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
    Database1.AliasName := 'pos';
    Database1.DatabaseName := 'pos';
    Database1.Params.Text := 'DATABASE NAME=pos';
    Database1.Params.Add('SERVER NAME=' + Link.Readstring('POS', 'SERVER NAME', '127.0.0.1'));
    Database1.Params.Add('USER NAME=' + Link.Readstring('POS', 'USER NAME', 'sa'));
    Database1.Params.Add('PASSWORD=' + Link.Readstring('POS', 'PASSWORD', ''));
    Link.Destroy;
    Database1.Connected := true;
    Query1.close;
    Query1.sql.clear;
    Query1.sql.add('select * from mdda');
    Query1.Open;
except
    Application.MessageBox('连接数据库失败,请检查数据库是否启动' + #13 + '或配置文件Link.ini是否正确.', '错误', MB_OK + MB_ICONERROR);
    Application.Terminate;
  end;
  运行提示:
连接数据库失败,请检查数据库是否启动' ....... 
想请教高手几个问题:
1、我已经在SQL2000附加了server数据库文件,为什么还提示连接失败?
2、上面代码的意思不是说如果连接不了远程数据库,就建立本地POS数据库文件吗?怎么也创建不了?

解决方案 »

  1.   

    Link.ini参数如下:
    [POS]
    SERVER NAME=192.168.1.2
    USER NAME=sa
    PASSWORD=[SERVER]
    DATABASE NAME=pos
    SERVER NAME=127.0.0.1
    USER NAME=sa
    PASSWORD=
      

  2.   

    这段代码的第一个try..except间隔太远了,只要这之间出现错误就会提示“数据库连接失败”
      

  3.   

    建议把第一个try..except去掉,而在这加上try..except  Database1.Connected := false;
      Link := Tinifile.Create(ExtractFilePath(Paramstr(0)) + 'Link.ini');
      ch := 'pos';
      if AliasEditor1.Exists(ch) = false then
        AliasEditor1.Add(ch, 'MSSQL', Memo1.Lines);
      Database1.AliasName := 'pos';
      Database1.DatabaseName := 'pos';
      Database1.Params.Text := 'DATABASE NAME=master';
      Database1.Params.Add('SERVER NAME=' + Link.Readstring('POS', 'SERVER NAME', '127.0.0.1'));
      Database1.Params.Add('USER NAME=' + Link.Readstring('POS', 'USER NAME', 'sa'));
      Database1.Params.Add('PASSWORD=' + Link.Readstring('POS', 'PASSWORD', ''));
      Link.Destroy;
      try
        Database1.Connected := true;
      except
        Application.MessageBox('连接数据库失败,请检查数据库是否启动' + #13 + '或配置文件Link.ini是否正确.', '错误', MB_OK + MB_ICONERROR);
        Application.Terminate;  end;如果仍然报数据库连接失败 ,那你就要检查一下你的数据库设置了。