如何得到SQL的服务器名和数据库名,当得到再把DELPHI内的ADOCONNECTION改成现在的服务器名
 目的,做一个注册档,如果现在安装的SERVER NAME 与原先不同,则在DELPHI前台修
改。

解决方案 »

  1.   

    一楼
    一般sql都默认安装,扫描局域网得到计算机名连计算机名就可以了。
    数据库名可以在master里创建一个表存放你的帐套。
      

  2.   

    procedure tform1.FindSQLServer;
    var
      SQLServer : Variant;
      ServerList : Variant;
      i,nServers : integer;
    begin
      Screen.Cursor := crHourGlass;
      try
       SQLServer := CreateOleObject('SQLDMO.Application');
        ServerList:= SQLServer.ListAvailableSQLServers;
        nServers:=ServerList.Count;
        try
          for i := 1 to nservers do
             cbDBServer.Items.Add(ServerList.Item(i));
        finally
          SQLServer := Null;
          ServerList := Null ;
        end;
      except
      end;
      Screen.Cursor := crDefault ;
      FindOk := True;
    end;
      

  3.   

    其中cbDBServer  为一个COMBOBOX,,
    注意要USES  ComCtrls。
      

  4.   

    adoconnection1 := TADOConnection.Create(nil);
      StrConn := 'Provider=SQLOLEDB.1;Password='+edtDBPassword.Text
           +';Persist Security Info=True;'
           +'User ID='+edtDBUser.Text+';Initial Catalog='
           +edtDBName.Text+';Data Source='+cbDBServer.Text;
      adoconnection1.ConnectionString := StrConn ;
      adoconnection1.LoginPrompt := False;
      adoconnection1.CommandTimeout := 5;
      try
        try
          adoconnection1.Connected := True;
        except
        end;
      finally
        if adoconnection1.Connected then
           Application.MessageBox('测试连接成功!','MicroSoft 数据库连接',MB_OK+MB_ICONINFORMATION)
        else begin
           Application.MessageBox('测试连接失败,用户名、密码或数据库名称错误!','MicroSoft 数据库连接',MB_OK+MB_ICONINFORMATION);
    //       edtDBUser.SetFocus;
        end;
        adoconnection1.Close;
        adoconnection1.Free;
      

  5.   

    用如下的操作吧
    uses AdoDb;var ds: wideString;
    begin
     ds := PromptDataSource(Application.Handle, '');
     showmessage(ds);
     //直接 Ado.ConnectionString := ds; 就可
    end;
      

  6.   

    很简单的几句,到上面去看看吧!http://www.ydsoftware.com/bbs/dispbbs.asp?boardID=6&ID=10
      

  7.   

    我想要的是做一個注冊界面,在EDIT內輸入SERVERNAME,SERVERPASS,DATANAME,
      

  8.   

    hhzqf1980(hh)已经说了,你变通一下就行了。
      

  9.   

    SQLServer := CreateOleObject('SQLDMO.Application');這句編譯不通過
      

  10.   

    hhzqf1980(hh)的方法可行,注意要USES  ComObj;
      

  11.   

    上面的说的都要在本机已经安装SQL的情况下才可以,用这个就不管它安装没有了:  NET_API_STATUS = DWORD;  PServerInfo100 = ^TServerInfo100;
      _SERVER_INFO_100 = record
        sv100_platform_id: DWORD;
        sv100_name: LPWSTR;
      end;
      {$EXTERNALSYM _SERVER_INFO_100}
      TServerInfo100 = _SERVER_INFO_100;
      SERVER_INFO_100 = _SERVER_INFO_100;
      {$EXTERNALSYM SERVER_INFO_100}const
      NERR_Success = 0;
      MAX_PREFERRED_LENGTH = DWORD(-1);
      SV_TYPE_SQLSERVER    = $00000004;function NetApiBufferAllocate(ByteCount: DWORD; var Buffer: Pointer):
      NET_API_STATUS; stdcall; external 'netapi32.dll' name 'NetApiBufferAllocate';function NetServerEnum(ServerName: LPCWSTR; Level: DWORD; var BufPtr: Pointer;
      PrefMaxLen: DWORD; var EntriesRead: DWORD; var TotalEntries: DWORD;
      ServerType: DWORD; Domain: LPCWSTR; ResumeHandle: PDWORD): NET_API_STATUS;
      stdcall; external 'netapi32.dll' name 'NetServerEnum';function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS; stdcall; external
    'netapi32.dll' name 'NetApiBufferFree';function GetSQLServerList(out AList: TStrings; pwcServerName: PWChar = nil;
      pwcDomain: PWChar = nil): Boolean;
    var
      NetAPIStatus: DWORD;
      dwLevel: DWORD;
      pReturnSvrInfo: Pointer;
      dwPrefMaxLen: DWORD;
      dwEntriesRead: DWORD;
      dwTotalEntries: DWORD;
      dwServerType: DWORD;
      dwResumeHandle: PDWORD;
      pCurSvrInfo: PServerInfo100;
      i, j: Integer;
    begin
      Result := True;
      try
        if  Trim(pwcServerName) = '' then
          pwcServerName := nil;    if Trim(pwcDomain) = '' then
          pwcDomain := nil;    dwLevel := 100;
        pReturnSvrInfo := nil;
        dwPrefMaxLen := MAX_PREFERRED_LENGTH;
        dwEntriesRead := 0;
        dwTotalEntries := 0;
        dwServerType := SV_TYPE_SQLSERVER;    
        dwResumeHandle := nil;               NetApiBufferAllocate(SizeOf(pReturnSvrInfo), pReturnSvrInfo);
        try
          NetAPIStatus := NetServerEnum(pwcServerName, dwLevel, pReturnSvrInfo,
            dwPrefMaxLen, dwEntriesRead, dwTotalEntries, dwServerType, pwcDomain,
            dwResumeHandle);      if (NetAPIStatus = NERR_Success) and (pReturnSvrInfo <> nil) then
          begin
            pCurSvrInfo := pReturnSvrInfo;        // 循环取得所有服务
            i := 0;
            j := dwEntriesRead;
            while i < j do
            begin
              if pCurSvrInfo = nil then
                Break;          with AList do
                Add(pCurSvrInfo^.sv100_name);          Inc(i);
              Inc(pCurSvrInfo);
            end;
          end;
        finally
          if Assigned(pReturnSvrInfo) then
            NetApiBufferFree(pReturnSvrInfo);
        end;
      except
        Result := False;
      end;
    end;调用:
    var
      i:integer;
      List:TStrings;
    begin
      List:=TStringList.Create;
      if GetSQLServerList(list) then
      begin
        for i:=0 to list.Count-1 do
           ComboBox1.Items.Add(list[i]);
        ComboBox1.ItemIndex:=0;
      end;
    end;
      

  12.   

    [email protected]
    給我個例子,謝謝