微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题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以上的驱动器。