精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓..技术文章连载..〓〓>>VB邮件>>VB邮件(6.9)

主题:VB邮件(6.9)
发信人: aaaaaaaaa()
整理人: cobe(2000-02-12 23:54:15), 站内信件
                      编者的话
====================================================================
大家好!
    这是关于VB和ASP的免费邮件列表。
    如果您有问题或想回答别人的问题,请给我写信。
    如果您有好的作品或您发现了好的作品,不要忘
了让大家共享。
    热情欢迎您的参与!!!
                                版主   冯德平
                                [email protected]
=============================================
            VB邮件(6.9)
a VB应用小集
一、访问VB外来数据库

    VB最引人注目的特点,也是其最令程序员关心的地方,就是它访问多种数据
库的强大功能。VB中将非MS Access数据库称为外来数据库(External Database)
,如dBASE、FoxPro、ODBC等。VB中使用数据控制访问外来数据库同访问Access数
据库类似,这里不再赘述,现在主要读一下用生成对象的方法来访问外来数据库
。访问外来数据库((以dBASE为例)大致分为以下几步:

第一步:建立一个Access型数据库,并在数据库中创建新表—即为附加表。通过
设置
附加表的各属性值,使其与你所要访问的数据库建立链接关系。程序代码如下:
    

        DimDbasDatabase

        DimTdasNewTabledef

        SetDb=OpenDatabase("MYDB.MDB")

        Td.Connect="dBASE:DATABASE=c:\DATADIR"

        Td.SourceTableName="AU THOR"

        Td.Name="dBASEAuthorTable"

        Db.tabledefsAppendTd

        Db.close

    第二步:设置INI文件路径。在VB的程序中使用了访问外来数据库操作,将应
用程序生成EXE文件后,必须提供一个INI文件。若找不到这个INI文件,将会导致
不能访问数据库,并出现“NOTFOUNDIN STOLLABKISAMS’的错误信息。设置INI文
件路径后,VB的程序会在WINDOWS子目录中寻找与应用程序同名的INI文件。设置
INI文件路径代码为:

        SetDataAccessOption1,“Path\Filename”

    第三步:编辑.INI文件可对不同种类的数据库进行设置,下面为一INI文件代
码:

        [Options]

        SystemDB=c: \MyPATH\SYSTEM.MDA

        [ISAM]

        PageTimeout=5

        MaxBufferSize=128

        LockRetry=20

        CommitLockPetry=20

        ReadAheadPages=16

        [InstallableISAMs]

        Paradox3.x=C:\VB\pdx110.DLL

        FoxPro2.0=C:\VB\xbs110.DLL

        FoxPro2.5=C:\VB\pdx110.DLL

        dBASE=C:\VB\pdx110.DLL

        dBASE=C:\VB\pdx110.DLL

        Btrieve=C:\VB\btrv110.DLL

        [ParadoxISAM]

        PageTimeout=600

        ParadoxUsername=BaiUser

        ParadoxNetPath=P:\PDXDB\

        CollatingSeguence=Ascii

        [dBASE]

        centry=off

        Data=American

        Mark=47

        Deleted=on

    这样通过访问新数据库MYDB.MDB和表“DBASEAU THORTABK”即可访问你所要
访问的外来数据库了。

    使用这种方法访问外来数据库应该注意的是,附加表在所加到的数据库中只
是建立了一个链接关系,表的实际所在,仍然存在于原数据库中,该表在所附加
到的数据库中被删除时,只是删掉了链接关系,实际的表并没有被删除。

 

二、优化OLE的调用频率

    在VB5.0中,OLE调用功能大大增强,程序员的调用次数也自然地随之增加,
显然,优化OLE的调用对提高系统效率有着不可低估的意义。下面提供三则优化O
LE调用技巧供参考。

    1.预先定义专用对象,减少OLE调用次数,提高程序效率

    在VB中进行OLE功能调用时,一般需要重复使用“对象、属性”这类语句,有
时连接对象很多,语句较长。比如,要想获得某个数据库中数据表字段名称的OL
E功能调用语句可能这样:

        DBEngine,Workspaces(0).DataBases(0).RecordSet.Fields(0).Name

    上面语句中的每个点(.)都需要进行一次OLE功能调用。如果我们想列出所有
的字段名称,一般情况下程序如下:

        ForI%=0ToDBEngine.WorkSpaces(0).Database.RecordSet.Fields.Coun
t-1

        PrintDBEngine.WorkSpaces(0).Database.RecordSet.Fields(I%).Name


        Next

    上面这段程序用循环的方式将所有字段名称列出来,每一个循环需要有10次
OLE调用(10个点),假设有10个字段,则完成这个循环需要进行100次OLE调用。从
上面的程序中我们可以看到OLE调用语句的前面部分对象都是一样的,我们可以考
虑将其预先定义好,这样就可以减少OLE调用次数,提高效率,将程序改写如下:


        DimDBAsDatabase

        DimSAsFields

        DimFAsField

        SetDB=DBEngine.Workspaces(0).OpenDatabase("biblio.mdb")

        SetX=DBEngine.Workspaces(0).Databases(0).TableDefs(0).Fields

        ForEachFInX

        PrintF.Name

        Next

    改写后的程序在完成定义对象时使用6次OLE调用,循环过程需要10次(10×1
),完成整个任务只需要16次,和上面的程序比起来效率大大提高了。

 

    2.利用WITH语句来减少OLE调用次数

    比如,我们通过OLE功能定义某个字段的属性语句可能这样:

        DBEngine.WorkSpaces(0).Database.RecordSet.Fields(0).Name="Book
"

        DBEngine.WorkSpaces(0).Database.RecordSet.Fields(0).Required=T
rue

        DBEngine.WorkSpaces(0).Database.RecordSet.Fields(0).Size=20

        DBEngine.WorkSpaces(0).Database.RecordSet.Fields(0).Type=db Te
xt

        DBEngine.WorkSpaces(0).Database.RecordSet.Fields(0).Value="MSD
OS"

    上面的语句运行效率不高,且书写繁琐,利用WITH语句改写如下:

        WithDBEngine.WorkSpaces(0)

        .Database.RecordSet.Fields(0)

        .Name="BOOK"

        .Required=True

        .Size=20

        .Type=dbText

        .Value="MSDOS"

        EndWith

    改写后的程序书写简单、效率也高(OLE调用次数少)。

 

    3.利用服务方程序的宏来减少OLE功能调用次数

    如果要从VB中通过OLE调用WORD中的某些功能来完成某项任务,首先在WORD中
将所要使用的功能用记录宏的方式记录成一个宏(根据实际情况可修改记录后的宏
代码),然后再用VB的OLE功能调用WORD来执行这个宏,这样可避免反复用VB的OL
E功能调用WORD来完成任务,简化了程序,提高了效率。

b VB中APP对象及其应用
 
 
初学VB编程,很快就能编出些实用的程序了。我便将它们制成安装盘送给朋友,
但很快就发现一个问题,程序总是按编程时固定好的路径读写文件,但文件路径
改变,程序就找不到路径了,因此不能正常写文件。例如编程时设定:picture1
.picture=Load Picture("c:\HVB\HAN.BMP")但若安装使用时,工作目录变为E:
\HVB\HAN.BMP或其它路径,程序就会出错,并提示:找不到文件路径。这个问题
看起来很复杂,但实际上很好解决,这只需用VB的App对象。 
App对象有两种重要属性:(1)App.Path,它在VB编程状态下返回你的.MAK文件所
在目录;在以.EXE文件运行时,则返回你的.EXE文件所在目录。(2)App.EXE Nam
e它返回你的程序名。下面举一个简单的例子,假如你有一个程序为DDC,其目录
为C:\HVB\DDC4(包括DDC.EXE)在VB编程环境下,在Debug窗口运行:Print App.
Path,显示结果:C:HVB\DDC4,再运行Print App.EXEName显示结果:DDC。知道
了以上两种属性,前面所述问题就很好解决了,可以将其修改为:Dim Apath ,D
im FilePath 
Apath=App.Path 
FilePath=Apath+"\HAN.BMP" 
Picture1.Picture=LoadPicture(FilePath) 
这样,这程序的工作目录无论改为什么,都能正常工作了。 
(注:文件目录为根目录时,以上情况略有不同,App对象在VB2.0以上版本中均存
在。) 


c VB中DRAGDROP事件与DRAGOVER事件的使用

    在WINDOWS中,拖动意味着移动光标到对象上,按住鼠标,接着移动鼠标使对
象在屏幕内滑动以重新定位对象。当释放鼠标按钮时,在拖动对象所在控件边界
内放开鼠标会触发DragDrop事件。如果放开鼠标时对象不在一个控件的上面,那
么对象定位于窗体本身。

    如果一个对象在一个控件(或窗体)上被放开,并且在后者的DragDrop事件
中没有放任何内容,那么“被放开”的对象将仍然在窗体上原先位置出现,不会
出现其他事情。因此,拖动对象的DragDrop事件不是用来存放有关放开对象时执
行某些指令的地方。而应将这些指令放到背景的DragDrop事件中或者拖动对象所
放开的目标控件中。

    一个DragDrop事件提供三条信息--DragDrop(Source as Control,X as 
Single,Y as Single)Source,是已经放开的图片,图标或控件。X和Y值,是放
开事件所在目表对象的水平和垂直方向位置。如:

Sub pictrue1-DragDrop(Source as Control,X as Single,Y as Single)


Pictrue1.DrawWidth=6

picture1.pset(x,y),QBcolor(4)

End Sub

    当一个控件拖动到另一个之上时,发生一个DragOver事件,以警告被入侵的
控件或窗体发生了拖动。一个DragOver事件提供四条信息:

        DragOver(Source as conterol,X as Single,Y as Single,State 
as Integer)

    “Source”为入侵者标志。入侵者在被入侵的控件或窗体内的当前位置由X,
Y来确定入侵者的状态,如是否刚刚进入。仍在其内或将要离开等由State变量报
告。

    通过允许用户拖动一个指针在屏幕上移动,接触窗口内的不同区域引起事情
发生。一种常用的编程技术是和一状态栏一同使用。状态栏随程序运行时的情况
而改变,报告光标的当前位置,变量如Font等的状态,提供一种有效的帮助功能



 

=============================================
              问题征答(6.9)
您好!
    如何在一个窗体FORM1上建立另一个窗体FORM2的快
捷方式图案?即在窗体FORM1上有个窗体FORM2的快捷方
式图案,当双击该图案时,调用FORM2的程序。我的意
思是:为FORM2创建快捷方式,以后可以通过鼠标拖动
到FORM1的界面上。
                            DAVID
                        1999年6月8日
=============================================
                其它
====================================================================
欢迎订阅VB免费邮件:
订阅地址  http://server.com/WebApps/mail-list-subscribe.cgi?id=16852  

====================================================================  

如果您觉得这个邮件列表好的话,请告诉您的朋友。  
====================================================================
欢迎投稿  [email protected]  
====================================================================  

网易上的主页地址:http://www4.netease.com/~aaaaaaaaa 
本网站主页镜像地址:goodvbhome.yeah.net 
====================================================================

--
欢迎访问主页:goodvbhonme.yeah.net
或:http://www4.netease.com/~aaaaaaaaa
http://personal.gz168.gnet.gd.cn/vbok/

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.45.236]

[关闭][返回]