转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> SyBase >> 正文
PowerBuilder应用开发系列讲座(36)         ★★★★

PowerBuilder应用开发系列讲座(36)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:716 更新时间:2009/4/22 22:54:22
p align="center">FUNCky的使用

  FUNCky是一个PowerBuilder应用程序库,它提供了16位和32位两种应用库,其中包含了大量的底层函数,免去了开发人员亲自动手使用C语言编写动态链接库来处理很多常用的诸如文件操作、字符串操作、位操作等功能。使用Funcky能大大提高开发效率。本篇简单讲述一下如何在PowerBuilder中使用Funcky。

将FUNCky加到您的应用中

  FUNCky提供了16位和32位的运行库Funcky.dll、Funcky16.pbl和Fun cky32.dll、Funcky32.pbl,应用程序调用的函数或过程都在该动态链接库和PBL文件中。安装完FUNCky后,两个动态链接库被拷贝到 Windows的System目录下,两个PBL则在安装的目录下。使用时将用到的函数在应用的GlobalExternalFunction或LocalExternalFunction中作相应的声明即可,如需使用全部函数则可以将整个PBL文件加到您应用的搜索库中。函数原型定义可以从相应函数帮助中获得。

  除帮助文件中提供的函数以外,在funcky.dll中还有其它的 一些未公开的函数在Funcky.pbl中被调用,这些函数用户也可以使用。使用Funcky要注意的几点在应用中,只将使到的函数加到函数原型声明中去,不要声明过多的函数原形,否则运行时系统可能会报函数原型不匹配错误;如只需使用少量函数,用户尽量不要将FUNCky.pbl加到应用中使用,因为那将需要大量的函数原型声明才能编译通过;某些函数原型是以_开头的定义,这些函数都在Funcky.pbl中有定义,使用者可以直接使用该函数,将Funcky.pbl中的代码直接拷贝到自己的pbl中,或自己编写相关的PowerBuilder函数。

Funcky函数分类

  Funcky一共提供了12类的函数:位操作函数块和内存操作函数 数据转换函数 DBF文件访问函数磁盘访问函数DOS环境函数日期函数低级文件操作函数转换函数字符串操作函数系统资源函数时间操作函数

举例说明

  下面我们举几个例子,说明一下这些函数的使用。我们着重介绍的是DBF文件访问,块操作和内存操作、低级文件操作等这几类函数,这是大家在应用中经常要用到的,而PowerBuilder本身却不提供的操作。我们经常在PowerBuilder应用中遇到有关图象存储和显示的问题,而在这方面,PowerBuilder本身的处理功能较弱,在实际应用中经常无法达到用户的要求。我们可以借助Funcky的函数来处理图象文件。

  例如在应用中需要存储、查询、显示和打印照片,一般开? 员使用OLE嵌入的方法来做,但是如果获得的每一幅照片的规格不完全一样,这样显示和打印的效果就很差,采用这种方法制作通行证或身份证上的照片几乎是不可用的。解决这一问题,所使用的较简单的方法是,以bitmap格式在数据库中存放图象数据,显示/打印时,将数据取出在本地保存成为临时文件,根据图象的尺寸进行等比例缩放显示在图象控件上,这样既能达到界面的要求,又能获得高质量的图象。我们可以借助Funcky函数来解决这样几个问题:bitmap图象文件存储效率不高,在数据库中占据的空间过大,可在存入前使用fcompress函数对图象文件进行压缩:

函数声明:
FUNCTIONlongfcompress(strings,stringd) LIBRARYFUNCky32.DLL
//定义压缩函数原型 SCRIPT: retcode=fcompress(ls_path,_tmp.tmp)
//压缩文件 choosecaseretcode ...
//检查返回值 Endchoose ...//将压缩后的文件保存到数据库中

  fdcompress的压缩效率不高,但速度很快,还是值得使用的。 bitmap图象的宽和高保存在该文件的第18和第22个字节中,不用Funcky函数很难读出这两个字节的信息。下面一段程序是解压 缩和计算BMP图象的宽和高

函数声明:
//定义从二进制数据中读取一个长整形函数原型
FUNCTIONlong_blob2long(refblobb,uinto) LIBRARYFUNCky32.DLL
//定义解压缩函数原型
FUNCTIONlongfdcompress(strings,stringd) LIBRARYFUNCky32.DLL SCRIPT: ...//从数据库中将数据取出保存在文件$fgd.bmp中
status=fdcompress($fgd.bmp,_fgd.bmp)
//解压缩 choosecasestatus ...
//检查返回值Endchoose ...
//将_fgd.bmp读入blob变量pic ll_width=_blob2long(pic,18)
//读图象宽度 ll_height=_blob2long(pic,22)
//读图象高度 //根据指定的宽和高计算缩放比例bili_width=integer(sle_width.text)/ll_width bili_height=integer(sle_height.text)/ll_height
//得到显示宽度和高度 p_width=ll_width*min(bili_width,bili_height) p_height=ll_height*min(bili_width,bili_height)

  我们可以看到Funcky函数的使用非常简单,能够轻松做到在PowerBuilder中很难实现的操作。在应用中您可能会遇到直接读取DBF文件的情况,处理这类问题的方法一般有两种经典的方法:一是使用数据窗口读DBF文件,二是指定一个磁盘目录作为数据区,用ODBC连接这个目录,使用时规定用户必须将DBF文件拷贝到这个目录下。但是这两种方法都缺乏灵活性,而在Funcky中却提供了直接读DBF文件的函数。在Funcky32.pbl中有一个dbffieldget()函数可以获取该DBF文件的字段名称。不过根据我们“尽量不使用Funcky32.pbl”的原则,自己手工编写一个实现该功能的代码。

定义外部函数:

FUNCTIONlongdbfOpen(stringf,into) LIBRARYFUNCky32.DLL FUNCTIONbooleandbfEof(longd)
LIBRARYFUNCky32.DLL FUNCTIONintdbfClose(longd) LIBRARYFUNCky32.DLL FUNCTIONlongdbfSkip(longd,longc) LIBRARYFUNCky32.DLL FUNCTIONuintdbfFieldSize(longd,intp) LIBRARYFUNCky32.DLL SUBROUTINE_dbfFieldGet(longd,intp,refstringb) LIBRARYFUNCky32.DLL FUNCTIONintdbfFieldPos(longd,stringn) LIBRARYFUNCky32.DLL SCRIPT: //以读写和拒绝其他用户写的方式打开dbf数据库
dowhile1=1 dbf=dbfopen(ls_file,2+32) ifdbf$#@60;$#@62;0then exit endif loop
//读dbf数据 //ii_xx_count是需要读的dbf字段的总数 //is_dbf[]是字段名称数组 dowhilenotdbfeof(dbf) fori=1toii_xx_count p=dbffieldpos(dbf,upper(is_dbf[i])) //获取字段的位置 ls_tmp=space(dbffieldsize(dbf,p)+1)
//根据字段的大小初始化存放数据的变量 _dbffieldget(dbf,p,ls_tmp)
//将数据读入到ls_tmp中 next dbfskip(dbf,1)
//使dbf操作指向下一条记录 loop dbfclose(dbf) //关闭打开的dbf文件

  这样直接读取DBF信息,给应用带来的好处是显而易见的。对于数据库的用户管理,我们一般会采用在数据库中建立一个表,记录用户名称、口令等信息,在用户登录时,应用检索这个表的信息,同用户输入的内容核对。按照一般系统管理的规定,每一个用户的口令,其他人是无法在系统中查到的。即使是系统管理员也只有删除登录用户的权利,而无法获取用户的口令。可是由于系统管理员可以读取数据库中的每一张表,因此他是就有机会看到用户的登录口令的,因此我们应当在口令字段存入数据库前对其进行加密。Funcky提供了encrypt()函数和decrypt()函数就可以用来完成这一工作,这就避免了程序员手工编写加密算法的麻烦了。

  此外,Funcky在16位Windows下还有许多底层的操作,包括中断的调用和直接操作磁盘的函数,可以用以软件加密的工作,这里就无法详述了。总之,Funcky提供了较多的函数功能,有条件的读者可以在以后的应用中尝试使用,相信会给PowerBuilder的开发带来一定的方便。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台