使用ini文件,安装客户机的时候修改ini文件就可以了,具体的做法我也不是很清楚,我也是初学delphi!不过以前做的程序就是这样处理的。:)

解决方案 »

  1.   

    就用ado,data source =远程服务器的名字,,没问题,,,速度有点慢
      

  2.   

    tadoquery1.ConnectionString = 'driver={SQL Server};Server=pcname;UID=sa;PWD=;Initial Catalog=mydb'
      

  3.   

    请看此贴:http://www.csdn.net/expert/topic/635/635887.xml?temp=.4133112
      

  4.   

    直接用ado加服务器名可以访问,这我知道,只是为什么这种方法时灵时不灵,有时根本看不到只服务器。是不是要配置两台机子所在的域啊??
      

  5.   

    luoxiangdong(罗向东) :
       管道的方法能不能把具体的写法告诉我。
    是不是在计算机名后面加':pipe'就可以了?
      

  6.   

    管道的方法我也不会,直接用ADO加服务器要确保客户机与服务器在同一个域
      

  7.   

    使用ADO连啊!
    连接串参数可以存在注册表里面;
    下面是注册表中的内容:
    Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\IEdu]
    "provider"="SQLOLEDB.1"
    "Persist Security Info"="False"
    "User ID"="sa"
    "password"=""
    "Initial Catalog"="IEdu"
    "Data Source"="INFO-38"
    "Use Procedure for Prepare"="1"
    "Auto Translate"="True"
    "Packet Size"="4096"
    "Workstation ID"="INFO-39"
    "Use Encryption for Data"="False"
    "Tag with column collation when possible"="False"
      

  8.   

    这个是程序中的部分
    希望能对你有所帮助
    uses TRegistry;
    procedure TUserInfo.RemoteDataModuleCreate(Sender: TObject);
    var
      regConn : TRegistry;
      strConn : String;
      sProvider : String;
      sPersist : String;
      sUserID : String;
      sPassword : String;
      sCatalog : String;
      sDS: String;
      sPrepare : String;
      sTranslate : String;
      sPacketSize : String;
      sWorkStation : String;
      sEncryption : String;
      sTag : String;
    begin
      //开始构造连接串
      //从注册表中读取连接参数
      regConn := TRegistry.Create;
      try
        regConn.RootKey := HKEY_CURRENT_USER;
        regConn.OpenKey('\Software\IEdu',False);
        sProvider := regConn.ReadString('Provider');
        sPersist := regConn.ReadString('Persist Security Info');
        sUserID := regConn.ReadString('User ID');
        sPassword := regConn.ReadString('Password');
        sCatalog := regConn.ReadString('Initial Catalog');
        sDS := regConn.ReadString('Data Source');
        sPrepare := regConn.ReadString('Use Procedure for Prepare');
        sTranslate := regConn.ReadString('Auto Translate');
        sPacketSize := regConn.ReadString('Packet Size');
        sWorkStation := regConn.ReadString('Workstation ID');
        sEncryption := regConn.ReadString('User Encryption for Data');
        sTag := regConn.ReadString('Tag with column collation when possible');
      finally
        regConn.Free;
        strConn := 'Provider=' + sProvider + ';Persist Security Info=' + sPersist + ';User ID=' +
        sUserID + ';Password=' +  sPassword + ';Initial Catalog=' + sCatalog + ';Data Source=' +
        sDS + ';Use Procedure for Prepare=' + sPrepare + ';Auto Translate=' + sTranslate + ';Packet Size=' +
        sPacketSize + ';Workstation ID=' + sWorkStation + ';User Encryption for Data=' + sEncryption +
        ';Tag with column collation when possible=' + sTag;
      end;  connMain.ConnectionString := strConn;
      connMain.Connected := True;
    end;
    procedure TUserInfo.RemoteDataModuleCreate(Sender: TObject);
    var
      regConn : TRegistry;
      strConn : String;
      sProvider : String;
      sPersist : String;
      sUserID : String;
      sPassword : String;
      sCatalog : String;
      sDS: String;
      sPrepare : String;
      sTranslate : String;
      sPacketSize : String;
      sWorkStation : String;
      sEncryption : String;
      sTag : String;
    begin
      //开始构造连接串
      //从注册表中读取连接参数
      regConn := TRegistry.Create;
      try
        regConn.RootKey := HKEY_CURRENT_USER;
        regConn.OpenKey('\Software\IEdu',False);
        sProvider := regConn.ReadString('Provider');
        sPersist := regConn.ReadString('Persist Security Info');
        sUserID := regConn.ReadString('User ID');
        sPassword := regConn.ReadString('Password');
        sCatalog := regConn.ReadString('Initial Catalog');
        sDS := regConn.ReadString('Data Source');
        sPrepare := regConn.ReadString('Use Procedure for Prepare');
        sTranslate := regConn.ReadString('Auto Translate');
        sPacketSize := regConn.ReadString('Packet Size');
        sWorkStation := regConn.ReadString('Workstation ID');
        sEncryption := regConn.ReadString('User Encryption for Data');
        sTag := regConn.ReadString('Tag with column collation when possible');
      finally
        regConn.Free;
        strConn := 'Provider=' + sProvider + ';Persist Security Info=' + sPersist + ';User ID=' +
        sUserID + ';Password=' +  sPassword + ';Initial Catalog=' + sCatalog + ';Data Source=' +
        sDS + ';Use Procedure for Prepare=' + sPrepare + ';Auto Translate=' + sTranslate + ';Packet Size=' +
        sPacketSize + ';Workstation ID=' + sWorkStation + ';User Encryption for Data=' + sEncryption +
        ';Tag with column collation when possible=' + sTag;
      end;
      //连接数据库
      connMain.ConnectionString := strConn;
      connMain.Connected := True;
    end;
      

  9.   

    下面是用INI的例子:
    procedure TNTMidas.RemoteDataModuleCreate(Sender: TObject);
    var
      connINI : TINIFile;
      pProvider : String;
      pPersist : String;
      pUser : String;
      pPassword : String;
      pCatalog : String;
      pSource : String;
      LocalDir:String;
      connString:String;
    begin
      getdir(0,LocalDir);
      connINI:=TINIFile.Create(LocalDir+'/'+'system.ini');
      pProvider := connINI.ReadString('ConnParams','Provider','0');
      pPersist := connINI.ReadString('ConnParams','Persist Security Info','0');
      pUser :=  connINI.ReadString('ConnParams','User ID','0');
      pPassword := connINI.ReadString('ConnParams','Password','0');
      pCatalog :=  connINI.ReadString('ConnParams','Initial Catalog','0');
      pSource :=  connINI.ReadString('ConnParams','Data Source','0');
      connString := 'Provider='+ pProvider+';Persist Security Info='+pPersist+';User ID'+ pUser+';Password='+ pPassword+';Initial Catalog'+ pCatalog +';Data Source'+ pSource;
      connMain.ConnectionString := connString;
      connMain.Connected := true;
      connINI.Free;
    end;
      

  10.   

    我的一个例子,很简单
    ini 文件内容:[server_options]
    sql_connNT=0   //是否nt验证server_name=
    DATAsource=data source=remote_server_name
    sql_user=sa
    sql_pass=Sqlserver_conn=Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=CRM;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096sqlserver_connNT=Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pmi;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=SERVER_1delphi 程序:procedure TFormMAIN.databaseconn(Sender: TObject);
     var CRMINI:tinifile;
        datasource,user,pass:string;
        filename:string;
    begin
      
      CRMINI:=tinifile.Create(extractfilepath(paramstr(0))+'***.ini');
     {登录数据库}
     TRY
      datamo.adoconn.close;
      if CRMINI.ReadBool('server_options','sql_connNT',false) then//判断服务器是采用什么登陆验证
        begin
         datamo.adoconn.ConnectionString:=CRMINI.ReadString('server_options','sqlserver_connNT','');
         datamo.adoconn.ConnectionString:=datamo.adoconn.ConnectionString+datasource;
         datamo.adoconn.open;
        end else
        begin
          user:=CRMINI.ReadString('server_options','sql_user','');
          pass:=CRMINI.ReadString('server_options','sql_pass','');
          filename:=CRMINI.ReadString('server_options','Sqlserver_conn','');
          datamo.ADOConn.ConnectionString:='';
          datamo.adoconn.ConnectionString:=filename;('server_options','Sqlserver_conn','');
          datamo.adoconn.ConnectionString:=datamo.adoconn.ConnectionString+datasource;
          datamo.adoconn.Open(user,pass);
        end;
      except
        showmessage('数据库登录失败,请检查登录参数,并确定sqlserver 服务已启动');
      end;
       CRMINI.Free;end;
      

  11.   

    如果客户端没装sqlserver的话就把
      Dbmssocn.dll    TCP/IP 支持文件 
       Dbmsspxn.dll    IPX 支持文件 
       Dbnmpntw.dll    命名管道支持文件 
       Ntwdblib.dll    SQLServer核心文件(这个文件最重要) 
    这4个文件复制到system目录,
    并在注册表添加:
     HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\ConnectTo:
       加入如下字符串值:
          建名         键值   
         servername   DBMSSOCN,servername,1433
                                  ^^ 服务器名称,也可以使ip     
      

  12.   

    使用ODBC,下面是我以前写的例子,这里是工程文件的源代码:var
      registerTemp : TRegistry;
      DriverStr:String;
      TcsKeyValue:String;
      TCSBCAODBC:Boolean;begin  registerTemp := TRegistry.Create; //建立一个Registry实例
      with registerTemp do
      begin
        RootKey:=HKEY_LOCAL_MACHINE; //设置根键值为HKEY_LOCAL_MACHINE    {检测系统是否注册}
        TcsKeyValue:='False';
        if OpenKey('Software\TCSBCASystem',False) then
          if ValueExists('TCSBCA') then
            TcsKeyValue:=ReadString('TCSBCA');
        CloseKey;    {如果系统没有注册}
        if TcsKeyValue='False' then
        begin
          {检测系统是否有SQL Server的ODBC驱动程序}
          if openkey('Software\ODBC\ODBCINST.INI\ODBC Drivers',false) then
          begin
            if not ValueExists('SQL Server') then
            begin
              ShowMessage('系统中没有装入SQL Server的ODBC驱动程序,无法启动程序');
              Closekey;
              halt;
            end;
            CloseKey;
          end
          else
          begin
            ShowMessage('系统注册表问题,无法启动程序');
            CloseKey;
            halt;
          end;      {读取SQL Server的驱动程序的存放位置}
          if Openkey('Software\ODBC\ODBCINST.INI\SQL Server',false) then
            DriverStr:=ReadString('Driver')
          else
          begin
            ShowMessage('读取系统中SQL Server的ODBC驱动程序有误,导致无法加载启动程序');
            Closekey;
            halt;
          end;
          CloseKey;      {检测系统是否创建TCSBCA_ODBC}
          if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',False) then
            if ValueExists('TCSBCA_ODBC1') then
              TCSBCAODBC:=True
            else
              TCSBCAODBC:=False;
          CloseKey;
          {创建TCSBCA_ODBC}      if not TCSBCAODBC then
            if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
            begin
               WriteString( 'TCSBCA_ODBC', 'SQL Server' );
               CloseKey;
            end
            else
            begin
              ShowMessage('写入系统注册表数据错误,无法加载启动程序');
              Closekey;
              halt;
            end;      if not TCSBCAODBC then
          begin
            if OpenKey('Software\ODBC\ODBC.INI\TCSBCA_ODBC',True) then
            begin
              WriteString( 'Database', 'TCSBCA_DB' );//指定数据库
              WriteString( 'Description', 'TCSBCA系统SQL Server数据源' ); //数据源描述
              //驱动程序DLL文件,根据系统安装的目录不同而不同。
              WriteString( 'Driver', DriverStr ); //驱动程序
              WriteString( 'LastUser', 'sa' );
              WriteString( 'Server', '(local)' );
              TCSBCAODBC:=True ;
              CloseKey;
            end
            else
            begin
              ShowMessage('写入系统注册表数据错误,无法加载启动程序');
              Closekey;
              halt;
            end;
          end;
          {向系统注册表写入系统注册信息}
          if OpenKey('Software\TCSBCASystem',True) then
          begin
            WriteString('TCSBCA','True');
            CloseKey;
          end
          else
          begin
            ShowMessage('写入系统注册表数据错误,无法加载启动程序');
            Closekey;
            halt;
          end;    end;  end;  if not DirectoryExists('Photo') then
      begin
        if not CreateDir('Photo') then
        begin
          ShowMessage('因无法创建 Photo 目录导致无法启动程序');
          halt;
        end;
      end;  if not DirectoryExists('StudentPhoto') then
      begin
        if not CreateDir('StudentPhoto') then
        begin
          ShowMessage('因无法创建 StudentPhoto 目录导致无法启动程序');
          halt;
        end;
      end;  if Not FileExists(ExtractFilePath(Application.ExeName)+'LocalMess.Px') then
      begin
        ShowMessage('重要数据文件丢失,无法启动程序');
        halt;
      end;  Application.Initialize;
      Application.Title := '北京建筑工程学院考试证管理系统';
      Application.CreateForm(TMainWindows, MainWindows);
      Application.Run;end.
      

  13.   

    然后在你的系统里使用此ODBC就可以了。