1、我要拨号到另外一台机器,然后联接其ASA8数据库,但是使用ASA客户端却无法搜索到,为什么?到你能不能通过拨号网络,ado 建立C/S结构。如何解决?着急最好有参考例程(100分)
2、假定1行不通。则我要拨号到另外一台机器,然后通过TCP/IP协议进行通讯,但是,由于我要分时拨号到好多的点去取数据,我不想搞好多个号码在windows上,我怎么动态建立拨号?过程:建立拨号——拨通拨号——通讯——挂机——删除建立的拨号。不要在Windows上搞出一大堆拨号联接然后程序调用。着急最好有参考例程(100)
3……提供相关例程,或者有价值信息(另外开贴给分100)

解决方案 »

  1.   

    如何将文件保存为扩展名为.xml的文件
      

  2.   

    >>1、我要拨号到另外一台机器,然后联接其ASA8数据库,但是使用ASA客户端却无法搜索到
    ASA我没用过,不知道是用什么方式连接的,但,如果局域网可以的话,拨号的区别就是慢点而已阿!!!不知道你为何不能>>你能不能通过拨号网络,ado 建立C/S结构。如何解决
    当然可以了,没有区别的>>:建立拨号——拨通拨号——通讯——挂机——删除建立的拨号
    修改原来就行,不用那么麻烦
      

  3.   

    1。创建新的拨号连接。
            参数:
        hwn      PROCEDURE TForm1.button1click(Sender:TObject);
          VAR dwhandle:word;
                aaa:integer;
          begin
            aaa:=getactivewindow();
            dwResult:=RasCreatePhonebookEntryA(handle,'');
            或DWresult:=RasCreatePhonebookEntryA(aaa,'');
            if dwResult=0 then
              memo1.lines.add('新建拨号连接成功!')
            ELSE
                memo1.lines.add('新建拨号连接失败!')      end;
      2.修改指定拨号连接的属性。
        Function RasEditPhonebookEntryA(hwnd:Thandle;lpszPhonebook:pchar;lpszEntryName:pchar):Dword;
          stdcall; {位于Interface的USES 下 TYPEend 之外}
        lpszEntryName(pchar):要修改的拨号连接的名称,如‘163’,‘169’等。
          函数返回值:0表示成功,否则为错误。
          例:PROcedure TForm1.button2click(Sender:TObject);
            如上。
      3.获取当前系统中可用的拨号连接名称.。
          在建立了拨号连接后,WIN9X将拨号连接的名称和属性写了注册表中,我们可以从注册表中可用的拨号连接名称
    及InterNet Explorer中的默认连接名称。
        在注册表的HKEY_USERS\.DEFAULT\RemoteACess\Address下,列出了已经在拨号网络中建立的拨号连接
    的名称及其属性设置,其中各项目的名称即为可用的拨号连接的名称;各项目的值即为各连接的属性设置.
      如果在InterNet Explorer 中设置了默认连接名称(Internet 选项=>>连接=>>设置=>>使用以下拨号网络连接)
    则在注册表的HKEY_USERS\.Default\RemoteAcess下,有一个字符串类型的键值,键值名InternetProfile,其值
    即为Internet Explorer中设置的默认连接名称.
      {在Uses中增加Registry单元,用于操作注册表}
        procedure TForm1.button3click(Sender:TObject);
        var 
          registrytemp:TRegistry;
          stringtemp:TStringlist;
          intindex:integer;
      begin
        registrytemp:=TRegistry.Create;
        stringTemp:=Tstringlist.Create;
        with registryTemp DO
            BEGIN
                RootKey:=HKEY_USERS;  //根键置为HKEY_USERS  
            //如果存在于子键.Default\RemoteAccess\Addresses
            if OpenKey('.Default\RemoteAccess\Addresses',false) then
              getValueNames(stringsTemp);  //读出各项目的名称,即拨号连接名称
              closekey;
            end;
          memo1.lines.add(  '************当前系统中有'+IntTostr(stringsTemp.count)'
                          +'各可用的拨号连接如下******');
          for intindex:=0 to stringsTemp.count-1 do
          memo1.lines.add(stringstemp.strings[intindex]); //列出Internet explorer中默认连接名称.
          if registrytemp.Openkey('.Default\RemoteAccess\Addresses',false') then
            mome1.lines.add('Internet explorer中默认连接名称为'+Registry.readstring('InternetProfile'));
          //释放内存
            RegistryTemp.free;
            StringsTemp.free;
      end;
    4.用指定的拨号连接拨号
        winexec('rundll32.exe rnaui.dll,RnaDial 163',SW_SHOWNORMAL);
        其中字符串中的最后一个参数'163'为拨号连接的名称.
          Procedure TForm1.botton4click(Sender:TObject);
          var 
            strDiaName:string;
          begin
          strDiaName:='163';
          memo1.lines.add('*****用拨号连接'+strDiaName+'实现拨号上网******');
          winexec('rundll32.exe rnaui.dll,RnaDial 163',SW_SHOWNORMAL);
          end;
      end;
      

  4.   

    主要看ras的相关api的实现,网上很多,不够出声!我以前也做过,代码太长,就没贴了
      

  5.   

    其实我有个很重要的问题是我的客户很'愚蠢'他不希望看到Windows的那个配置界面,因此,不论是创建还是修改都存在一个问题就是Windows的那个界面很难看也很'专业',我不想看到他。
      

  6.   

    >>其实我有个很重要的问题是我的客户很'愚蠢'他不希望看到Windows的那个配置界面
    ras 可以一切都在自己的代碼中修改啊! 
    沒有界面也可以的!!
      

  7.   

    试试看!还有一个问题:我如何从拨号端获得接入端的IP地址?
    能给一份源码参考么?
    [email protected]
      

  8.   

    to :aiirii(ari-爱的眼睛) 
    创建连接,和修改号码两个操作还是要调用界面得吧?
      

  9.   

    >>创建连接,和修改号码两个操作还是要调用界面得吧?
    看你的需要了, 如果是要用戶輸入用戶名, 密碼之類, 當然要界面, 
    or 你想顯示一個狀態信息!但也可什麼界面也沒有的操作, 用代碼就可完成一切!
      

  10.   

    To:aiirii(ari-爱的眼睛) 
    <<但也可什麼界面也沒有的操作, 用代碼就可完成一切!  //指点……
    还有一个问题:我如何从拨号端获得接入端的IP地址?
    能给一份源码参考么?
    [email protected]
      

  11.   

    我有一段拨号的原代码,也是以前一个前辈赠送的,如果你需要可以联系我,不知是否会对你有帮助。但我有个要求:无论是否对你有帮助,希望你以后也能试着去帮助一个陌生的程序员,至少一人次噢。然后告诉他这个要求。大家都是中国人又都学软件,最好有这种互相帮助的意识,早日“超印赶美”!希望别在你这儿断了链,更希望从你这里能多分出些“支路”!!
    我的Email: [email protected]
      

  12.   

    查注册表的问题我已经解决了,是可以不用查注册表。
    To : chinafriend_xj(江湖);谢谢!
      

  13.   

    现在的最大问题就是从拨号端获得接入端的IP地址。总不能让我左程序用UDP发广播找吧。
    ***************此贴即将截贴为解决问题另开贴解决。****************************
      

  14.   

    如果安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络管理程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的RAS系列函数来获取和设置拨号连接网络的信息。当然是可以获取拨号连接的动态IP地址了。在Delphi帮助文件中,有相关RAS函数的详细说明。---- 一、先解释一些要用到的数据常量和数据结构。constRAS_MaxDeviceType = 16;//设备类型名称长度RAS_MaxEntryName = 256;//连接名称最大长度RAS_MaxDeviceName = 128;//设备名称最大长度RAS_MaxIpAddress = 15;//IP地址的最大长度RASP_PppIp = $8021;//拨号连接的协议类型,该数值表示PPP连接typeHRASCONN = DWORD;//拨号连接句柄的类型RASCONN = record//活动的拨号连接的句柄和设置信息dwSize : DWORD;//该结构所占内存的大小(Bytes),一般设置为SizeOf(RASCONN)hrasconn : HRASCONN;//活动连接的句柄szEntryName : array[0..RAS_MaxEntryName] of char;//活动连接的名称szDeviceType : array[0..RAS_MaxDeviceType] of char;//活动连接的所用的设备类型szDeviceName : array[0..RAS_MaxDeviceName] of char;//活动连接的所用的设备名称end;TRASPPPIP = record//活动的拨号连接的动态IP地址信息dwSize : DWORD;//该结构所占内存的大小(Bytes),一般设置为SizeOf(TRASPPPIP)dwError : DWORD;//错误类型标识符szIpAddress : array[ 0..RAS_MaxIpAddress ] of char;//活动的拨号连接的IP地址end;---- 二、接着要解释要用到的两个RAS函数。//获取所有活动的拨号连接的信息(连接句柄和设置信息)function RasEnumConnections( var lprasconn : RASCONN ;//接收活动连接的缓冲区的指针var lpcb: DWORD;//缓冲区大小var lpcConnections : DWORD//实际的活动连接数) : DWORD; stdcall;function RasEnumConnections;external 'Rasapi32.dll'name 'RasEnumConnectionsA';//获取指定活动的拨号连接的动态IP信息function RasGetProjectionInfo(hrasconn : HRasConn;//指定活动连接的句柄rasprojection : DWORD;//RAS连接类型var lpprojection : TRASPPPIP;//接收动态IP信息的缓冲区var lpcb : DWord//接收缓冲区的大小) : DWORD;stdcall;function RasGetProjectionInfo;external'Rasapi32.dll' name 'RasGetProjectionInfoA';  这两个函数的返回值为0时表示执行成功,非0表示错误代码。---- 三、下面要讨论如何用上面的两个RAS函数获取拨号连接的动态IP地址----   首先,要用函数RasEnumConnections列出已建立的活动拨号连接的信息,其中包括连接名称、连接句柄、连接设备类型和设备名称;然后根据连接句柄用函数RasGetProjectionInfo获取连接对应的一个TRASPPPIP结构,其中包括一个成员属性szIpAddress即为动态IP地址。具体请参见以下程序片段和注释信息。procedure TForm1.Button1Click(Sender: TObject);constMaxConnections = 10;//假设最多有10个活动的拨号连接varconnections : array[0..MaxConnections-1] of RASCONN;//拨号连接数组longSize : dword;
    intAvailabelConnections : dword;//活动的拨号连接的实际数目intIndex : integer;
    strTemp : string;
    dwResult : DWORD;
    dwSize : DWORD;
    RASpppIP : TRASPPPIP;//活动的拨号连接的动态IP地址信息begin
    connections[ 0 ].dwSize := sizeof(RASCONN);
    longSize := MaxConnections * connections[ 0 ].dwSize;//接收活动连接的缓冲区大小intAvailabelConnections := 0;//获取所有活动的拨号连接的信息(连接句柄和设置信息)dwResult := RasEnumConnections( connections[ 0 ],longSize,intAvailabelConnections );if 0 < > dwResult then
     memo1.lines.add( '错误:' + inttostr( dwResult ) )
    else
    begin
    memo1.lines.add( '现有的活动连接有' +IntToStr( intAvailabelConnections ) + '个');//显示所有活动的拨号连接的信息(设置信息和动态IP地址)for intIndex := 0 to intAvailabelConnections - 1 do
    begin//显示一个活动的拨号连接的设置信息strTemp := '连接名称:'+ StrPAS( connections[ intIndex ].szEntryName )+ ',设备类型:'+ StrPAS( connections[ intIndex ].szDeviceType )+ ',设备名称:'+ StrPAS( connections[ intIndex ].szDeviceName );
    memo1.lines.add( strTemp );//显示一个活动的拨号连接的动态IP地址dwSize := SizeOf(RASpppIP);
    RASpppIP.dwSize := dwSize;
    dwResult := RASGetProjectionInfo( connections[ intIndex ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//获取动态IP地址
    if 0 < > dwResult then
     memo1.lines.add('错误:' + inttostr( dwResult ))
    else
    memo1.lines.add('动态地址:' + StrPas(RASpppIP.szIPAddress));
    end;
    end;end;