CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  基础类

请问如何将Word文档读入字段中,并从字段中取出刚才的WORD文档?

楼主Karey(宇宙星云)2005-11-07 15:36:20 在 PowerBuilder / 基础类 提问

SQL中字段设成Image,在查询分析器中用Insert   Into命令将Word文档插入Image字段中,在PB中用SELECT选择出来出现乱码?如何将WORD文档读出?如果用PB写入IMAGE字段又如何写入?与SQL一样的吗? 问题点数:50、回复次数:12Top

1 楼lzheng2001(1加1)回复于 2005-11-07 15:47:12 得分 0

查询分析器中用Insert   Into命令将Word文档插入Image字段中  
  ==========================  
  能否把语句贴出来?  
   
   
   
  Top

2 楼Karey(宇宙星云)回复于 2005-11-07 15:56:46 得分 0

insert   into   test   cFile   values('E:\1.doc')  
   
  不知这样写是否正确?Top

3 楼lzheng2001(1加1)回复于 2005-11-07 16:13:16 得分 0

insert   into   test   cFile   values('E:\1.doc')  
  ===================  
  这句不能把WORD文档保存到SQL   SERVER的image字段中的,   为什么你能select   出千乱码来?    
   
   
  Top

4 楼lzheng2001(1加1)回复于 2005-11-07 16:16:00 得分 50

算了吧,我看楼主是乱来的.    
   
  给你一个例子参考吧  
   
  例子  
  long   ll_handle,ll_index  
  string   ls_data,ls_filename,ls_name  
  integer   li_value  
   
  ll_index=lv_info.selectedindex()  
  lv_info.getitem(ll_index,llvi_current)  
  ls_data=string(llvi_current.data)  
   
  li_value=GetFileOpenName("图片选择",&  
                    +   ls_filename,ls_name,"BMP",   &  
  +   "BMP   Files   (*.BMP),*.BMP,"   &  
  +   "JPG   Files   (*.JPG),*.JPG,"   &  
  +   "GIF   Files   (*.GIF),*.GIF,"   &  
  +   "JPEG   Files   (*.JPEG),*.JPEG")  
   
  if   li_value=1   then  
  integer   li_filenum,li_loops,li_i  
  long         ll_filelen,ll_bytes,ll_new_bytes  
  blob         lb_out,lb_total  
  ll_filelen=FileLength(ls_filename)  
  li_filenum=FileOpen(ls_filename,STREAMMODE!,READ!,SHARED!)  
  if   ll_filelen>32766   then  
  if   mod(ll_filelen,32766)=0   then  
  li_loops=ll_filelen/32766  
  else  
  li_loops=ll_filelen/32766   +   1  
  end   if  
  else  
  li_loops=1  
  end   if  
   
  for   li_i=1   to   li_loops  
  ll_bytes=fileread(li_filenum,lb_out)  
  lb_total=lb_total   +   lb_out  
  ll_new_bytes=ll_new_bytes   +   ll_bytes  
  fileseek(li_filenum,ll_new_bytes,FROMBEGINNING!)  
  next  
  fileclose(li_filenum)  
   
  sqlca.autocommit=true  
  updateblob   sct_sb_dymc   set   image=:lb_total   where   bdsbh=:is_bdsbh   and   dybh=:ls_data;  
  sqlca.autocommit=false  
   
  if   sqlca.sqlnrows>0   then  
  messagebox("提示信息","图片导入成功")  
  else  
  messagebox("提示信息","图片导入失败")  
  end   if  
  end   if  
   
  Top

5 楼Karey(宇宙星云)回复于 2005-11-07 16:16:24 得分 0

那应该如何将WORD文档保存到IMAGE字段中?  
   
  以下就是我用SELECT查询出来的数据  
  0x453A5C50726F6772616D5CBBB7B1A35C68626A73786D5F6578655CBBB7BEB3D3B0CFECB1A8B8E6B1ED2E646F63  
  Top

6 楼lzheng2001(1加1)回复于 2005-11-07 16:16:50 得分 0

你把选择图片文件改成WORD文档就行了Top

7 楼Karey(宇宙星云)回复于 2005-11-07 16:36:36 得分 0

其实,我真的对这方面的知识缺乏...  
   
  那如何将WORD文档拿出来看?Top

8 楼Karey(宇宙星云)回复于 2005-11-07 17:23:47 得分 0

如何用WORD将刚才存入的WORD文档读出来?是否有OLE控件读出?可不可以直接打开WORD来看?Top

9 楼lzheng2001(1加1)回复于 2005-11-07 18:34:43 得分 0

取数据用  
  selectblob   帮助上有例子.    
  再用filewrite把blob写到临时文件上,然后调用WORD打开就可以了.    
  Top

10 楼Karey(宇宙星云)回复于 2005-11-07 23:22:44 得分 0

请问什么情况会出现文件导入失败的错误?如何避免?Top

11 楼Karey(宇宙星云)回复于 2005-11-08 08:48:04 得分 0

急~~~,SOS!  
  用了以下代码实现写到临时文件上,可惜的是写是写进去了,但打开时出现"文档的名称或路径无效"的错误.  
   
  String   ls_Doc,   ls_path  
  Blob   tt,lblb_temp  
  Int   li_FileNum,li_len,li_loops,i  
  Long   ll_Read  
   
  ls_Doc   =   "spzl.Doc"  
  ls_path   =   GetCurrentDirectory()   +   "\Doc\"   +   ls_Doc  
   
  messagebox("",ls_Path)  
   
  IF   FileExists(ls_Doc)   THEN     FileDelete(ls_path)  
   
  li_FileNum   =   FileOpen(ls_path,StreamMode!,Write!,LockWrite!,Replace!)  
   
  IF   li_FileNum   <   1   THEN  
  MessageBox('错误','写入文件'+ls_path+'出错!',stopsign!)  
  FileClose(li_filenum)  
  RETURN  
  END   IF  
   
  SELECTBLOB   cFileName  
      INTO   :tt  
      FROM   test     ;  
   
  li_len   =   Len(tt)  
   
  //如果文件大于32765,判断需要多少次读取  
  IF   li_len   >   32765   THEN  
      IF   Mod(li_len,   32765)   =   0   THEN  
            li_loops   =   li_len/32765  
      ELSE  
            li_loops   =   (li_len/32765)   +   1  
      END   IF  
  ELSE  
  li_loops   =   1  
  END   IF  
   
  ll_Read   =   1  
   
  for   i=1   to   li_loops  
  lblb_temp   =   BlobMid(tt,ll_Read,32765)  
  FileWrite(li_FileNum,   lblb_temp)  
  ll_Read   +=   32765  
  next  
  Fileclose(li_FileNum)  
   
  messagebox("","文件导出成功!")  
  Top

12 楼Karey(宇宙星云)回复于 2005-11-08 10:23:18 得分 0

反复试过,原来超过31.2K时存入不成功,请问如何解决该问题?我写的代码有截取存储的,为何还是如此?Top

相关问题

  • 如何用VB向word文档中加字段。
  • ADO如何存取Access 2000中的OLE字段(Word文档)
  • 如何在Blob字段(存放word文档)中进行检索?
  • 列举将ACCESS的OLE字段(存的是WORD文档),写入WORD文档的方法,UP者有分!
  • 关于Delphi中用Word文档作为字段记录的问题。
  • 可不可以将WORD文档存SQL SERVER 的image类型的字段?
  • 可不可以将WORD文档存到SQL SERVER 的image类型的字段?
  • 规整的word文档,怎么将其按字段导入数据库中?
  • 如何用VB将本地WORD文档放入ACCESS数据库OLE字段中?
  • 如何在自己程序中读入和写出WORD文档(*.DOC)和PowerPoint文档(*.ppt)

关键词

  • 字段
  • 文档
  • word
  • 文件
  • 查询
  • jpeg
  • sql
  • li
  • filenum
  • ls

得分解答快速导航

  • 帖主:Karey
  • lzheng2001

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo