首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏

数据库工程师:在PB中用OLE存取blob类型数据(三)

  6、源程序建立

  1)首先在数据库中建立如下结构的表blobsave:

   字段名称  数据类型  备注

   id  char(4)  primairy key index

   s_path  char(50)

   pic   binary (50)

  2)在PB建立PBl库blobsave.PBl

  3)在PBl库blobsave.PBl中建立应用blobsave

  在应用的open事件中设置数据库连接程序(本程序中采用的是odbc方式连接数据库,读者可根据自己所建立的数据库的不同选用不同的连接方式,以下连接数据库的代码也有所改动,至于连接不同的数据库的方法,请参考有关资料,本文不做详细介绍):

  SQLCA.DBMS = "ODBC"
  SQLCA.AutoCommit = False
  SQLCA.DBParm = "Connectstring="DSN=blob""
  connect;
  open(w_main)

  其中命令按钮cb_path的clicked中的代码格式如下:open(w_path)

  其中命令按钮cb_dbblob的clicked中的代码格式如下:open(w_dbblob)

  其中命令按钮cb_OLEblob的clicked中的代码格式如下:open(w_OLEblob)

  4) 建立数据窗口dw_blobsave

  按照上文中建立数?荽翱诘腷lob列的方法建立数据窗口dw_blobsave如图所示:

  其中:add,del,save,cancel,,retrieve等分别为数据窗口dw_blobsave的append row,delete row,update,retrieve动作按钮。

首先创建实例变量 OLEstorage stor1

  然后如图建立窗口w_path,其中数据窗口控件dw_1的rowfocuschanged中的代码如下:

  long row_num
  row_num=dw_1.getrow()
  if row_num >0 then
  ole_1.insertfile(dw_1.object.s_path[row_num])
  end if

  其中数据窗口dw_1的buttonclicked中的代码如下:

  if dwo.name="cbselect" then
  long row_num
  row_num=dw_1.getrow()
  string filepath,filename
  getfileopenname("请选择备注文件",filepath,filename)
  dw_1.object.s_path[row_num]=filepath
  ole_1.insertfile(filepath)
  end if

  保存窗口w_path

  6)建立窗口w_dbblob

  打开w_path,把其另存为w_dbblob,改变数据窗口dw_1的rowfocuschanged中的代码如下:

  blob text1
  long row_num
  row_num=dw_1.getrow()
  if row_num>0 then
  string id
  id = dw_1.object.id[row_num]
  sqlca.autocommit=true
  selectblob pic into :text1 from blobsave where id = :id;
  ole_1.objectdata=text1
  sqlca.autocommit=false
  end if

  改变数据窗口dw_1的buttonclicked中的代码如下:

  long row_num
  if dwo.name="cbselect" then
  row_num=dw_1.getrow()
  string filepath,filename
  getfileopenname("请选择备注文件",filepath,filename)
  dw_1.object.s_path[row_num]=filepath
  ole_1.insertfile(filepath)
  end if
  if dwo.name="cbsave" then
  string id
  sqlca.autocommit = true
  blob text1
  text1 = ole_1.objectdata
  dw_1.update()
  commit;
  row_num=dw_1.getrow()
  id=dw_1.object.id[row_num]
  updateblob blobsave
  set pic = :text1
  where id = :id ;
  commit;
  sqlca.autocommit = FALSE
  dw_1.retrieve()
  dw_1.scrolltorow(row_num)
  end if
  保存窗口w_dbblob

  7)建立窗口w_OLEblob

  打开w_path,把其另存为w_OLEblob,在窗口w_OLEblob的open事件中写入以下代码:

  stor1 = create olestorage
  stor1.open("c:\p1.ole") //打开或创建ole文件
  在窗口w_OLEblob的close事件中写入以下代码:
  destroy stor1

  改变数据窗口dw_1的rowfocuschanged中的代码如下:

  blob text1
  long row_num
  row_num=dw_1.getrow()
  if row_num>0 then
  string id
  id = dw_1.object.id[row_num]
  ole_1.open(stor1,"w"+id)
  end if

  改变数据窗口dw_1的buttonclicked中的代码如下:

  long row_num
  if dwo.name="cbselect" then
  row_num=dw_1.getrow()
  string filepath,filename
  getfileopenname("请选择备注文件",filepath,filename)
  dw_1.object.s_path[row_num]=filepath
  ole_1.insertfile(filepath)
  end if
  if dwo.name="cbsave" then
  string id
  row_num=dw_1.getrow()
  id=dw_1.object.id[row_num]
  ole_1.saveas(stor1,"w"+id)
  stor1.save()
  end if

  保存窗口w_OLEblob,运行应用程序即可。

  7、三种方法的优缺点

  方法一:文件保存在固定的路径下,数据库中存取文件路径和名称可以节省数据空间,避免了数据库过分膨胀,但备注文件必须在一定的目录下,不能丢失,且同一目录下文件不能重名,对文件的管理造成一定的困难,另外,在OLE控件中浏览显示备注文件时,由于每次都要调用服务器程序,所以速度较慢。

  方法二:在数据库中用blob类型或者varbinary类型字段存储备注文件,当文件存储在数据库中以后,就可以删除硬盘上原来的临时文件,不需要复杂的二进制文件管理,且数据库可以存储在网络服务器上,对数据的共享非常方便。

  方法三:在本地用OLE存储结构存储备注文件。可以把所有的二进制文件信息存储在一个OLE存储文件中,管理比较方便。当二进制文件信息存储后,可以删除原来的临时文件;因为打开存储文件后不需要每次执行服务器程序来显示存储信息,所以存取速度较快。 说明:本文在PB6.5,Sql anywhere数据库和PB6.5,Sql Server数据库下,windows98,windows me,NT4.0平台上试验通过。

文章搜索
软件水平考试栏目导航
版权声明:如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。