社区
VB基础类
帖子详情
如何将VB的Type定义的结构类型变量加入到Collection中?(无内容)
hjd
2000-01-29 07:30:00
...全文
84
1
打赏
收藏
如何将VB的Type定义的结构类型变量加入到Collection中?(无内容)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cool
2000-01-30
打赏
举报
回复
以上
非Access数据库在
VB
中
的编程及应用
存取对象
变量
库
结构
作为一个功能较完备的Windows软件开发平台,Visual Basic专业版提供了对数据库应用的强大支持。尤其提供了使用数据控件和绑定控制项,使用数据库存取对象
变量
(Data Access Object Variable),直接调用ODBC 2.0 API接口函数等三种访问数据库的方法。对其标准内置的Ms Access数据库,它可以提供不弱于专业数据库软件的支持,可以进行完整的数据库维护、操作及其事务处理。在
VB
中
,将非Access数据库称为外来数据库。对于FoxPro、dBASE、Paradox等外来数据库。虽然借助
VB
的Data Manager 能够对这些数据库进行NEW、OPEN、DESIGN、DELETE等操作,但在应用程序的运行状态
中
并不能从底层真正实现这些功能。本文从使用数据库存取对象
变量
的方法出发,实现了非Access格式数据库(以FoxPro数据库为例)的建新库、拷贝数据库
结构
、动态调入等操作,阐述了从编程技巧上弥补
VB
对这些外来数据库支持不足的可行性 。 一 、
VB
数据库的体系
结构
具体的
VB
的数据库
结构
。
VB
数据库的核心
结构
是所谓的MicroSoft JET数据库引擎,JET引擎的作用就像是一块"面 板",在其上可以插入多种ISAM(Indexed Sequential Access Method,即索引顺序存取方 法) 数据驱动程序。JET引擎为Access格式数据库提供了直接的内部(build-in)支持,这就是
VB
对Access数据库具有丰富支持的真正原因。
VB
专业版
中
提供了FoxPro、dBASE(或 Xbase)、Paradox、Btrieve等数据库的ISAM驱动程序,这就使得
VB
能支持这些数据库格 式。另外,其他的许多兼容ISAM的驱动程序也可以通过从厂商的售后服务得到。因而从理论上说,
VB
能支持所有兼容ISAM的数据库格式(前提是只需获得这些数据库的ISAM驱动接口程序)。 由上可见,Ms JET引擎实质上提供了:一个符合ANSI标准的语法分析器;为查询结果集的使用而提供的内存管理功能;同所支持的数据库的外部接口;为应用代码提供的内部接口。实际上,在
VB
中
从一种数据库
类型
转化为另一种数据库
类型
几乎不需要或只需要很少的代码修改。而且,尽管dBASE、Paradox本身的DDL (Data Definition Language,即数据
定义
语言)和DML(Data Manipulation Language,即数据操纵语言)是非
结构
化查询的,但它们仍然可以使用
VB
的SQL语句和JET引擎来操纵。 从
VB
的程序代码的角度来看,ODBC,ISAM驱动程序以及Ms Access数据库的整个外部
结构
够可以统一为一个一致的编程接口。也即是说,提供给
VB
应用程序员的记录集对象视图同所使用的数据库格式及
类型
是相互独立的。即对FoxPro等数据库仍然可以使用众多的数据库存取对象
变量
,这就为非Access数据库的访问提供了最重要的方法。 二 、使用非Access数据库时的参数设置及配置文件的参数读取如果在
VB
的程序
中
使用了数据库的操作,将应用程序生成EXE文件或打包生成安装程序后,则必须提供一个配置 (.INI)文件,在INI文件
中
可以对不同
类型
的数据库进行设置。如果找不到这个INI文件, 将会导致不能访问数据库。通常情况下,INI文件的文件名和应用程序的名称相同,所以如果没有指明,
VB
的程序会在Windows子目录
中
去找和应用程序同名的INI文件。可以使用
VB
中
的SetDataAccessOptions语句来设置INI文件。 SetDataAccessOptions语句的用法如下:SetDataAccessOptions 1 ,IniFileName其
中
IniFileName参数指明的是INI文件的带路径的文件名。值得注意的是,当应用程序找不到这个INI文件时,或在调用 OpenDataBase函数时对其Connect参数值没有设定为
VB
规定的标准值,如对FoxPro 2.5格式设定为了" FoxPro;"(应为" FoxPro 2.5; "),或者没有安装相应的ISAM驱动程序,则此时
VB
会显示一条错误信息" Not Found Installable ISAM "。通常,INI文件在应用程序分发出去以前已经生成,或者在安装时动态生成,也可以在应用程序
中
自己生成。 通常这种 INI文件
中
有" [Options]"、"[ISAM]"、" [Installed ISAMs]"、"[FoxPro ISAM]"、"[dBASE ISAM] " 、" [Paradox ISAM] "等设置段,对于一个完整的应用程序则还应有一个属于应用 程序自己的设置段如" [MyDB]”。可在其
中
设置Data
Type
、Server、DataBase、 OpenOnStartup、DisplaySQL、QueryTimeOut等较为重要的数据库参数,并以此限定应用程序一般的运行环境。 Windows API接口函数在Kernel.exe动态链接库
中
提供了一个OSWritePrivateProfileString函数,此函数能按Windows下配置文件(.INI)的书写格式写入信息。 在通常情况下,应用程序还需要在运行时读取配置文件内相关项的参数。比如PageTimeOut(页加锁超时时限)、MaxBufferSize(缓冲区大小)、LockRetry(加锁失败时重试次数)等参数,通过对这些参数的读取对应用程序运行环境的设定、潜在错误的捕获等均会有很大的改善。 设此应用程序的配置文件为MyDB.INI,则具体过程如下:Funtion GetINIString$( Byval Fname$ ,Byval szItem$ ,Byval szDeFault$ ) ' 此自
定义
子函数实现INI 文件内设置段内参数的读取Dim Tmp As String,x As Integer Tmp = String( 2048,32 ) x = OSGetPrivateProfileString(Fname$,szItem$ , szDefault$,Tmp,Len(Tmp) ," MyDB.INI " ) GetINIString = Mid$( Tmp,1,x ) EndFunction以下这些函数的声明可写在模块文件内,且每个函数的声明必须在一行内Declare Function OSGetPrivateProfileString% Lib "Kernel" Alias "GetPrivateProfileString" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal ReturnString$, ByVal NumBytes As Integer, ByVal FileName$) Declare Function OSWritePrivateProfileString% Lib "Kernel" Alias "WritePrivateProfileString" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal FileName$) Declare Function OSGetWindowsDirectory% Lib "Kernel" Alias "GetWindowsDirectory" (ByVal a$, ByVal b%) Sub Form1_Load( ) Dim st As String Dim x As Integer Dim tmp As String tmp = String$( 255, 32 ) ' INI文件内为各种数据库格式指明已安装的相应ISAM驱动程序x = OSWritePrivateProfileString(" Installable ISAMS", "Paradox 3.X", "PDX110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "dBASE III", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "dBASE IV", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "FoxPro 2.0", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "FoxPro 2.5", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "Btrieve", "BTRV110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "dBase ISAM", "Deleted", "On", "MyDB.INI" ) ' 指明 INI文件的位置x = OSGetWindowsDirectory( tmp, 255 ) st = Mid$( tmp, 1, x ) SetDataAccessOption 1, st + "\mydb.ini" '获得INI文件一些参数 gwMaxGridRows = Val(GetINIString( " MyDB.INI " ,"MaxRows", "250" )) glQueryTimeout = Val(GetINIString( " MyDB.INI " ,"QueryTimeout", "5" )) glLoginTimeout = Val(GetINIString( " MyDB.INI " ,"LoginTimeout", "20" )) End Sub 三 、数据存取对象
变量
对外来数据库编程的方法及其实例在
VB
专业版数据库编程的三种方法
中
,第二种-使用数据库存取对象
变量
(DAO)的方法最具有功能强大、灵活的特点。 它能够在程序
中
存取ODBC 2.0的管理函数;可以控制多种记录集
类型
:Dynaset,Snapshot 及Table记录集合对象;可以存储过程和查询动作;可以存取数据库集合对象,例如 TableDefs,Fields,Indexes及QueryDefs;具有真正的事物处理能力。因而,这种方法对数据库处理的大多数情况都非常适用。 由于
VB
中
的记录集对象与所使用的数据库格式及
类型
是相互独立的,所以在非Access数据库
中
也可以使用数据库存取对象
变量
的方法。因而 对FoxPro等外来数据库而言,使用数据库存取对象
变量
的方法同样也是一种最佳的选择。 有一点需要注意的是,
VB
的标准版
中
仅能使用数据控件(Data Control)对数据库
中
的记录进行访问,主要的数据库存取对象
中
也仅有Database、Dynaset对象可通过数据控件的属 性提供,其它的重要对象如TableDef、Field、Index、QueryDef、Snapshot、Table等均不能在
VB
的标准版
中
生成,所以使用数据存取对象
变量
的方法只能用
VB
3.0以上的专业版。 (一)、非Access数据库的新建及库
结构
的修改
VB
专业版
中
的数据库存取对象
变量
可以分为两类,一类用于数据库
结构
的维护和管理,另一类用于数据的存取。其
中
表示数据库
结构
时可以使用下面的对象: DataBase、TableDef、Field、Index,以及三个集合 (
Collection
): TableDefs、Fields和Indexes 。每一个集合都是由若干个对象组成的,这些数据对象的集合可以完全看作是一个数组,并按数组的方法来调用。一旦数据库对象建立后,就可以用它对数据库的
结构
进行修改和数据处理。对于非Access数据库,大部分都是对应于一个目 录,所以可以使用
VB
的MkDir语句先生成一个目录,亦即新建一个数据库。而每一个非 Access数据库文件可看作是此目录下的一个数据表(Table),但实际上它们是互相独立的。 下面是新建一个FoxPro 2.5格式数据库的程序实例。 Sub CreateNew ( ) Dim Db1 As database , Td As TableDefs Dim T1 As New Tabledef , F1 As New Field , F2 As New Field , F3 As New Field Dim Ix1 As New Index Dim Path As String Const DB_TEXT = 10 , DB_INTEGER = 3 ChDir "\" Path$ = InputBox( " 请输入新路径名: ", "输入对话框" ) MkDir Path$ ' 新建一个子目录Set Db1 = OpenDatabase(Path$, True, False, "FoxPro 2.5;") Set Td = Db1.TableDefs T1.Name ="MyDB" '新建一个数据表,数据表名为MyDB F1.Name = "Name" , F1.
Type
= DB_TEXT , F1.Size = 20 F2.Name = "Class" , F2.
Type
= DB_TEXT , F2.Size = 20 F3.Name = "Grade" , F3.
Type
= DB_INTEGER T1.Fields.Append F1 '向数据表
中
添加这些字段T1.Fields.Append F2。
net学习笔记及其他代码应用
net的最近面试经典试题ASP.NET面试题集合 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类
中
可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session
变量
3.使用Server.Transfer 3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 4.C#
中
的委托是什么?事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的区别。重载是方法的名称相同。参数或参数
类型
不同,进行多次重载以适应不同的需要 Override 是进行基类
中
函数的重写。为了适应需要。 6.如果在一个B/S
结构
的系统
中
需要传递
变量
值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? 答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } } 8.请编程实现一个冒泡排序算法? 答: int [] array = new int ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array) { temp = array ; array = array[j] ; array[j] = temp ; } } } 9.描述一下C#
中
索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意
类型
。 10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m [Page] 答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; for (int i = 0 ; i < Num + 1 ; i++) { if((i%2) == 1) { Sum += i ; } else { Sum = Sum - I ; } } System.Console.WriteLine(Sum.ToString()); System.Console.ReadLine() ; 11.用.net做B/S
结构
的系统,您是用几层
结构
来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。 表示层为了与用户交互例如用户添加表单。 优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点: 增加成本。 12.在下面的例子里 using Sy
DLL的动态下载运行.mht
DLL的动态下载运行[返回]
中
国计算机报2000年第21期 DLL的动态下载运行 业 宁 Lotus Domino 是网络上先进的群件和电子邮件服务器,与客户端应用 Lotus Notes 相配合,具有灵活的安全模式,支持任意大小的多企业构架,全域范围的搜索服务,支持对绝大部分企业系统级的实时访问,功能非常强大。但尺有所短,寸有所长,有时我们需要编制一些DLL来弥补其不足。但问题是这些DLL需要在本地机器上运行,我们不能手工地在每台机器上做拷贝,如果单位很大,工作站很多,或者有远程工作站,那么维护的工作量将非常巨大。下面介绍一种从Domino服务器上动态下载DLL到本地机器运行的方法。 使用操作系统的DLL 如果这些DLL是本地系统自己的API,则直接调用,这里我们举一个例子来说明。 我们要求程序运行时判断本地系统时间,如果系统时间是1999年9月9日,则要求系统退出。 1.在Declarations
中
,我们
定义
: Rem 声明一个SYSTEMTIME的
结构
Type
SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End
Type
Const WM—CLOSE = &H10 声明过程或函数,它们都是kernel32.dll 或user32.dll
中
的API。 Declare Sub GetLocalTime Lib ″kernel32″Alias ″GetLocalTime″ (lpSystemTime As SYSTEMTIME) Declare Function GetActiveWindow Lib ″user32″ Alias ″GetActiveWindow″ () As Long Declare Function CloseWindow Lib ″user32″ Alias ″CloseWindow″ (Byval hwnd As Long) As Long Declare Function PostMessage Lib ″user32″ Alias ″PostMessageA″ (Byval hwnd As Long, Byval wMsg As Long, Byval wParam As Long, Byval lParam As Long) As Long 2.在Initialize事件
中
,我们键入如下代码: Dim stime As SYSTEMTIME Dim hwnd As Long Rem 取得当前活动窗口的句柄 hwnd=GetActiveWindow() Rem 取系统时间保存在SYSTEMTIME
结构
中
Call GetLocalTime(stime) If(stime.wyear=1999) And stime.wmonth=9 And stime.wDay=9 Then Messagebox(″谢谢使用!″,MB—OK+16,″再见″) Rem 退出Notes Call postmessage(hwnd,WM—CLOSE,0,0) End If 使用用户编制的DLL 如果是用户编制的DLL,则调用起来稍微麻烦一点,因为本地机器上可能没有DLL,这就需要把它下载到本地。 可以在需要DLL的Notes数据库
中
增加一个表单或者在表单
中
增加一个域用于保存DLL。下面的这个例子是把两个动态链接库my—1.dll和my—2.dll存放在DLLForm域
中
,当用户运行服务器
中
的Notes数据库时,程序开始搜索本地机器的系统目录,如果发现两个动态链接库已经在本地,则不下载,否则开始下载。下面是设计步骤: 1.首先在Notes
中
建立一个名叫DllForm的表单,在表单
中
设计一个名叫DllInHere的RTF域,然后保存。 以DllForm这个表单生成一个文档,文档的DllInHere域
中
附加了my—1.dll和my—2.dll两个Dll。 2. 在Declaration
中
我们声明: Declare Function GetSystemDirectoryA Lib ″kernel32″ (Byval lpBuffer As String, Byval uSize As Long) As Long 3.在Initalize事件
中
键入如下代码: Dim sysSize As Long Dim uSize As Long Dim sysPath As String uSize = 50 Rem 取得系统路径字符串的长度 sysSize=GetSystemDirectoryA(sysPath,uSize) Rem 给系统路径
变量
置初值,确定准确长度 For i=1 To sysSize sysPath=sysPath+″″ Next Rem 取出Window的system目录或者Window NT的system32目录 sysSize=GetSystemDirectoryA(sysPath,uSize) Dim pathName1,pathName2 As String, fileName1,fileName2 As String Dim rtitem As Variant Dim
collection
As NotesDocument
Collection
Set uidb = session.CurrentDatabase ′ Dim
collection
As NotesDocument
Collection
pathName1 = syspath+″\my—1.dll″ pathName2 = syspath+″\my—2.dll″ Rem 判断本地系统是否已经下载 fileName1 = Dir$(pathName1, 0) fileName2 = Dir$(pathName2, 0) Rem 如果没有下载则从服务器下载 If fileName1 = ″″ Then search$ = { Form = ″DllForm″ } Set
collection
= uidb.Search( search$, Nothing, 0 ) If
collection
.Count = 0 Then Print ″No dll″ Rem 判断文档是否存在 End If Rem 取得第一个文档
中
的 DllInHere域 Set pzdoc =
collection
.GetFirstDocument( ) Set rtitem = pzdoc.GetFirstItem( ″dll″ ) i=0 Rem 判断域
类型
If ( rtitem.
Type
= RICHTEXT ) Then Forall o In rtitem.EmbeddedObjects If i=0 Then Rem 下载第一个DLL到系统目录 Call o.ExtractFile (pathName1) i=1 End If If i=1 Then Rem 下载第二个DLL到系统目录 Call o.ExtractFile(pathName2) End If End Forall End If End If 这样,DLL就下载到本地。DLL一旦下载完毕,应用程序就可以调用其
中
的函数了。 小结 在一个
中
等以上规模的企业
中
,网络
中
的节点往往有几百、上千个,客户端软件的升级是网络管理员最感到头疼的事,使用本文介绍的自动下载方法,可以极大地减轻管理员的工作负担。另外利用C++、
VB
等编制的DLL程序也是对Notes功能的一个有力补充。
vb
6.0第四课
一、集合(
collection
) Dim col as new
collection
1、方法: (1)count:统计对象数目。返回值为长整型,且在设计和运行时为只读。 (2)add:向集合添加一个元素 (3)remove:从集合
中
删除某一个元素 (4)item:从集合
中
获取指定的元素 2、控件集合(controls集合) controls:是窗体上的所有对象的统称。controls方法与col...
vb
msgbox引用
变量
_对象
变量
及其在
VB
编程
中
的妙用
对象
变量
及其在
VB
编程
中
的妙用焦纯杨国胜王健琪一、对象
变量
的声明及其
类型
对象
变量
是这样一类
变量
:它指向某一类对象,并具有此类对象的所有性质和属性,对象
变量
可看作是一个指针,指向项目
中
某一特定
类型
的对象,对此类
变量
进行控制和操作,就是对项目
中
所有属于这一类的对象进行相同的控制和操作。它是一种具有对象性质的特殊
变量
。这些被对象
变量
指向的对象可以是窗体、控制(包括自
定义
控制)、屏幕以及数据库的表、记...
VB基础类
7,763
社区成员
197,609
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章