Visual Basic 3.0/4.0 问与答

Author: 曹国钧 Date: 1996-06-28

        
        答:实现在VB中建茿ccess格式的数据库,其方法如下:
        
        按如下步骤,可在VB中建立Foxpro格式的数据库。
        
        (1) 首先在硬盘中建立一个其它格式数据库的目录,例如,D:\FOXPRO。
        
        (2) 进入VB的Data  Manager(在VB主窗口的Windows菜单里)。用 File 菜单的 Open DataBase选择要建立的数据库类型。选择Foxpro 2.5,则出现“Open DataBase”的对话框。在这个对话框中,选择要存放Foxpro  2.5数据库的目录。例如, 在选择的是“ D:\Foxpro”。注意:这里选择的是目录而不是数据库文件名字。
        
        (3) 选择好数据库存放的目录后,则出现一个“DataBase D:\”的对话框。在该对话框中选择“New”按钮,则出现一个“Create New Table”的对话框。可在“Table Name”中输入一个Foxpro  2.5格式的数据库名字,例如,VB1。
        
        (4) 在该图中按“OK”按钮,则出现“Table:VB1”的对话框。
        
        (5) 选择“Add”按钮,则出现一个“Add Field”的对话框。然后在“Filed Name”输入字段名称,例如WZ1,在“Field Type”中选择该字段的类型,例如,Text(文本字符串),在“Field Size”中输入该字段的长度,例如10。输入完毕后,按“OK”按钮, 则出现图记录输入的界面。
        
        此时,符合Foxpro  2.5格式的数据库VB1.DBF就建立成功。
        
        在VB程序中建立该格式的数据库,可用VB中的一个函数CreateDataBase()来生成数据库。但是,用CreateDataBase()也只能生成Access格式的数据库。要在VB的程序中直接建立Foxpro 2.5格式的数据库,可参考下例。
        
        Sub Form_Load()
        
        Dim md1 as database
        
        dim i as integer
        
        dim md as New TableDef,fld() as New Field
        
        ' 打开数据库类型、数据库存放的目录路径
        
        set md1=OpenDataBase("D:\FOXPRO",True,False,"FOXPRO 2.5")
        
        reDim fld(1 to 3)
        
        md.Name="VB1"                      ' 数据库的名称
        
        fld(1).Attributes=DB_AUTOICRFIELD
        
        for i=1 to 3
        
        fld(i).Name=Choose(i,"Name","tel","address")
        
        fld(i).Type=10                     ' 类型为字符类型(Text)
        
        fld(i).Size=Choose(i,6,30,30)       ' 长度分别为6、30、30
        
        md.Fields.Append fld(i)            ' 增加三个字段
        
        Next i
        
        md1.TableDefs.Append md
        
        MsgBox "数据库"+md.name+"已经建立。"
        
        end
        
        End Sub
        
        这种方法比较简单。Access的数据库实际上是一个数据库的超集,它的一个数据库可以包括若干个数据库(DataBase)、表(Table)、字段、索引。而 Foxpro等数据库只相当于Access数据库中的表。Access中将目录看成是数据库的等价物,因此,在上面的VB程序中建立一个目录就相当于建立一个数据库,对于Foxpro等来说,Access的表就是数据库。这种方法实际上是用Access的风格建立Foxpro格式的表;但Access的数据库描述能力远远大于Foxpro等数据库环境。
        
        问2: 如何使用Crystal Reports  VBX与SQL相连?
        
        答: 可使用下面的方法连接字符串:
        
        report1.Connect="DSN=Data Source name;UID=ID;PWD=Password;DSQ=Tablename"
        
        将Crystal Reports  VBX与SQL相连。
        
        问3:如何使用Crystal Reports作为一个VB MDI的子窗口?
        
        Crystal Reports打印窗口可以作为MDI子窗口显示。
        
        基本思想是用VB产生一个MDI子框架,然后使Crystal Reports打印窗口作为子框架的一个子窗口。 在调用Peout PuttoWindow时,若正在使用打印工具,则最后一个参数将应说明为父窗口的句柄。
        
        若用了Crystal Reports  VBX,应用下面的语句:
        
        report1.WindowParentHandle=XXXX
        
        其中XXXX为父窗口的句柄。
        
        注意:上面的WindowParentHandle属性只有在运行阶段才有效。
        
        若父窗口句柄是一个MDI窗口的句柄, 则Crystal  Reports的打印窗口将作为一个MDI子框架窗口。
        
        用Windows API调用函数GetWindow和MoveWindow完成下面的工作:
        
        (1) GetWindow函数主要用来获取与给定窗口有特殊联系的窗口句柄。
        
        (2) MoveWindow函数主要用来改变窗口的位置和尺寸。
        
        问4:如何调用存储的子程序?
        
        答: 用以下代码即可调用存储的子程序。
        
        [form.]report.storedProcParam(Paramter Array Index%)[new Parameter$]
        
        如: report1.StoredProcParam(0)="06/14/1995"
        
        将第一个存储的子程序的参数设置为日期值“6月14,1995年”。
        
        问5:如何获得结构尺寸?
        
        答:用如下VB代码可以得到一个结构的尺寸大小。
        
        dim logoninfo as PELogoninfo
        
        logoninfo.StructSize=Len(logoninfo)
        
        logoninfo.ServerName="ODBCSQL"+chr$(0)
        
        logoninfo.DatabaseName="pubs"+chr$(0)
        
        logoninfo.UserID="tech"+chr$(0)
        
        logoninfo.Password="tech"+chr$(0)
        
        问6: 如何设置一个不包括开发机器的服务器的位置?服务器的名字不同,但VBX中的表和字段名相同。
        答:为改变服务器的位置,同新服务器相连,每个表均使用DataFiles()属性。
        问7:如何设置存储子程序中表的位置?
        
        答:使用DataFiles()属性。
        
        注意:不能在Crystal Reports中与存储子程序相连。
        
        问8: 当使用自然的Q+E服务器时,为什么关掉Crystal Reports工具
        会破坏SQL联接?
        答: 这是所有Q+E 1.x驱动器共有的问题。
        
        解决的方法就是使用ODBC,在调用Crystal Reports时注销它们,或者直接使用Q+E 2.x以上的驱动器。