大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 在VB中兼容非ACCESS数据库的技巧

在VB中兼容非ACCESS数据库的技巧

时间: 2021-07-31 作者:daque

正文从vb数据库体制构造的观点动身,贯串一个简直范例,阐明了在vb中兼容非access方法数据库的简直本领和本领。  要害词:vb、非access数据库、数据存取东西    一个完备的数据库处置体例(dbms)应是能兼容市情上百般较时髦数据方法的体例,它充溢商量了各别用户的本质诉求。基于暂时市情上有多种数据库方法(如foxpro、dbase、paradox等)时髦,所以在vb数据库运用步调中兼容非access数据库就显得尤为要害了。    动作一种时髦的开拓平台,vb供给了宏大的数据库功效。重要有以次三种:数据控件法:运用数据存取东西(data access object )法;径直挪用odbc 2.0 api接口因变量法。个中挪用数据存取东西的本领对立其它两种本领具备简单精巧、功效宏大的超过便宜。正文即从挪用数据仓库储存取东西的本领动身,实行了非access方法数据库(以foxpro数据库为例)的建新库、正片数据库构造、动静调入等操纵,阐明了从编制程序本领上填补vb对那些外路数据库扶助不及的可行性。  一、vb数据库的体制构造    vb数据库的中心构造是所谓的microsoft jet数据库引擎,它为vb与数据库的接口供给了基础的本领和本领。jet引擎被visual basic、microsoft access和其它microsoft产物所共享。所以在vb中access数据库方法是一种规范的内置方法,一切的非access数据库都被称为外路数据库。    jet引擎的效率就像是一块“面板”,在其上不妨插入多种索引程序存取本领(即isam)数据启动步调。这即是vb对非access数据库具备充分扶助的真实因为。vb专科版中供给了foxpro、dbase(或xbase)、paradox、btrieve等数据库的isam启动步调,这就使得vb能扶助那些数据库方法。其余,其余的很多兼容isam的启动步调也不妨经过从厂商的售后效劳获得。所以从表面上说,vb能扶助一切兼容isam的数据库方法(基础是只需赢得那些数据库的isam启动接口步调)。  二、运用非access数据库时的参数树立及摆设文献的参数读取    犯得着提防的是,大普遍的步调员都不提防数据库摆设文献的运用,殊不知这是极为要害的。    即使在vb的步调中运用了数据库的操纵,将运用步调天生exe文献或打包天生安置步调后,则必需供给一个数据库摆设(.ini)文献,在ini文献中不妨对各别典型的数据库举行树立。即使找不到这个ini文献,将会引导不许考察数据库。常常情景下,ini文献的文献名和运用步调的称呼沟通,以是即使没有指明,vb的步调会在windows子目次中去找和运用步调同名的ini文献。不妨运用vb中的setdataaccessoptions语句来树立ini文献。  setdataaccessoptions语句的用法如次:  setdataaccessoptions 1,inifilename  个中inifilename参数指明的是ini文献的带路途的文献名。    犯得着提防的是,当运用步调找不到这个ini文献时,或在挪用opendatabase因变量时对其connect参数值没有设定于vb规则的规范值,如对foxpro 2.5方法设定于了“foxpro;”(应为“foxpro 2.5;”),大概没有安置相映的isam启动步调,则此时vb会表露一条缺点消息“not found installable isam”。  常常,ini文献在运用步调散发出去往日仍旧天生,大概在安置时动静天生,也不妨在运用步调中本人天生。常常这种ini文献中有“[options]”、“[isam]”、“[installed isams]”、“[foxpro isam]”、“[dbase isam]”、“[paradox isam]”等树立段,对于一个完备的运用步调则还应有一个属于运用步调本人的树立段如“[mydb]”。可在个中树立datatype、server、database、openonstartup、displaysql、querytimeout等较为要害的数据库参数,并以此控制运用步调普遍的运转情况。  windows api接口因变量在win95体例供给的动静链接库中供给了一个oswriteprivateprofilestring因变量,此因变量能按windows下摆设文献(.ini)的抄写方法写入消息。    在常常情景下,运用步调还须要在运转时读取摆设文献内关系项的参数。比方pagetimeout(页加锁超常常限)、maxbuffersize(缓冲区巨细)、lockretry(加锁波折时重试度数)等参数,经过对那些参数的读取对运用步调运转情况的设定、潜伏缺点的捕捉等均会有很大的革新。        设此运用步调的数据库摆设文献为mydb.ini,则简直进程如次:  funtion getinistring$( byval fname$,byval szitem$,byval szdefault$ )  ’此自设置子因变量实行ini文献内树立段内部参考消息数的读取  dim tmp as string, x as integer  tmp = string( 2048,32 )  x = osgetprivateprofilestring( fname$,szitem$,szdefault$,tmp,len(tmp),“mydb.ini”)  getinistring = mid$( tmp,1,x )  end function    经过此因变量就能实行对百般数据库方法的读取。  三、挪用数据存取东西对非access数据库编制程序的本领及本来例    vb专科版中运用数据仓库储存取东西变量(dao)的本领最具备功效宏大、编制程序精巧的特性。它不妨在步调中存取odbc 2.0的处置因变量;不妨遏制多种记载集典型:dynaset,snapshot及table记载汇合东西;不妨保存进程和查问举措;不妨存取数据库汇合东西,比方tabledefs,fields,indexes及querydefs;具备真实的实物处置本领。这种本领对数据库处置的大普遍情景都特殊实用。  从vb的步调代码的观点来看,供给给vb步调员的记载集东西(recordset)同所运用的数据库方法及典型是彼此独力的。即对foxpro等数据库仍旧不妨运用稠密的数据仓库储存取东西变量,这就为非access数据库的考察供给了最要害的基础和本领。  在vb中从一种数据库典型变化为另一种数据库典型简直不须要或只须要很少的代码窜改。并且,纵然dbase、paradox自己的ddl(data definition language,即数据设置谈话)和dml(data manipulation language,即数据安排谈话)利害构造化查问的,但它们仍旧不妨运用vb的sql语句和jet引擎来安排。  所以对foxpro等非access数据库而言,挪用数据仓库储存取东西的本领同样也是一种最好的采用。  (一)非access数据库的兴建及库构造的窜改    vb专科版中的数据仓库储存取东西变量不妨分为两类,一类用来数据库构造的保护和处置,另一类用来数据的存取。个中表白数据库构造时不妨运用底下的东西:database、tabledef、field、index,以及三个汇合(collection):tabledefs、fields和indexes。每一个汇合都是由几何个东西构成的,那些数据东西的汇合不妨实足看作是一个数组,并按数组的本领来挪用。  一旦数据库东西创造后,就不妨用它对数据库的构造举行窜改和数据处置。  对于非access数据库,大局部都是对应于一个目次,以是不妨运用vb的mkdir语句先天生一个目次,亦即兴建一个数据库。而每一个非access数据库文献可看作是此目次下的一个数据表(table),但本质上它们是彼此独力的。  底下是兴建一个foxpro 2.5方法数据库的步调范例。  sub createnew ( )  dim db1 as database, td as tabledefs  dim t1 as new tabledef,f1 as new field, f2 as new field, f3 as new field  dim ix1 as new index  dim path as string  const db_text = 10,db_integer = 3  chdir "\"  path$ = inputbox( "请输出新路途名:", "输出对话框" )  mkdir path$ ’兴建一个子目次  set db1 = opendatabase(path$, true, false, "foxpro 2.5;")  set td = db1.tabledefs  t1.name = "mydb" ’兴建一个数据表,数据表名为mydb  f1.name = "name", f1.type = db_text, f1.size = 20  f2.name = "class", f2.type = db_text, f2.size = 20  f3.name = "grade", f3.type = db_integer  t1.fields.append f1 ’向数据表中增添那些字段  t1.fields.append f2  t1.fields.append f3  ix1.name = "name" ,ix1.fields = "name", ix1.primary = true ’兴建索引  t1.indexes.append ix1 ’向数据库的indexes汇合中增添新的索引  td.append t1 ’向tabledefs汇合中增添新表  db1.close ’必需先封闭数据库东西再退出  end sub    在此段步调中犯得着提防的是,对非access数据库的兴建不必createdatabase因变量,而是用opendatabase因变量,这点与access数据库大不一律,但也只是是对准非access数据库而言本领用opendatabase因变量来兴建一个数据库东西。  在vb中,外路数据库的各别方法只在opendatabase因变量的结果一个参数connect中有所展现,各别方法的外路数据库其connect参数值也各别,除此除外,在vb专科版中其编制程序的本领和办法及本领是基础沟通的。    兴建子目次后,不许用chdir语句加入它,要不会展示“‘mydb’ is not a valid path”的缺点。同声,对f1、f2、f3等兴建字段东西的设置也必需辨别设置,要不会展示“element not defined”(变量不决义)的缺点。  经过确定的编制程序本领还不妨实行非access数据库的库构造的正片,底下是一段相映的步调。  function getpos( tfname$ ) ’此自设置因变量实行对带路途文献名中结果一个“\”标记的定位  dim i as integer,tmp as string  tmp$ = tfname$  for i = 0 to 255  pos% = pos% + instr( 1, tmp$, "\" )  e1% = instr( 1, tmp$, "\" )  tmp$ = right$( tmp$, len(tfname$) - pos% )  if e1% = 0 then ’找到结果一个“\”标记的场所,并记下来  getpos = pos%  exit for  end if  next i  end funtion  sub copystruc( )  dim db1 as database, ds1 as dynaset,td as tabledefs, fld as fields  dim fname,sourcef,destf,path as string,pos1 as integer  cmd1.filter = "foxpro数据库文献(*.dbf)|*.dbf|一切文献|*.*" ’cmd1为一个对话框的遏制名  cmd1.dialogtitle = "调入ms foxpro数据库文献"  cmd1.filterindex = 1  cmd1.action = 1  destf$ = inputbox$( "请输出目的文献名:", "输出对话框" )  if cmd1.filename = “ ”or destf$ = " " then  msgbox "源文献或目的文献名为空"  exit sub  else  sourcef$ = cmd1.filename  end if  filecopy sourcef$, destf$  pos1% = getpos( sourcef$ )  path$ = left$( sourcef$, pos1% ) ’赢得源文献地方的路途名  fn$ = left$( destf$, instr(1, destf$, ".") - 1 ) ’赢得新文献的数据库名  ’fn$为本质的foxpro数据库名,也即createdynaset因变量内的source属性值  set db1 = opendatabase( path$, true, false, "foxpro 2.5;" )  set ds1 = db1.createdynaset( fn$ )  if ds1.eof and ds1.bof then ’数据库内的无记载则退出  totalnum% = 0  msgbox "此数据表为空表!"  exit sub  end if  ’简略记载,保持库构造  ds1.movefirst  do  ds1.delete  ds1.movenext  loop until ds1.eof  end sub    看来,正片库构造的本领在乎把一个已生存的数据库正片到一个新文献中,而后再简略新文献内的一切记载,保持其库构造,获得的即是一个兴建的库构造完备的空库。  (二)非access数据库的动静调入    在本质运用的很多情景下,常常须要在对少许事前并不领会其简直库构造的数据库举行调入、表露及打字与印刷其记载。所以实行未知方法数据库的动静调入也是评介vb数据库运用步调兼容性的一个要害标记。    在vb中,网格控件特殊符合用来欣赏数据库中的数据,只需把数据放入彀格即可。  在运用网格时动静调入的要害在乎记载(colume)实质和字段(row)实质(囊括字段的称呼、典型、值等)的读取,所以天生一个不妨对应于一个或多个数据表中的十足或局部记载的dynaset东西利害常需要的。dynaset东西还不妨是一个动静查问的截止,能举行记载的减少、简略和窜改等操纵。  底下是一段用网格表露foxpro数据库的步调。  sub dbload( )  dim db1 as database, ds1 as dynaset,td as tabledefs,fld as fields  dim fname,tmp,path totalnum as string,i,j,pos1 as integer  dim mynum ’设置一个变体型数据  cmd1.filter = "foxpro数据库文献(*.dbf)|*.dbf|一切文献|*.*"  cmd1.dialogtitle = "调入ms foxpro数据库文献"  cmd1.filterindex = 1  cmd1.action = 1  fname$ = cmd1.filename  pos1% = getpos( fname$ )  path$ = left$( fname$, pos1% )  tmp$ = right$( fname$, len(fname$)-pos1)  fn$ = left$( tmp$, instr( 1,tmp$,“.”) - 1 )  set db1 = opendatabase( path$, true, false, "foxpro 2.5;" )  set ds1 = db1.createdynaset( fn$ )  if ds1.eof and ds1.bof then "数据库表内无记载则退出  totalnum = 0  msgbox "此数据表为空表!"  exit sub  else "表露数据库表内的本质记载数  ds1.movelast  totalnum = ds1.recordcount  grid1.rows = totalnum + 1 ’置网格的本质行数  total.caption = str$(totalnum)  end if  "置网格的本质列数并置每列的宽窄  set td = db1.tabledefs  set fld = td( fn$ ).fields  grid1.cols = fld.count + 1  grid1.colwidth(0) = 600  for i = 1 to fld.count  grid1.colwidth(i) = 1500  next i  "在网格的第一条龙内填入字段名  grid1.row = 0, grid1.col = 0  grid1.text = "序号"  for i = 1 to fld.count  grid1.col = i  grid1.text = fld(i - 1).name  next i  "在网格中填入相映的数据  ds1.movefirst  i = 1  do while not ds1.eof  grid1.rowheight(i) = 300  grid1.row = i  grid1.col = 0  grid1.text = i  for j = 1 to fld.count  grid1.col = j  mynum = ds1.fields(j - 1).value  "对记载的数据典型举行确定后做相映的处置  if isnumeric( mynum ) or isdate( mynum ) then  grid1.text = str$( ds1.fields(j - 1).value )  else if vartype( mynum ) = 8 then  grid1.text = ds1.fields(j - 1).value  else if vartype( mynum ) = 0 or vartype( mynum ) = 1 then  grid1.text = " "  end if  on error resume next  next j  ds1.movenext  i = i + 1  loop  ds1.close  db1.close  exit sub    结果应记取,在vb的数据库运用步调运转之前,确定要在autoexec.bat文献中介入一句share.exe /l:500。  之上一切步调均在pentium/166机、华文windows95下用vb4调节和测试经过。  四、中断语    对非access数据库的兼容是vb数据库编制程序中不行分隔的要害局部。所以流利控制运用dao本领对非access数据库的编制程序是极为要害的。而且,确定编制程序本领的运用也无助于于填补vb对外路数据库扶助的不及。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.