String ls_path, ls_file_name, ls_filter, ls_err
Int li_ret, li_loop, li_i, li_file, li_bytes
Long ll_file_len
Blob lb_file, lb_read, lb_pic

// 选择图片文件
ls_filter = "jpg File (*.jpg),*.jpg,bmp file(*.bmp),*.bmp,gif file(*.gif),*.gif"
li_ret = GetFileOpenName("选择头像", ls_path, ls_file_name, "png", ls_filter)
If Isnull(li_ret) Or li_ret < 0 Then
    Messagebox("提示", "打开文件错误!")
    Return
End If

// 读取文件二进制数据
ll_file_len = FileLength(ls_path)
// 5KB
If ll_file_len > 5120 Then
    Messagebox("提示", "文件大小不能超过5KB!")
    Return
End If
// FileRead每次最多读取32765bytes
If ll_file_len > 32765 Then
    li_loop = (ll_file_len / 32755) + 1
Else
    li_loop = 1
End If
    
li_file = FileOpen(ls_path, StreamMode!, Read!, LockRead!)
For li_i = 1 To li_loop
    li_bytes = FileRead(li_file, lb_read)
    If Isnull(li_bytes) Then
        Messagebox("提示", "读取文件错误!")
        Return
    End If
    If li_bytes > 0 Then
        lb_file = lb_file + lb_read
    End If
Next
FileClose(li_file)

// 设置图片
p_avatar.setpicture(lb_file)

// 保存图片
li_i = 0
SELECT COUNT(*) INTO :li_i FROM T_SYS_USER_INFO WHERE USER_GH = :gs_operid;
If li_i > 0 Then
    UPDATEBLOB T_USER SET AVATAR_PIC = :lb_file WHERE USER_GH = :gs_operid;
    If Sqlca.Sqlcode <> 0 Then
        ls_err =  Sqlca.Sqlerrtext
        ROLLBACK;
        Messagebox("提示", "头像保存失败:" + ls_err)
        Return
    End If
    ls_file_name = gs_operid + '_' + String(pub_fc_getdate(), "yyyy-mm-dd")
    UPDATE T_USER SET AVATAR_NAME = :ls_file_name WHERE USER_GH = :gs_operid;
    If Sqlca.Sqlcode <> 0 Then
        ls_err =  Sqlca.Sqlerrtext
        ROLLBACK;
        Messagebox("提示", "头像名称保存失败:" + ls_err)
        Return
    End If
End If
COMMIT;
// 从数据库读取图片
li_i = 0
SELECT COUNT(*) INTO :li_i FROM T_SYS_USER_INFO WHERE USER_GH = :gs_operid;
If li_i > 0 Then
    SELECTBLOB AVATAR_PIC INTO :lb_pic FROM T_USER WHERE USER_GH = :gs_operid;
    p_1.setpicture(lb_pic)
End If

// 图片较小 sqlserver 可用 varbinary(字段长度)类型来保存

PowerBuilder -- 保存图片的更多相关文章

  1. PowerBuilder笔记

    powerbuilder中怎样新建一个pbl文件 在创建pbw之后,右键单击pbw,点新建,弹出对话矿,按图操作,就能创建pbl 主程序入口: 主程序入口代码: // Profile ahzbmysq ...

  2. HTML 保存图片到本地

    具体方法有两种  一种是 利用canvas的 toDataUrl  和Html5 里面的 <a>标签里面的 Download 属性 虽然 Download 的兼容性不怎么样  但是在文章后 ...

  3. Android 保存图片到SQLite

    [转:原文] Resources res = getResources(); Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.ico ...

  4. PowerBuilder 简介及应用 - 数据库系统原理

    PowerBuilder 是一种企业级数据库前端应用和多层体系结构开发工具,友好的用户界面,功能强大的数据窗口,是一个集成开发环境. PB 的特点 采用面向对象的编程方法和事件驱动的工作原理. 支持跨 ...

  5. JS/HTML 保存图片到本地:HTML <a> download 属性

    JS如何保存图片到本地呢?自己百度一下吧! 这里想要说的是,可以利用 HTML 的 <a> 标签 来是实现保存图片到本地的功能,参考代码如下: <a href="http: ...

  6. [Android Pro] Android保存图片到系统图库

    http://stormzhang.github.io/android/2014/07/24/android-save-image-to-gallery/ http://blog.csdn.net/x ...

  7. IOS UIImagePickerController 保存图片到 相册

    // 异步下载图片 dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); disp ...

  8. 利用PBFunc在Powerbuilder中解析Json对象

    利用PBFunc工具在Powerbuilder解析json,只需要调用getattribute方法来获取 解析unicode格式的json: n_pbfunc_json lnv_json lnv_js ...

  9. 利用PBfunc在Powerbuilder中使用https获取微信的AccessToken

    在前篇中讲解了使用PBFunc在Powerbuilder自己进行http的GET和POST操作. 本篇简单用代码演示下https的微信AccessToken的获取: n_pbfunc_http lnv ...

随机推荐

  1. 嵌入式 Linux线程锁详解pthread_mutexattr_t【转】

    转自:http://blog.sina.com.cn/s/blog_8795b0970101il6g.html 在Posix Thread中定义有一套专门用于线程同步的mutex函数. . 创建和销毁 ...

  2. centos7下配置时间同步服务器

    同网段20几台服务器: 其中有一组mysql 集群中 互为主从 选一台mysql master 作为时间同步的服务器,这样做的好处以便于这台down了 另一个与他互为主从的master 继续提供时间同 ...

  3. Cryptography I 学习笔记 --- 密钥交换

    1. 使用可信第三方(Trusted third parties)进行密钥交换. a. Alice与TTP之间的密钥是K1,Bob与TTP之间的密钥是K2. b. Alice向TTP发起一个与Bob交 ...

  4. LOJ N!在不同进制的位数

    lightoj1045 - Digits of Factorial (N!不同进制的位数) 对于一个B进制的数,只需要对其取以B的对数就可以得到他在B进制情况下的位数(取了对数之后可能为小数,所以还需 ...

  5. GDI 编程基础简介

    今天准备重新对GDI的知识进行回顾一下,以便加深认识. 一.GDI 在进行Windows编程时,可能经常会用到设备描述表的类型句柄,例如,最厂家的HDC,它就是图像设备描述类型句柄.因为GDI的绘图函 ...

  6. C# DBHelper类

    class DBHelper { //public static string connstr = "server=.;database=SuperKTV;uid=sa;pwd=123456 ...

  7. C语言对文件的读写操作以及处理CSV文件的方法

    #include <stdio.h> #define F_PATH "d:\myfile\file.txt" int main(void) { FILE *fp = N ...

  8. hduoj1285确定比赛名次

     确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  9. 13.2 处理静态资源【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/51637052目录(?)[-] 默认资源映射 自定义资源映射 自定义目录 使用外部目录 通过 ...

  10. AAuto如何设置定时器

    在设计视图中(一定要有个Form)点击左下角的功能组件   点击定时器即可切换到代码视图,并添加如下代码.其中我每隔一秒改变一下winform.static2.text的文本值