pb中日期变量减1天如何实现date1

pb中日期变量减1天如何实现date1,第1张

在Protocol Buffers (PB)中,日期变量一般使用标准的 UNIX 时间戳来表示。UNIX 时间戳是一个以秒为单位的整数值,从1970年1月1日零点开始计算,表示从那个时刻到当前时刻的秒数。

如果要实现日期变量减去1天的 *** 作,可以按照以下步骤进行:

将日期变量转换为 UNIX 时间戳,即将日期变量转换为距离 1970 年 1 月 1 日零点的秒数。

将这个时间戳减去 24 小时(即 24 60 60 秒),得到新的时间戳。

将新的时间戳转换回日期变量的格式。

具体实现方式可以根据所使用的编程语言和 PB 库来进行。以 Python 中使用 googleprotobuf 库为例,代码如下所示:

python

from googleprotobuftimestamp_pb2 import Timestamp

import datetime

# 假设 date1 是一个日期变量

# 将 date1 转换为 Timestamp 对象

ts = Timestamp()

tsFromDatetime(date1)

# 将 Timestamp 对象转换为 datetime 对象

dt = datetimedatetimefromtimestamp(tsToSeconds())

# 将 datetime 对象减去 1 天

dt -= datetimetimedelta(days=1)

# 将 datetime 对象转换回 Timestamp 对象

tsFromDatetime(dt)

# 将 Timestamp 对象转换回日期变量

date1 = ts

需要注意的是,以上代码中的 date1 是一个 Protobuf 的 Timestamp 类型对象。如果你的 PB 文件中日期变量的类型不是 Timestamp,而是其它类型,那么在转换时间戳和日期变量时可能会有所不同。

1引言

在管理信息系统的开发中,经常需要获取本地计算机中的树形目录结构和相应的文件信息,如进行目录的选择和特殊文件的选取,在PowerBuilder(简称PB)中并没有提供专门的树形目录对象,这样就需要程序开发人员自己来实现相应的树形目录。本文针对这种情况,提供了一种用纯PB代码实现树形结构的方法。

2PB中树形目录的实现方法

PB中实现树形目录可以利用Windows本身的API函数SHBrowseForFolderA(包括在shell32dll文件中),但该API函数只能显示相应的树形目录,不能显示文件信息,而且用户对它不能进行灵活的控制。因此,如果需要进行灵活控制,就需要程序人员自己编写相应代码。

PB中的ListBox列表框控件提供了显示目录和文件的能力。在程序中可以利用PB的树形控件TreeView动态生成树形目录结构。我们使用ListBox控件的函数DirList来实现,函数DirList以满足条件的文件名填充列表框的列表项,其使用方法如下:

listboxnameDirList(文件模式,文件类型)

其中文件类型的值如下所示:

0 可读/可写文件 2 隐含文件 16 子目录 16384 驱动器

1 只读文件 4 系统文件 32 归档文件 32768 除可读/可写外所有类型

在程序中可将几种类型的值相加以获取相应的文件或目录信息。下面结合一个实例介绍树形目录的实现方法,程序界面如图1所示。

图1 树形目录实现的实例

通过树形目录可以获取计算机中的任意目录,然后显示需要显示的文件(本例中显示浏览器可以查看的文件类型:htm,html,swf,gif,jpg,txt等)。程序中主要使用的控件如下所示:

控件名 类型 说明

tv_dir TreeView 显示树形目录

lb_file ListBox 显示相应目录中的文件

ole_disp Microsoft Web浏览器控件 对选定文件进行浏览

lb_dir ListBox 显示驱动器信息

lb_next ListBox 显示当前目录下级目录信息

实现原理

PowerBuilder中有一种以PSR为后缀的特殊的保存报表的文件格式(本文简称PSR文件) 数据窗口可以直接读取PSR文件生成报表 而程序通过生成PSR文件 就可以实现动态报表格式的保存

首先 通过设置数据窗口对象(dataobject)中的文本 列等的Resizeable和moveable属性为 来实现对象位置的拖动控制 通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)

其次要保存报表格式 在一个应用中 数据窗口对象的名称总是惟一的 将每一个数据窗口对象转化成PSR文件存于数据库表中 在窗口打开时 程序先校验报表格式是否存在 如果存在 将报表格式读出来放在一个临时文件当中 然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件 并提取数据 如果不存在 直接提取数据即可

实现过程

建立一个数据库表用以保存报表格式文件

建立一个窗口w_temp 定义实例变量如下

string is_dwtype is_dwobject

//保存报表中对象的类型及名称

在窗口的Open事件中加入如下代码 校验报表格式是否存在 如果存在 读取定义好的报表格式到数据窗口

blob emp_pic

long ll_handle

string ls_dwobject ls_reportfile ls_path

ls_dwobject = dw_print dataobject

//判断是否存在该数据窗口的报表格式

select count() into:ll_count from dyn_report where dwobject =:ls_dwobject;

if ll_count> then

//读取报表格式文件到大文本变量

selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject;

//创建PSR临时文件并保存到硬盘

ls_reportfile = \temp psr

ll_handle = FileOpen(is_reportfile StreamMode! write! LockWrite! Replace!)

FileWrite(ll_handle emp_pic)

FileClose(ll_handle)

dw_print dataobject = ls_reportfile

dw_print settransobject(sqlca)

else

Dw_print settransobject(sqlca)

End if

Dw_print retrieve()

保存报表格式 这可以通过Cb_savereport按钮的clicked事件实现

string ls_filename

long ll_count

blob Emp_id_pic

ls_filename = temp psr

//保存报表格式到硬盘临时文件

dw_print saveas(ls_filename PSReport! false)

sqlca automit = true

select count() into :ll_count from dyn_report where dwobject =:is_dwobject;

if ll_count = then

insert into dyn_report(dwobject rptitle)

values( is_dwobject :ls_filename :ls_path)

end if

//从硬盘临时文件读取数据保存到数据库表中

emp_id_pic = of_readbmpfile(ls_filename)

//该函数将二进制文件内容读到大文本对象中

UPDATEBLOB dyn_report SET memo = :Emp_id_pic where dwobject = :is_dwobject;

//更新数据库

sqlca automit = false

动态报表的实现 通过数据窗口dw_print的clicked事件捕获数据窗口中的对象 并将对象名存放在实例变量is_dwobject中 为下一步修改报表做准备

string ls_type ls_dwoname

//得到对象类型和名称

ls_type = trim(upper(dwo type))

ls_dwoname = trim(dwo name)

is_dwtype = ls_type

choose case ls_type

case TEXT CommandButton GROUPBOX

is_dwobject = ls_dwoname

//设置为可以拖动和改变大小

this modify(ls_dwoname+ Resizeable= + )

this modify(ls_dwoname+ moveable= + )

case LINE

//直线对象不能通过设置Resizeable和moveable属性进行调整 必须通过其他途径

is_dwobject = ls_dwoname

case RECTANGLE ELLIPSE GRAPH BITMAP

is_dwobject = ls_dwoname

this modify(ls_dwoname+ Resizeable= + )

this modify(ls_dwoname+ moveable= + )

case COLUMN PUTE

is_dwobject = ls_dwoname

this modify(ls_dwoname+ Resizeable= + )

this modify(ls_dwoname+ moveable= + )

end choose

最后再通过modify()函数就可以实现基本的动态报表 *** 作 这一类的文章较多 PB中也有大量的例子可直接使用 在此不再赘述

在cb_exit按钮的clicked()事件中加入 close(parent)

在应用的open事件中加入 open(w_temp) 然后保存并运行 全部工作到此结束!

本程序在PB Oracle 下调试通过

       编辑推荐

       ASP NET开发培训视频教程

lishixinzhi/Article/program/PB/201311/24637

pb

powerbuilder

太有感情了,2000年时一领数据库应用开发风骚的软件,还以为没有人用pb了呢,和许多开发人员谈到pb,多数人都没听说过,呵呵。记得从pb35-pb7一直伴随着我的开发生涯,pb数据窗口技术,从某种意义上来讲直至今日感觉都没有什么比它更好用的,简直太方便和快捷了。说了一堆废话只是看到pb这个词语掀动了以往的很多记忆,呵呵。

我记得pb本身就有文件系统对话框,包括驱动器、目录系统、文件系统3个对话框,只要互相传递路径就可以,驱动对话框将用户选择驱动器给目录对话框,目录对话框给文件对话框,文件对话框直接可以遍历所有文件系统,因为大概10多年没用过,具体名称忘了,不过方式就是这样,如果要用全代码后台 *** 作,不适用控件,pb好像就要用api了。

最后再抒发一下怀旧心情。。。pb真好,数据窗口技术牛的不得了。祝你好运

;   本文介绍一种在Power Builder(以下简称为PB)中利用OLE把数据库中的数据传送到Word文档的方法 通过这种方法 用户可以根据需求而改变内容 以Word方式打印结果文档 例如 在处理学生成绩时 如果要将每个学生的成绩报告生成Word文档 不同的学生只改变姓名 学号和年度等数据 其他的格式不改变 只要从学生成绩数据库中调出特定数据 插入或替换到已经制作好的Word模版中 即可解决问题

一 创建Word模版文档

Word模板文档的创建根据用户的要求进行 在固定的内容输入完成后 将需要变换内容(例如姓名 年度 系别和证书编号等)的位置输入 student_name student_year department 以及 student_id 等编码 注意: 尽量使用英文来表示这些变量 目的是避免某些汉字相同而造成的误替换

在需要动态改变内容的位置 不需要输入文字 可以通过插入书签的方法实现 具体 *** 作如下 首先 选择在Word中 选择 插入 书签 d出 书签 对话框(如图 所示) 在 书签名 文本框中输入书签名称后 点击 添加 按钮 即在当前光标位置上增加了一个书签 假设我们增加了 个书签 分别是 name year department以及id 分别代表姓名 年度 系别以及证书编号

二 PB实现方法

在窗体中新建一OLE控件 在d出的 insert object 属性窗口的 create new tab 选项卡中选择 Microsoft Word 文档 选项 点击 OK 按钮后将该控件放在窗体中适当位置 PB系统会自动出现Microsoft Word应用程序 将控件命名为 OLE_Word 并创建 打开文件 替换数据 和 存盘 按钮 编写如下代码

.打开文件 string docname named integer value value = getfileopenname( Select File docname named DOC Doc Files ( DOC) DOC ) if value = THEN // 将模版文件另存为实际 *** 作文件(程序略) if ole_Word open(docname)= then ole_Word activate(inplace!) end if end if

这里使用 GetFileOpenName 函数让用户自行选择文件 实际应用时可以进行条件的限定 注意: 需要将模版文件另存为实际 *** 作文件后再打开 不能直接 *** 作模版文件 打开文件参数有 种 其中 inplace 表示在PB程序内部窗口调用Word 部分提供Word的功能菜单; 另一种参数是 offsite 表示PB程序外启动Word应用程序 提供Word的所有功能菜单 简单的演示文档如图 所示

lishixinzhi/Article/program/PB/201311/24577

以上就是关于pb中日期变量减1天如何实现date1全部的内容,包括:pb中日期变量减1天如何实现date1、树形目录在PB中的实现与应用、PB动态报表的实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10160219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存