我们的客户A本身处在他们公司的一个大网内(可能是企业网),A要求我们帮他开发一套管理信息系统,我们用一台服务器(名字叫PROJECT),数据库存放在此服务器端,程序为C/S结构,用VB开发,A的客户端机器安装程序,访问PROJECT上的数据库,因此A的单机在PROJECT所属的局域网内,他在局域网内访问数据库是没有问题的,但A的机器同时又接在他们公司的一个大网内,他又要从大网上访问我们的服务器PROJECT,(我们的服务器PROJECT装了双网卡,有两个不同的IP地址,是个网关)现在是他从大网上连接我们的服务器PROJECT的数据库连接不上。我这属不属于远程访问数据库?不是在一个局域网内的。用远程访问可行吗?有没有其他更有效的办法?
多谢!

解决方案 »

  1.   

    Private Sub Command1_Click()Dim url As StringOn Error Resume Next '出错后继续If Text1.Text = "" Then MsgBox "请先输入关键字": Exit Sub '防止不输入关键词url = "http://search.chinese.yahoo.com/search/gb?p=" +Text1.Text '将关键词放入查询语句中Webbrowser1.Navigate url'调用浏览器显示查询结果End Sub  雅虎的查询语句比较简单,而对于比较复杂网站的查询语句一定要注意的是各个关键参数之间一定要用“&”来隔开。虽然你只是学会了这一招,但已经足够利用网上的资源来编写你的第一个程序了,因为网上所有类型的表单都能表示了,无论是查询股票、软件、书籍、图片,都不外乎这种模式。只要你将查询网页调入 Frontpage、Dreamwaver等所见即所得的网页编辑软件中,便会毫无遮拦的展现在你的面前,利用这些链接,再加上一个好的界面,当然可以制作自己的搜索工具软件了,不过要注意的是,有些表单的传送路径的是相对路径,这时要加上网站的地址链接。
      可能有人要说,这么简单,谁不知道,不是为了赚稿费吧?错。刚才的方法比起直接访问搜索站点的确能节省不少上网的时间,但并没有将程序的优势全部发挥出来,我们现在继续讲另外一种检索网页的方法:首先介绍一个控件Microsoft Internet Transfer(这个控件在安装vb或者某些程序的时候会自动安装),这个控件允许建立与其他计算机的链接,并传送文件。它使两个Internet规则 HTTP和FTP的使用变得容易。当正常访问一个网页时,Internent Transfer用GET命令访问网络浏览器的一个文件。例如,如果打开了URL http://www.cpcw.com/index.htm,浏览器将建立与地址在www.cpcw.com的机器的链接,并传送命令GET/index.htm。HTML 将通过链接以普通文本的方式返回,因为返回的内容只是所要的网页的源文件,节省了很多用于传送显示网页中图像的时间,速度要快了许多,但最重要的是我们可以很方便地使用自己的逻辑对凡会的源文件进行正确地分析和格式化,重新整理网页的查询结果。  我们还用刚才的窗体,只是要在菜单中选择“工程“-”部件“,在弹出的对话框中找到一项是:Microsoft Internet Transfer Control,选中后,在工具栏中您就会发现增添了一个显示有地球和计算机的小按钮,双击这个按钮会在窗体上加入一个 Internet Transfer实例Inet1,完成了这些步骤后,窗体应如图一所示。现在准备在实例工程中加入代码。  Internet Transfer控件有一个事件StateChanged。这个事件的目的是当不同的操作发生时通知用户程序。例如:控件在与网络服务器链接时是一种状态,检索HTML是另一种状态。当前的状态用事件过程的State 参数来表示。在示例程序的StateChanged事件中输入如下代码:Private Sub Inet1_StateChanged(ByVal State As Integer)Select Case StateCase 12 '表明网络连接检索正常stemp=Inet1.GetChunk(1024) '使用GetChunk方法从缓冲区中一次提取1024个字节的回应文本,并存放在stemp临时变量中While stemp<>””'当仍然返回信息时LastResult=LastResult+stemp'将整个网页的源文件代码放入LastResult变量中stemp=Inet1.GetChunk(1024)'循环WendCase 11MsgBox "未返回搜索结果"End SelectEnd Sub尽管StateChanged事件包含了这个示例程序代码的主要部分,我们仍然需要在Command1的Click事件中加入代码,以初始化这个请求。下面就是这段代码:` Private Sub Command1_Click()url = "http://search.chinese.yahoo.com/search/gb?p=" +Text1.TextInet1.protocol=icHTTP'指明控件协议类型Inet1.Execute CStr(url),”GET /” '发出请求While Inet1.StillExecutingDoEventsWendEnd Sub  前面已经提到,以这种方法返回的信息包含了搜索的结果网页,同直接搜索的区别就是由于这样返回的就是源代码,暂时存储到一个临时变量中,这样一来,你既可以将返回的信息直接存储到一个文件中,另一种方法,这就是我们下面要提到的对代码的优化处理。  什么叫对代码的优化处理呢?因为返回的结果中包含许多其他没有什么用处的修饰,比如表格、banner、menta等等信息,而这些信息并不是我们需要的,去掉这些信息,只保留对我们来说有用的结果,这就是优化。那么怎样优化呢?分析HTML语法您就会看到,许多信息都是包含在一些关键词之间。举个例子:对于插入的图片来说,都是用”<img src=” 来开头,用往后遇到的第一个”>”来结尾,这样一来就清楚了,只要把代码中所有的满足以上条件的语句删掉,这样代码中就不会出现直接图片信息,我们参考以下的一段代码:Public Function picFilter(downCode)'定义一个过滤图片信息的过程Dim pStart As Long, pStop As LongDim pString1 As String, pString2 As StringpString1 = "<img"pString2 = ">" '分别将两个关键词定义pStart = InStr(downCode, pString1)'找到第一个图片信息的起始位置If pStart <> 0 Then '如果代码中有图片信息的话pStop = InStr(pStart, downCode, pString2) + 1 '从上面找的起始部位开始找到第一个用于结束图片信息的”>”Do While pStart <> 0 '只要仍旧有图片信息Mid(downCode, pStart, pStop - pStart) = Space(pStop - pStart) '将代码中的图片信息用空格代替,实现删除效果pStart = InStr(pStop, downCode, pString1)'重复上面的过程,删除其他的图片信息If pStart = 0 Then Exit Do '没有图片信息后,退出循环pStop = InStr(pStart, downCode, pString2, 1) + 1LooppicFilter=downCode '将处理过后的代码返回过程函数End Function接下来只要使用lastResult=picFilter lastResult就实现了对临时变量中搜索结果代码的图片信息去除工作,以此类推,很容易去掉诸如”<font”、”<b”等信息。  上面所说的是一种方法,但我们知道HTML语法中关键词很多,如果都用以上的条件过滤的话,会使程序的效率大大降低,运行速度也会减慢很多。有没有更好的方法?有,如果是有心人的话,您就会发现不同的搜索引擎返回的结果有其独特的编排方式,我们仍旧以雅虎为例,你只要察看其返回的结果源代码就会发现:每一条信息的链接和主题部分排列都是以“<LI>”开始,以“<A>”结束,而在“<A>” 和接下来的第一个“<”之间的部分是该主题的简单描述,这样我们可以用下面的代码来将雅虎搜索结果代码中的有用信息提炼起来:Public Function yahooFilter(downCode)Dim sString1 As String, sString2 As String, sString3 As StringDim sStart As Long, sStop As LongDim string1 As String, string2 As String, lastString as stringsString1 = "<LI>"sString2 = "</A>"sString3 = "<"sStart = InStr(downCode, sString1)'取得第一条主题信息的起始位置Do While sStart <> 0sStop = InStr(sStart, downCode, sString2)string1 = Mid(downCode, sStart + 4, sStop - sStart) '将第一条主题信息存放在string1变量中sStart = InStr(sStop, downCode, sString1) '从第一条主题信息的结束部位开始查找该主题的简单描述sStart = sStop + 4sStop = InStr(sStart, downCode, sString3) '取得该主题描述部分的结束位置If sStop = sStart Then '判断只有主题而没有描述的信息string2 = ""ElseIf sStop <> sStart Thenstring2 = Mid(downCode, sStart, sStop - sStart - 1) '取出主题描述部分End IflastString = lastString + "<p>" + string1 + string2 '将提炼的结果存放在临时变量中sStart = InStr(sStop, downCode, sString1)'重新定位下一条信息的起始位置Loop'循环yahooFilter = lastString'End Function