Visual Basic 3.0/4.0 问与答 曹国钧 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以上的驱动器。