Archive for 01月, 2008

在程序运行的状态下 用鼠标移动窗体上的控件

Option Explicit
Dim a As Boolean     ‘ 这个变量记录了是否在按下状态
Dim oldx As Integer ‘ 这个变量记录了 未移动的X 位置
Dim oldy As Integer ‘ 这个变量记录了 未移动的Y 位置
Private Sub Frame1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
a = True        ‘鼠标在 框架上按下时候 记录已经按下
oldx = X        ‘同时记录当前位置 X
oldy = Y        ‘同时记录当前位置 Y
End Sub
Private Sub Frame1_MouseMove(Button As Integer, Shift As Integer, [...]

(转)在程序运行的状态下 用鼠标移动窗体上的控件

Option Explicit

Dim a As Boolean     ‘ 这个变量记录了是否在按下状态
Dim oldx As Integer ‘ 这个变量记录了 未移动的X 位置
Dim oldy As Integer ‘ 这个变量记录了 未移动的Y 位置
Private Sub Frame1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
a = True        ‘鼠标在 框架上按下时候 记录已经按下
oldx = X        ‘同时记录当前位置 X
oldy = Y        ‘同时记录当前位置 Y
End Sub
Private Sub Frame1_MouseMove(Button As [...]

SQL Server 2005关于数据类型最大值

事情开始得很简单。MegaWare公司市场部门想要一个新的网站来发布文档,开发 团队觉得使用SQL Server 2000数据库作为文档存储仓库会使事情变得简单。Steve是MegaWare的数据库管理员,没有看出这有什么大问题;在数据库中存储文档,而不是使 用文件系统,意味着服务器需要多做一些工作,但是它也会使得备份和管理容易得多。数据库与文件系统变得不同步也应该是不可能的。
  市 场部门想要存储的许多文档都超过了8000个字节,那么很明显VARCHAR不是适合这项工作的数据类型。作为替代,TEXT数据类型被用来定义存放数据 的字段。因为每个TEXT都能容纳2GB的内容,TEXT要存放市场部门的同事们扔进数据库的最大的文件也是没有问题的。
  数月过去了,市场用大量的无聊拷贝填满了整个数据库。但是这还不是Steve真正关心的问题。数据库愉快地嗡嗡作响地运转着,每个人对项目的结果都很满意。
   直到公司的标语改变的那个重大的日子。市场部的团队认为“MegaWare: It’s really cool!”要比原来的“It’s MegaWare’s Way or the Highway!” 听起来更好。因为市场部团队已经将原来的标语嵌入了仓库中每个文档的页脚上,现在Steve的工作就是更改所有这些文档的页脚。
  “没有问题,” Steve想,打开SQL Server 查询分析器工具,执行了如下的T-SQL批处理:
  UPDATE MarketingDocuments
  SET Document =
  REPLACE(Document,
  ’It’’s MegaWare’’s Way or the Highway!’,
  ’MegaWare: It’’s really cool!)
  当他看到出现的错误消息的时候,Steve的轻松的微笑很快消失了,“替换函数的参数1,text数据类型无效。”
   替换函数在编写出来的时候,就对TEXT数据类型不起作用。同样也对CHARINDEX或者SUBSTRING不起作用??或者至少是他们在超过8千个 字符的情况下不起作用。更进一步地讲,开发人员忘了处理TEXT或者IMAGE类型的本地变量;实际上不支持任何操作。即使是简单地更新一个文档中的一个 子字符串都需要用到晦涩的东西,以及难以使用的类似READTEXT和WRITETEXT的函数。而不是开发人员或者忙碌的数据库管理员因为想要弄清如何 正确使用而采用了不同类型的函数消耗了时间。
  SQL Server的开发人员很幸运,他们将会拨开乌云见蓝天。SQL Server 2005引入了一系列新的被称为MAX的数据类型。这是VARCHAR,NVARCHAR和VARBINARY类型的扩展,这几种类型以前被限制在 8000字节以下。MAX可以容纳高达2GB的数据,与TEXT和IMAGE一样??并且完全兼容所有的SQL Server内置的字符串函数。
  用MAX关键字定义一个某种MAX类型的变量与替代字符串的尺寸(为VARCHAR/NVARCHAR的时候)或者字节(为VARBINARY的时候)一样简单。
  DECLARE @BigString VARCHAR(MAX)
  SET @BigString = ‘abc’

  虽然这个变量可以自由地操纵,并且可以传递给任何的内置的字符串函数,兼容性仍然不是没有问题。首先,开发人员不能期望指定了尺寸的VARCHAR和VARBINARY变量在达到8000个字节的极限的时候可以自动“升级”到MAX版本。例如,如下的批处理:
  DECLARE @String1 VARCHAR(4001)
  DECLARE @String2 VARCHAR(4001)
  SET @String1 = REPLICATE(’1′, 4001)
  SET @String2 = [...]

(转)SQL Server 2005对海量数据处理

超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算。而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长。这不但影响着数 据库的运行效率,也增大数据库的维护难度。除了表的数据量外,对表不同的访问模式也可能会影响性能和可用性。这些问题都可以通过对大表进行合理分区得到很 大的改善。当表和索引变得非常大时,分区可以将数据分为更小、更容易管理的部分来提高系统的运行效率。如果系统有多个CPU或是多个磁盘子系统,可以通过 并行操作获得更好的性能。所以对大表进行分区是处理海量数据的一种十分高效的方法。本文通过一个具体实例,介绍如何创建和修改分区表,以及如何查看分区 表。
  1 SQL Server 2005
  SQL Server 2005是微软在推出SQL Server 2000后时隔五年推出的一个数据库平台,它的数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和 高性能的数据应用程序。此外SQL Server 2005结合了分析、报表、集成和通知功能。这使企业可以构建和部署经济有效的BI解决方案,帮助团队通过记分卡、Dashboard、Web Services和移动设备将数据应用推向业务的各个领域。无论是开发人员、数据库管理员、信息工作者还是决策者,SQL Server 2005都可以提供出创新的解决方案,并可从数据中获得更多的益处。
  它所带来的新特性,如T-SQL的增强、数据分区、服务代理和与.Net Framework的集成等,在易管理性、可用性、可伸缩性和安全性等方面都有很大的增强。
  2 表分区的具体实现方法
  表分区分为水平分区和垂直分区。水平分区将表分为多个表。每个表包含的列数相同,但是行更少。例如,可以将一个包含十亿行的表水平分区成 12 个表,每个小表表示特定年份内一个月的数据。任何需要特定月份数据的查询只需引用相应月份的表。而垂直分区则是将原始表分成多个只包含较少列的表。水平分 区是最常用分区方式,本文以水平分区来介绍具体实现方法。
  水平分区常用的方法是根据时期和使用对数据进行水平分区。例如本文例子,一个短信发送记录表包含最近一年的数据,但是只定期访问本季度的数据。在这种情况下,可考虑将数据分成四个区,每个区只包含一个季度的数据。
  2.1 创建文件组
  建立分区表先要创建文件组,而创建多个文件组主要是为了获得好的 I/O 平衡。一般情况下,文件组数最好与分区数相同,并且这些文件组通常位于不同的磁盘上。每个文件组可以由一个或多个文件构成,而每个分区必须映射到一个文件 组。一个文件组可以由多个分区使用。为了更好地管理数据(例如,为了获得更精确的备份控制),对分区表应进行设计,以便只有相关数据或逻辑分组的数据位于 同一个文件组中。使用 ALTER DATABASE,添加逻辑文件组名:
  ALTER DATABASE [DeanDB] ADD FILEGROUP [FG1]
  DeanDB为数据库名称,FG1文件组名。创建文件组后,再使用 ALTER DATABASE 将文件添加到该文件组中:
  ALTER DATABASE [DeanDB] ADD FILE ( NAME = N’FG1′, FILENAME = N’C:DeanDataFG1.ndf’ , SIZE = 3072KB , FILEGROWTH [...]

用Google作Web代理,突破连接障碍畅游互联网

通常,当你在查看一个网页时,你计算机上的浏览器软件就会连接到目标服务器,下载页面的数据,接着再将它呈现在你的面前。
  一般情况下,这确实是访问网站的优先方式,但有的时候,当你在办公室或学校里使用计算机时,你会发现这些场所的连接可能会阻止你连接到某些网站。  
         如果你碰到这样的情况,那么你就需要一个代理。代理是这样一种服务器,它能够连接到你那方列入黑名单服务器,并反馈给你所得结果。
  然而,你仍然需要直接访问代理服务器,因此,确保代理服务器本身不再黑名单之列是很重要的。有趣的是,Google作为一个不太可能被列入黑名单的主机,它本身就有一些工具能够有效地扮演一个web代理的角色。
  Google代理技巧1
  第一个工具就是Google的翻译功能。这项服务能够动态地下载和翻译任何你所要求的网页,当你在指定翻译的语 言之后,Google翻译就能够将目标文档呈现出来,就像使用一个简易的代理一样。过去人们想浏览一些无法访问的英文网页时,也许会将需要翻译的语言也设 置成英语,但这项功能现在似乎已经被Google移除了。但如果你设定的是“英语到中文(简体)”,那么即使你要翻译的页面原本就是中文的,你也能够得到 确切地文字。当然,如果是需要查看英语的网页也可以用同样的方法。如果你使用的是中文的过滤器,那么当你将鼠标移动在文本上方的时候,它就能呈现出原先语 言的文本。
  你可以将“http://66.249.93.104/translate_c?hl=zh-CN& langpair=en%7Czh-CN&u=http://www.myspace.com/”中的“www.myspace.com”替换成 其它因受阻而无法访问的站点。
  使用这个方法有一个缺陷,那就是它不能为你代理任何图像。这些仍然是直接从目标服务器读取,因此它们仍然会被过滤阻截,你只能看到一个具有文本的页面。
  Google代理技巧2
  第二个可被用作代理服务的Google工具就是Google Wireless Transcoder,这项功能的开发旨在让移动电话的浏览器能够查看网页。它能够下载目标站点的网页,也包括其中的图片,并对整个页面重新定制,以适应 一般移动电话的屏幕大小。而这一切过程都可以即时地完成。
  要使用它的话,你可以进入“http://www.google.com/gwt/n”这个页面,输入你想要查 看的网页。很快,你就可以看到你想要查看的页面的格式已经不再是原先的样子,只留下了非常简单的单一列的页面。你也能够看到,所有的图像都被调整成了适应 移动电话屏幕的大小。也许这样的页面略微有些质量下降,但这毕竟是Google从它的服务器上下载并提交出的调节后的版本。因此,如果你要访问的是一个列 入黑名单的站点,你也仍然能够查看到其中的图像,只不过它们要比正常的情况下尺寸要缩小一些罢了。
  此外,我发现大多数的网站在使用了Google Wireless Transcoder之后,看起来效果都还好。

(转)vb与网站进行交互,从应用程序提交数据到网站

程序思路:利用ASP的GET方法提交数据,并用INI文件方式获取数据和提交状态
实现方法:利用相关函数获取特定html源代码,从而也调用了此页面
利用获取http://123.com/123.asp?id=123
这样既获取了 http://123.com/123.asp?id=123的代码 又在内存中打开了http://123.com/123.asp?id=123这个网页 从而现实了GET方式提交数据
在窗体上添加一个 按钮和2个textbox
代码:
Option Explicit
‘强制声明变量
Private Declare Function GetPrivateProfileString Lib “kernel32″ _
Alias “GetPrivateProfileStringA” (ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long, _
ByVal lpFileName As String) As Long
‘读取INI文件函数,作用:获取数据提交结果
Dim httpurl As String ‘用来存放提交地址
Dim htmlcode As String ‘用来存放提交结果与获取HTML代码
Private Sub Command1_Click()
Dim urlstr As String
If Trim(Text1.Text) = “” [...]

(转)VB写WebBrowser捕捉信息(三)

第三部分   自动拨号、自动挂断以及自动处理中途掉线
     一个出色的“自动上网机器人”程序应能按照既定的时间准时开始拨号、并当所需任务已完成后立即挂断。而且仅做到这些还不够,它还应在发出拨号指令后跟踪拨号操作是否真的成功、上网速度如何、是否需要挂断后重新拨号、自动浏览过程中是否出现掉线、以及最终的挂断操作是否真的成功完成,等等。
     因此,“机器人”程序应定时检查在线状况,以保证浏览时一定在在线状态、浏览完毕后一定不在在线状态。同时还要检查浏览进度,当浏览速度过慢时尝试挂断后重新拨号。
     本部分讨论了实现“自动拨号”、“检查在线状况”、以及“自动挂断”这三个功能的若干方法,比较了诸方法各自的优劣,并总结给出了使用建议。本部分的示例程序将这三个功能的诸方法集成在一起,以便于大家对比使用(见下图)。

1. 自动拨号
    方法1A:使用rnaui.dll
     rnaui.dll是微软的“拨号网络用户接口”程序集,一般在“\Windows\System”目录下。其中的RnaDial程序用于启动拨号。该程序可在命令行执行(在“开始”->“运行”中键入):
    rundll32.exe rnaui.dll,RnaDial <拨号网络连接名>
     其中的“RnaDial”和“<拨号网络连接名>”是区分大小写的。
     但由于上述命令仅启动拨号窗口而未立即开始拨号,因此在程序中使用时还应再
送出模拟“回车”的按键:

ret = Shell("rundll32.exe rnaui.dll,RnaDial " + 连接名, 1)
[...]

(转)VB写WebBrowser捕捉信息(二)

第二部分   将网页上的二维表导入数据库
     在上一部分中,我们讨论了让程序自动在网上浏览并将所需的数据准确、快速地存储下来的方法。现在,我们将迎接更大的挑战:将网页上以表格形式存在的二维数据提取出来,并存成可直接导入数据库的“Microsoft Excel 逗号分隔值文件”(即.csv文件)。

     用手工在网页上直接提取类似上图中所示的表格数据是非常困难的。如果这样的表格有数十页甚至上百页之多,手工提取工作将是不可想象的,而且非常容易出错。
     本部分的实例是:将沪深两市全部约1100家个股的财务评分表数据(共54页,每页20家,如上图所示)快速、准确地转换成“.csv”文件。
1. 自动设置CheckBox的值
     由于只有注册用户才能访问上述财务评分表,因此实例程序首先演示了自动注册的功能。下图显示的是注册前以及自动注册后的画面。

     我们在上一部分中已讨论了自动填写输入区以及自动点击按钮等的方法。对于自动设置CheckBox值,其方法完全类似:首先要搜索到该CheckBox的名字,然后将该对象的Checked属性置为True或False即可。
2. 将网页上的二维表导入数据库
    首先定义一个IHTMLElementCollection对象用于收集网页上所有的 Table,然后用getElementsByTagName方法执行收集工作:

Dim Tables AsIHTMLElementCollection
    Set Tables = WebBrowser1.Document.getElementsByTagName("Table")

 
 
     一个网页上往往有多个 Table。我们用HTMLTable对象来处理每个Table:

Dim Table1 AsHTMLTable
[...]

(转)VB写WebBrowser捕捉信息(一)

       在大多数情况下,上网冲浪是件令人愉快的事情。但若是数百上千的超链接摆在你面前,而你又不得不一一点击这些链接、进入相应的网页、手工筛选出每页里你需要的信息、最后再将这些信息编进数据库中、….,你将做何感想?如果每天都从事这种繁杂、枯燥的工作会不会让你发疯?
     “自动上网机器人”或许可救你出“苦海”:你可以喝着咖啡、听着音乐、看着“机器人”辛勤地替你工作,那感觉是不是棒极了!
      本文结合实例详尽讨论了用VB实现“上网机器人”的技术细节。我们知道,搜集和下载资料是人们使用互联网的最主要的目的之一,但有些信息资源过于庞大,用手工摘取的方法是困难的或根本就是行不通的。例如,你需要搜集欧洲进口机械设备的公司名录以便给他们发信邀请其参加博览会,在网上找到这些信息并不难,但出于数据安全等方面的考虑,几乎所有提供类似信息的网站都没有提供直接下载数据的功能。
      要想搜集齐想要的数据,唯一可用的方法就是一页一页地浏览每个公司的信息页,摘取其中有用的数据并存入数据库。但当公司总数超过数千时,巨大的工作量会让任何人望而却步!其实,这浩大的工作完全可以由程序来完成,因为这些任务完全是机械的重复性工作。而且,用程序完成比用手工要快得多。本文涉及的技术细节是通用的,即对实例程序稍加修改就可完成任何“自动上网冲浪”任务。
     自动拨号上网、自动处理中途掉线、任务完成后自动挂断,这些都是“上网机器人”的最基本的功能之一。它还能给你带来明显的经济回报:如果你让“机器人”在晚间至凌晨的上网费优惠期内拨号上网去自动冲浪,那真可称得上是典型的“一石三鸟”—-你睡觉、它工作、还省钱!有关这方面的细节将在本文的第三部分里讨论。该部分提供了实现上述各功能的若干方法,并比较了这些方法各自的优劣。
     本文的第一和第二部分分别以两个实例讨论了自动浏览的技术细节:在网页上的输入区内自动填入数据以便完成诸如用户登录等的操作、自动更新CheckBox、自动选择下拉式列表(ComboBox)的值、自动点击网页上的按钮、从网页上精确提取有用的数据并存盘、将网页上二维表(Table)内的数据一一提取出来并转换且存储成可直接导入数据库或 Excel的格式,以及控制浏览进程的技巧等等。
第一部分   从网页上精确提取数据

[...]

利用WebBrowser获得页面部分数据

Internet Explorer 不只是一个程序,更是许多可重复使用组件的集合与容器。在拆取 Web 页时,最有意思的两个组件是 shdocvw.dll 和 mshtml.dll。第一个组件 shdocvw.dll,包含称为 WebBrowser 的 Microsoft(R) ActiveX(R) 控件,它真实地显示 Web 页。在运行 Internet Explorer 时,显示 Web 页的主窗口就是这样的控件。第二个组件 mshtml.dll,含有能分析 WebBrowser 控件中所包含文档的 HTML 分析器。
可能有这种情况,在您的应用程序内部,已经用 WebBrowser 控件来驻留 Web 页,但仍需要重新创建一个小浏览器来启动 Web 页的拆取。
在文件菜单上,请单击新建工程,以创建“标准 EXE”,然后在工程菜单上单击部件,以添加 Microsoft HTML Object Library 和 Microsoft Internet Controls。
在工具箱中,可看见 WebBrowser 组件。拖动其中之一,文本框和主窗体上的命令按钮。将此文本框的 Text 属性设置为 “http://www.asp001.net/test.htm”,将此命令按钮的 Caption 属性设置为“浏览(&B)”。
双击该命令按钮,然后在事件处理器中放入下列代码,导航至文本框中命名的 Web 站点:
Private Sub Command1_Click() [...]