上传图片到服务器

liyunlong 2006-11-19 02:51:18




1、源程序建立

  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

  按照上文中建立数据窗口的blob列的方法建立数据窗口dw_blobsave如图所示:

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


在数据窗口中添加blob列的的步骤

  1) 选择具有二进制字段的数据表作为数据源建立一新的数据窗口(该窗口可以至少需要包含非数据库表的标识列)

  2) 选择insert -control-OLE database blob 菜单,在数据窗口的detail节中要插入blob列的位置单击鼠标,这时将显示如图1所示的对话框

  下面解释这些属性的具体含义

  1) client class: 客户类名,默认为datawindow

  2) client name:客户名,默认为untitled

  3) table: 选择含有blob列的数据库表,所选表的字段将出现在右侧的large binary/text column列表框中。

  4) large binary/text column:选择一个blob类型的字段列

  5) key clause:检索和更新blob数据的关键字表达式其中使用带冒号前缀的变量指出是数据窗口对象的列,如 表达式 id=:id,id是数据库表中的列,变量指出数据窗口对象的列

  6) filetemplate :如果需要OLE应用服务器每次打开相同的文件,则在filetemplate框中输入文件名。

  7) OLE class :如果不需要OLE应用服务器每次打开相同的文件,则在OLE class框中选择一个OLE类,如Pbrush。

  8) Client name expression:显示在OLE服务器应用程序窗口标题的文字,可以输入为:"对应记录的id号是"+id

单击ok按钮关闭对话框,将dbole列添加到适当的位置,保存数据窗口。预览则可以对数据库中的blob数据进行存取,但是在新建的记录中只能存取OLE class框中选择的一种格式的blob数据,不能存储多种格式的数据;但如果数据库中存有多种格式的数据,可以预览各种格式的数据。

  首先创建实例变量 OLEstorage stor1

     2 建立窗口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,运行应用程序即可。
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyunlong 2006-11-20
  • 打赏
  • 举报
回复
不存到服务器....我在C盘有产生了OLE文件了.每次都会增加其大小....
肯定有办法找到了..
liyunlong 2006-11-19
  • 打赏
  • 举报
回复
Error :name not found accessing external object property ole_1 at line 7 in rowfocuschanged event of object dw_1 of w_oleblob
liyunlong 2006-11-19
  • 打赏
  • 举报
回复
就是做图片上传啊
  • 打赏
  • 举报
回复
晕啊,太长了,直接说主题吧,哪里出错了?
liyunlong 2006-11-19
  • 打赏
  • 举报
回复
这样做完后出现了....undefined variable:ole_1错误.........

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧