博文

用VB编写异步多线程下载程序(2005-10-03 09:25:00)

摘要:为了高效率地下载某站点的网页,我们可利用VB的Internet Transfer 控件编写自己的下载程序, Internet Transfer 控件支持超文本传输协议(HTTP) 和文件传输协议 (FTP),使用 Internet Transfer 控件可以通过 OpenURL 或 Execute 方法连接到任何使用这两个协议的站点并检索文件。本程序使用多个Internet Transfer 控件,使其同时下载某站点。并可判断文件是否已下载过或下载过的文件是否比服务器上当前的文件陈旧,以决定是否重新下载。所有下载的文件中的链接都做了调整,以便于本地查阅。   OpenURL 方法以同步方式传输数据。同步指的是传输操作未完成之前,不能执行其它过程。这样数据传输就必须在执行其它代码之前完成。   而 Execute 方法以异步方式传输数据。在调用 Execute 方法时,传输操作与其它过程无关。这样,在调用 Execute 方法后,在后台接收数据的同时可执行其它代码。   用 OpenURL 方法能够直接得到可保存到磁盘的数据流,或者直接在 TextBox 控件中阅览(如果数据是文本格式的)。而用 Execute 方法获取数据,则必须用 StateChanged 事件监视该控件的连接状态。当达到适当的状态时,调用 GetChunk 方法从控件的缓冲区获取数据。   首先,建立启始的http检索连接, Public g As Variant Public k As Variant Public spath As String Dim links() As String g = 0 spath = 本地保存下载文件的路径 links(0)=启始URL inet1.execute links(0), "GET" '使用GET方法。    事件监控子程序(每个Internet Transfer 控件设置相对应的事件监控子程序):   用StateChanged 事件监视该控件的连接状态, 当该请求已经完成,并且所有数据均已接收到时,调用 GetChunk 方法从控件的缓冲区获取数据。 Private Sub Inet1_StateChanged(ByVal State As Integer) 'State = 12 时,使用 GetChunk 方法检索服务器的响应。 Selec......

阅读全文(1798) | 评论:0

MSComm控件的属性(2005-10-03 09:24:00)

摘要:MSComm控件的属性(必须要熟悉的几个——CommPort:设置并返回通信端口号;Setting:以字符串的形式设置并返回数据传输速率、奇偶校验、数据比特、停止比特;PortOpen:设置并返回通信端口的状态,也可以打开和关闭端口;Input:从接收缓冲区返回和删除字符;Output:向传输缓冲区定一个字符串)1)CommPort属性void SetCommPort(short nNewValue); short GetCommPort();这一属性设置并返回连接的串行端口号,Windows将会利用该串口和外界通信。在设计时,nNewValue可以设置成从1~16的任何数(默认值为1)。但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。注意:必须在打开端口之前设置CommPort属性。2)Settings属性void Settings(LPCTSTR lpszNewValue); String GetSettings();该属性用于设置并返回数据传输速率、奇偶校验、数据比特、停止比特参数。当端口打开时,如果value非法,则MSComm控件产生错误380(非法属性值)。其中lpszNewValue用字符串表示,由四个设置值组成,有如下的组成格式:“BBBB,P,D,S”BBBB为数据传输速率,P为奇偶校验,D为数据比特,S为停止比特。Value的默认值是:“9600,N,8,1”,数据传输速率合法值可以是110、300、600、1200、2400、4800、9600、14400、19200、28800、38400、56000、57600、115200、12800、25600。奇偶校验值可以是设置为下表的任一值。设定值 描述E 偶校验(EVEN)M 标号校验(MARK)N 无校验(NONE)O 奇校验(ODD)S 空格校验(SPACE)数据比特数可以是4、5、6、7、8。停止比特数可以是1、1.5、2。注意:只有当通信的双方的Settings属性值都一样时,通信连接才能生效。3)Handshaking属性这一属性用于设置或者返回硬件握手协议,也就是PC和通信设备之间为了控制流速而设定的内部协议。属性值可以设置为下表中的任一个。设定值 值 描述ComNone 0 默认值,无握手协议comXOnXOff 1 XON/XO......

阅读全文(2802) | 评论:0

从零开始学vb数据库(2005-10-03 09:23:00)

摘要:几个常用的VB数据库概念:   表(Table):即关系数据库中物理存在的二维表。  记录集(RecordSet):表中的记录和执行一个查询而产生的记录组成了一个记录的集合。  SQL语言:一种数据库管理中的通用结构化查询语言。   如何建立一个完整的数据库文件:以VB6中文企业版为例  一、创建表   1.外接程序→可视化数据管理器→出现VisData窗口。工具栏上的前三个按钮,:一是“表类型记录集”,二是“动态集类型记录集”,三是“快照类型记录集”。选择“动态集类型记录集”。以这种记录集类型来访问VB数据库  2.文件→新建→MicroSoft Access→版本7.0MDB   3.选择数据库保存路径→数据库取名为 Myfile 保存  4.点击“数据库窗口”的Properties右键→新建表→弹出表结构对话框,表名称取名为 Phone表名: 显示表名称。字段列表:显示字段列表。 名称: 键入要添加的字段名。类型: 确定字段的操作和数据类型。 定长: 字段长度固定。大小: 确定字段的最大尺寸,以字节为单位。 变长: 字段长度可变。自动递增:自动更新下一列或行。允许零长:允许零长度字符串为有效字符串。顺序位置:确定字段的相对位置。 必要的: 指出字段是否要求非-Null值。验证文本:如果用户输入的字段值无效,应用程序显示的消息文本。验证规则:确定字段可以添加什么样的数据。添加字段:显示“添加”对话框。删除字段:删除选定的字段. 缺省值:确定字段缺省值。索引列表:列出可用的索引。 名称:键入索引名。主要的: 表的主索引。 唯一索引:这个索引项是唯一的。 外部:这个索引是表的外部键。忽略空值:含有Null 值的字段不包括在索引之中。必要的:指出索引是否需要非-空defNull@veendf3.chm 值。添加索引:显示“添加索引”对话框。 删除索引:删除选定的索引。生成表: 附加新表到当前数据库。  5.添加字段→显示“添加字段”对话框。名称=序号 → 类型=Long → 大小=4 → 位置1 →确定 → 反复这一过程名称=姓名 → 类型=text → 大小=8 → 位置2 →确定 → 反复这一过程名称=电话 → 类型=text → 大小=15→ 位置3 →确定 → 反复这一过程名称=地址 → 类型=text → 大小=30→ 位置4 →确定 → 反复这一过程  6......

阅读全文(12142) | 评论:0

Winsock“1服务器,N客户端”通讯程序(完整原程序)(2005-10-03 09:19:00)

摘要:TCP/IP集团通讯演示程序,在WIN98调试通过,详细请自行下载进行学习测试,程序大小4K下载地址:http://www.lshdic.com/download/lshdic/vb_winsock.zip代码浏览:Private Sub Check3_Click() '客户端二开启及中断对服务器的连接If Check3.Value = 1 ThenOn Error Resume Nextw3.RemoteHost = Text9.Text: w3.RemotePort = Text10.Text: w3.ConnectIf Err.Number <> 0 Then MsgBox "被连接的主机地址或连接端口号错误", vbCritical, "找不到服务器": Check3.Value = 0: Exit SubElseIf w3.State = 7 Then w3.SendData "职员2[" & w3.RemoteHostIP & "]终止连接,退出系统": DoEvents: Text11.Text = ""w3.CloseEnd IfEnd SubPrivate Sub Command1_Click() '服务器发送数据str0 = 0For i = 0 To w1.Count - 1DoEventsIf w1(i).State = 7 Then w1(i).SendData "企业管理员公告:" & Text4.Text: str0 = str0 + 1NextIf str0 = 0 Then MsgBox "未用客户正连接服务器,无法发送数据", vbCritical, "未有用户"End SubPrivate Sub Command2_Click() '客户端一发送数据If w2.State <> 7 Then MsgBox "未连接主机或连接主机工作正在进行,无法发送数据", vbCritical, "连接不正常": Exit Subw2.SendData "职员1:" & Text8.TextEnd SubPrivate Sub Command3_Click()If w3.State <> 7 Then MsgBox "未连接主机或连接主机工作正在进行,无法发送数据", vbC......

阅读全文(4411) | 评论:0

执行SQL脚本文件(.sql)的两种方法(2005-10-03 09:18:00)

摘要:Public Sub ExecuteSQLScriptFile(cn as ADODB.Connection,sqlFile As String)Dim strSql As String, strTmp As StringOpen sqlFile For Input As #1strSql = ""Do While Not EOF(1)Line Input #1, strTmpIf UCase$(strTmp) = "GO" Thencn.Execute strSqlstrSql = ""ElsestrSql = strSql & strTmp & vbCrLfEnd IfLoopIf strSql <> "" Then cn.Execute strSqlClose #1End Sub2.Public Sub ExecuteSQLScriptFile(cn as ADODB.Connection,sqlFile As String)Dim sql as string sql="master.dbo.xp_cmdshell ' osql -U username -P password -i " & sqlFilecn.execute sqlEnd Sub......

阅读全文(3020) | 评论:0

WINDOWS消息说明 (2005-10-03 09:17:00)

摘要:WINDOWS消息说明 消息,就是指 Windows 发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Wi n d o w s发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做 TagMSG,它在Windows单元中是这样声明的:typeTMsg = packed recordhwnd: HWND; //窗口句柄message: UINT; //消息常量标识符wParam: WPARAM; // 32位消息的特定附加信息lParam: LPARAM; // 32位消息的特定附加信息time: DWORD; //消息创建时的时间pt: TPoint; //消息创建时的鼠标位置end;消息中有什么?是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。lParam 通常是一个指向内存中数据的指针。由于WParam、lParam 和 Pointer 都是 32 位的,因此,它们之间可以相互转换。WM_NULL = $0000;WM_CREATE = $0001;应用程序创建一个窗口WM_DESTROY = $0002;一个窗口被销毁WM_MOVE = $0003;移动一个窗口WM_SIZE = $0005;改变一个窗口的大小WM_ACTIVATE = $0006;一个窗口被激活或失去激活状态;WM_SETFOCUS = $0007;获得焦点后WM_KILLFOCUS = $0008;失去焦点WM_ENABLE = $000A;改变enable状态WM_SETREDRAW = $000B;设置窗口是否能重画 WM_SETTEXT = $000C;应用程序发送此消息来设置一个窗口的文本WM_GETTEXT = $000D;应用程序发送此消息来复制对应窗口的文......

阅读全文(5642) | 评论:0

用代码创建数据库,表,字段(2005-10-03 09:15:00)

摘要:用代码创建数据库,表,字段Option ExplicitPrivate db As DatabasePrivate td As TableDefPrivate f As FieldPrivate Sub Command1_Click()Set db = DBEngine.CreateDatabase("d:\01.mdb", dbLangGeneral)Set td = New TableDefSet f = td.CreateField("NAME", dbText, 20)td.Fields.Append fSet f = td.CreateField("ID", dbText, 5)td.Fields.Append fSet f = td.CreateField("DEPARTMENTP", dbText, 60)td.Fields.Append ftd.Name = "class"db.TableDefs.Append tdSet db = NothingEnd Sub在列表框中显示该字段名你可以设一个变量,取得"该字段名",再添加到列表框中(加上循环),列表框的操作你可以看VB的帮助......

阅读全文(2967) | 评论:1

用VB6实现文件分割和还原(2005-10-03 09:14:00)

摘要:虽然目前个人大容量存储设备(如CD、MO等)已经被广泛应用,但是由于光盘刻录机等设备价格居高不下,所以人们最常用的存储媒介还是软盘。使用软盘就存在容量有限的问题,对于较大的文件必须将文件进行分割(让文件分割成方便的大小),才能用软盘拷贝和携带。目前,有许多软件具有此项功能,但由于在文件还原时,要求执行还原的机器也必须安装同样的软件才能执行还原操作,考虑到软件的授权问题,实现起来非常不方便。笔者用VB 6中的二进制双通道技术实现了该功能,只要运行该程序,即可方便地实现文件的分割和还原。 编程原理和思路 文件分割实际上就是将目标文件用二进制读写的方法,精确地连续保存为合适大小的独立文件的过程。文件还原是文件分割的逆过程,即将分割后的文件严格地按照分割顺序用二进制读写的方法写入同一个文件的过程。 使用双通道技术是因为当被分割的文件较大或者非常大(远大于内存)时,利用单个文件通道定义的内存二进制缓冲数组非常容易造成内存的耗尽而导致操作失败,并且单个文件通道的处理速度和可靠性也不令人满意。 首先使用双通道技术将目标文件分割成指定大小的文件,扩展名为“指定文件名+.源文件扩展名+.分割序号”。分割时,生成一个还原信息文件“被分割文件名.HY”,该文件记录文件分割的有关信息。文件还原时,同样利用双通道技术,按照在还原信息文件中登记的信息,将待还原的文件写入同一个文件中即可。 编程实现 实现分割功能的主要代码如下: 1.分割操作 Public Function SplitFile(SplitFileName As String, BeginningNumber As Long, ReturnErrorDes As String, Split As Long, oName As String) As Boolean /*分割文件函数返回一个逻辑值,true代表成功,false代表失败。参数依次是:被分割文件名、起始编号、返回错误信息、分割后文件大小、分割后文件名称*/ Dim SaveName As String /*文件通道变量*/ Dim fnum As Integer, fnum1 As Integer SplitFile = True /*初始化*/ On Error GoTo error1 Dim CurrentFile As SectionedFile, LngNumFi......

阅读全文(4475) | 评论:0

 VB数据类型(2005-10-03 09:13:00)

摘要: VB数据类型数据:是指能够输入到计算机中,并能够被计算机识别和加工处理的符号的集合。是程序处理的最小对象。例:数值、字符、图形、图像和声音等都是数据。数据在程序中以常量或变量的方式被引用,不同的数据特点有不同的存储要求和处理算法,数据类型这一概念可以用来区别不同的数据特点。VB中有系统定义的基本数据类型,而且允许用户根据需要定义自己的数据类型。1.基本数据类型(11种)数据类型 类型名 存储空间 范围 类型说明符整型 Integer 2字节 -32768~32767 %长整型 Long 4字节 -2147483648~2147483647 &单精度型 Single 4字节 -3.402823E38~-1.401298E-451.401298E-45~3.402823E38 !双精度型 Double 8字节 #货币型 Currency 8字节 -922337203685477.5808~922337203685477.5807 @字节型 Byte 1字节 0~255 字符串型 String 1~65535字节 $布尔型 Boolean 2字节 True 或False 日期型 Date 8字节 100.1.1~9999.12.31 对象型 Object 4字节 任何对象的引用 可变类型 Variant 可以成为上边所有类型 2.1.1 常量常量:在程序的执行过程中,其值保持不变的量。分常数和符号常量。1.一般常数*数值常数:123,1.23,1.0E2,12.5D3*字符串常数:”abc”,”你好”*逻辑常数:True False*日期常数:(用#括起来),#15/9/2002# #January 1,1993# #1 Jan 93# #2002-9-9 10:30:30 pm#常数的类型:在常数的后加类型说明符指定常数的类型如:-58& 3.1# 3.1@2.符号常量符号常量:在程序中用标识符表示的常数。分内部符号常量和用户定义符号常量用户定义符号常量的说明:格式:[ Public | Private ]Const<常量名> [ As <类型名>]=表达式例:Const pi=3.1415926Const pi2=pi*2Const max As Integer = 50*VB标识符的规定:1)以字母开头; 2)只能......

阅读全文(9323) | 评论:0

90%的男人是这样想的(2005-10-03 09:00:00)

摘要:1、90%的男人不愿陪老婆逛街,去了,90%也是被老婆拉走的。 2、90%的男人不愿去丈母娘家,去了,90%是为了家庭团结,给了老婆面子。 3、90%的男人都幻想有钱,有了钱后,要换、换、换,除了孩子,换掉所有的一切,可90%的什么也没换 4、90%的男人都喜欢看过情色小说或影象,但90%的会说很少看或不喜欢看或没有看过。 5、90%的男人都有性幻想,而90%的幻想的不是自己的老婆。 6、90%的男人愿意接近女性,想留下好印象,或成为护花使者,但90%的没有达到愿望。 7、90%的男人都自我感觉在各方面做的很好了,可90%的还被老婆指出一大堆毛病。 8、90%的男人看别人的老婆很顺眼,但90%的不敢靠近。 9、90%的男人不愿听老婆发唠叨,但90%还是听了。 10、90%的男人知道自己的缺点,可90%的改不了。 11、 90%的男人看到漂亮的女人,有90%的在想,她嫁给谁了,没有让我找到真是遗憾 12、90%的男人后悔结婚早了,有90%的说,如果现在结婚就是不是这样了。 13、90%的男人总感觉床上功夫很威风,但90%的对自己还是不满意。 14、90%的男人想去风流潇洒一回.可90%的怕出事不好交待. 15、90%的男人看到热恋中的人,卿卿我我,有90%的会说,让我再来一回 16、 90%的男人看了此贴不会回贴..其中又有90%是在灌水 ......

阅读全文(2130) | 评论:0