Visual Basic 3.0/4.0 问与答
答:实现在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以上的驱动器。