上传图片到服务器
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,运行应用程序即可。