Server Name == HostName ==>机器名或IP
可以用将求出Lan的所有的Domain和Domain中的机器名,让用户选择,
如果不想让用户选择,可以一台一台的用ClientSocket来试(Port=1433(Server中的Port))
成功了就可以连接赋值给ServerName and HostName,  然后连接到master数据库,
if not exists(Select * from sysdatabases where name='mydatabasename') create database mydatabasename
go
use mydatabasename
create table 
select table
update table
...至于动态求domain和machine in domain 可以找一下,很多人回答过

解决方案 »

  1.   

    有求ServerName and HostName代码吗?
      

  2.   

    copy&paste给你uses
      WinSock, ShellApi;不记得了那么多单元了,用GetServerList时,try一下,有时会因为没有连接到domain会raise;type
      PNetResourceArr = ^TNetResource;procedure GetServerList(List:TStrings);
    Type
      {$H+}
      PMyRec = ^MyRec;
       MyRec = Record
                 dwScope       : Integer;
                 dwType        : Integer;
                 dwDisplayType : Integer;
                 dwUsage       : Integer;
                 LocalName     : String;
                 RemoteName    : String;
                 Comment       : String;
                 Provider      : String;
               End;
      {H-}
    Var
      NetResource : TNetResource;
      TempRec     : PMyRec;
      Buf         : Pointer;
      Count,
      BufSize,
      Res         : DWORD;
      lphEnum     : THandle;
      p           : PNetResourceArr;
      i,
      j           : SmallInt;
      NetworkTypeList : TList;
    begin
      NetworkTypeList := TList.Create;
      List.BeginUpdate;
      List.Clear;
      GetMem(Buf, 8192);
      Try
        Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
        If Res <> 0 Then Raise Exception(Res);
        Count := $FFFFFFFF;
        BufSize := 8192;
        Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
        If Res = ERROR_NO_MORE_ITEMS Then Exit;
        If (Res <> 0) Then Raise Exception(Res);
        P := PNetResourceArr(Buf);
        For I := 0 To Count - 1 Do
        Begin
          New(TempRec);
          TempRec^.dwScope := P^.dwScope;
          TempRec^.dwType := P^.dwType ;
          TempRec^.dwDisplayType := P^.dwDisplayType ;
          TempRec^.dwUsage := P^.dwUsage ;
          TempRec^.LocalName := StrPas(P^.lpLocalName);
          TempRec^.RemoteName := StrPas(P^.lpRemoteName);
          TempRec^.Comment := StrPas(P^.lpComment);
          TempRec^.Provider := StrPas(P^.lpProvider);
          NetworkTypeList.Add(TempRec);
          Inc(P);
        End;
        Res := WNetCloseEnum(lphEnum);
        If Res <> 0 Then Raise Exception(Res);
        For J := 0 To NetworkTypeList.Count-1 Do
        Begin
          TempRec := NetworkTypeList.Items[J];
          NetResource := TNetResource(TempRec^);
          Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
          If Res <> 0 Then Raise Exception(Res);
          While true Do
          Begin
            Count := $FFFFFFFF;
            BufSize := 8192;
            Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
            If Res = ERROR_NO_MORE_ITEMS Then Break;
            If (Res <> 0) Then Raise Exception(Res);
            P := PNetResourceArr(Buf);
            For I := 0 To Count - 1 Do
            Begin
              List.Add(P^.lpRemoteName);
              Inc(P);
            End;
          End;
        End;
        Res := WNetCloseEnum(lphEnum);
        If Res <> 0 Then Raise Exception(Res);
        Finally
          FreeMem(Buf);
          NetworkTypeList.Destroy;
      End;
      List.EndUpdate;
    end;//FServer就是上面用GetServerList得到的域名,list是回传,如Listbox1.items,combobox1.items
    procedure GetUserList(fServer:string;List:TStrings);
    Var
      NetResource : TNetResource;
      Buf         : Pointer;
      Count,
      BufSize,
      Res         : DWord;
      Ind         : Integer;
      lphEnum     : THandle;
      Temp        : PNetResourceArr;
    Begin
      List.Clear;
      GetMem(Buf, 8192);
      Try
        FillChar(NetResource, SizeOf(NetResource), 0);
        NetResource.lpRemoteName := @fServer[1];
        NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;
        NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
        NetResource.dwScope := RESOURCETYPE_DISK;
        Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
        If Res <> 0 Then Exit;
        While True Do
        Begin
          Count := $FFFFFFFF;
          BufSize := 8192;
          Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
          If Res = ERROR_NO_MORE_ITEMS Then Exit;
          If (Res <> 0) then Exit;
          Temp := PNetResourceArr(Buf);
          For Ind := 0 to Count - 1 do
          Begin
            List.Add(Temp^.lpRemoteName + 2); { Add all the network usernames to List StringList }
            Inc(Temp);
          End;
        End;
        Res := WNetCloseEnum(lphEnum);
        If Res <> 0 Then Raise Exception(Res);
      Finally
        FreeMem(Buf);
      End;
    End;