PB中实现数据窗口动态排序的三种方法[1]

PB中实现数据窗口动态排序的三种方法[1],第1张

 在PowerBuilder中使用数据窗口检索到的数据往往是无序的 虽然可以通过设置Select语句实现排序的功能 但是数据窗口一旦生成都无法进行动态调整

  一 准备工作

 为了更好地比较三种不同的方法 dw 中的数据来自两个表student和class student表中包含四个字段sid(学号) sname(姓名) saddr(住址)和cid(班号) class表中包含两个字段cid(班号)和cname(班级名称)

  二 三种方法的源程序

 三种方法中的 执行 按钮的代码分别为

  方法 :用SetSQLselect()

 string ls oldsql ls newsql ls order ls column

 ls oldsql=dw getsqlselect()

 choose case ddlb text

 case ″学号″ls column=″sid″

 case ″姓名″ls column=″sname″

 case ″住址″ls column=″saddr″

 case ″班号″ls column=″class cid″

 case ″班级名称″ ls column=″cname″

 end choose

 if rb checked then ls order=″ASC″

 else ls order=″DESC″

 end if

 ls newsql=ls oldsql+″ ORDER BY ″+ &

 ls column+″ ″+ls order

 if dw setsqlselect(ls newsql)= then

 messagebox(″警告″ ″数据设置失败″ stopsign!)

 else dw settransobject(sqlca)

 dw reset()

 dw retrieve()

 dw setsqlselect(ls oldsql)

 end if

  方法 :用describe()和modify()

lishixinzhi/Article/program/PB/201311/24607

以下是完整的导入数据的代码:这个要求就是需要使EXCEL的标题和数据窗口的标题对应,EXCEL从第二行开始导入。如果是某些内容,那么要换一种别的方式。

string str_savename,named

int excelok,li_net

oleobject excelserver

excelserver=create oleobject

excelok=excelserverconnecttonewobject("excelapplication")

//检查返回值,以确保已成功地连接到了Excel

if excelok <> 0 then

messagebox("信息提示","连接EXCEL失败,请检查计算机中是否安装了EXCEL!")

return

end if

li_net = GetFileOpenName("选择文件", str_savename,named,"xls","Excel文件(xls),xls")

if li_net > 0 then

if str_savename = "" then return

excelserverworkbooksopen(str_savename)

excelserveractivesheetcellscopy

dw_1importclipboard(2) //导入数据 dw_1是数据窗口名字,改成你的名字

clipboard("")

excelserverquit()

excelserverdisconnectobject()

destroy excelserver

end if

如果只导入EXCEL的某些内容,可以用如下代码:

string ls_tmp

IF GetFileOpenName("选择文件 ", ls_Path, ls_File, "XLS", "Excel Files (XLS),XLS, Comma-separated values (CSV),csv") < 0 THEN

Messagebox('文件导入', '获取文件失败!', StopSign!)

return

END IF

// === 判断档案是否存在

IF FileExists(ls_Path) = False THEN return

// === 判断是否为Excel档案

IF Lower(Right(ls_Path, 4)) <> 'xls' AND Lower(Right(ls_Path, 4)) <> 'csv'THEN

MessageBox('文件导入', '并非可选择的文件!', StopSign!)

return

END IF

oXls = CREATE OleObject

ll_Xls = oXlsConnectToObject('','excelapplication')

CHOOSE CASE ll_Xls

Case -5

// === 文件还没打开

oXlsConnectToNewObject('excelapplication')

Case Is < 0

DESTROY oXls

MessageBox('文件导入', '无法开启指定的文件!', StopSign!)

return

END CHOOSE

Long ll_Row, curRow

Decimal ld_Tmp

curRow = 2 //设置从EXCEL的第二行开始导入

oBook = oXlsWorkBooksOpen(ls_Path)

oSheet = oXlsSheets(1)

DO WHILE True

ls_value = oSheetCells(curRow, 1)Value //读取excel的内容放到变量中,cells(行,列)

IF ls_value = '' THEN Exit //如果遇到空,表示已经导入完成

ll_Row = dw_1InsertRow(0) //给数据窗口增加行

dw_1setitem()

curRow ++

LOOP

oBookClose

DESTROY oSheet

DESTROY oBook

IF ll_Xls = -5 THEN oXlsApplicationQuit

oXlsDisConnectObject()

DESTROY oXls

可能的原因:

如果程序运行过程中动态使用了对象,那么在编译时就必须把该对象所在pbl编译为pbd或dll,或者在pbr文件里列出动态使用的对象,否则编译后的程序里是不含这个对象的,所以会报错

其实连接数据库的代码,可以在数据库窗口中双击你的数据库,然后点击PREVIEW,点COPY得到

然后后面的

connect;

if sqlcasqlcode<>o then

messagebox("错误信息提示","不能连接数据库!",stopsign!)

return

end if

是自己写的,这样就不会出错了

这个肯定要把你输入的项放到数据库里面去验证了。

你指的是数据窗口么?如果是在数据窗口中输入,使用itemchanged事件,这个事件是在你输入值或者修改值之后马上就触发执行的。

假设数据窗口上有个学号 stu_no的字段,现在你想判断用户输入的是否存在:

if dwoname = 'stu_no' then //如果输入的是学号字段的内容

long ll_count

select count(1) into :ll_count from tb_student where stu_no = :data;

//这里的data是修改之后的值,是事件的参数。这个语句的意思就是到数据库表里面查询你输入这个值在表中一共有多少个,如果没有,那么肯定是0了。

if ll_count > 0 then //如果有了,当然大于0

messagebox("","有值")

return 1 //返回1表示不接受修改,光标无法移动。可以自己看帮助的itemchanged事件返回值说明

end if

end if

对话框可以用MessageBox函数。

1

MessageBox()

  功能显示一个消息对话框。

  语法MessageBox(text,title{,icon{,button{,default}}})

  参数title:string类型,指定消息对话框的标题text:指定消息对话框中显示的消息,该参数可以是数值数据类型、字符串或boolean值icon:Icon枚举类型,可选项,指定要在该对话框左侧显示的图标button:Button枚举类型,可选项,指定显示在该对话框底部的按钮default:数值型,可选项,指定作为缺省按钮的按钮编号,按钮编号自左向右依次计数,缺省值为1,如果该参数指定的编号超过了显示的按钮个数,那么MessageBox()函数将使用缺省值返回值Integer。函数执行成功时返回用户选择的按钮编号(例如1、2、3等),发生错误时返回-1。如果任何参数的值为NULL,MessageBox()函数返回NULL。

  用法:当你的应用程序需要显示一段简短信息(比如显示出错、警告等信息)时,没有必要自己从头创建窗口、安排控件,使用MessageBox()函数既简单又方便。用户只有响应该窗口后,程序才能继续运行下去。MessageBox()函数的icon参数指定显示在窗口中的图标,它是枚举类型,可能取值为:

取值

图标Information!

StopSign!

Exclamation!

Question!

None!

无图标其中Information!是Icon参数的缺省值。Button参数指定在窗口中显示哪些按钮,有效取值为:取值中文Windows

95下显示OK!“确定”按钮OKCancel!“确定”、“取消”按钮YesNo!“是”、“否”按钮

YesNoCancel!“是”、“否”、“取消”按钮RetryCancel!“重试”、“取消”按钮AbortRetryIgnore!“终止”、“重试”、“忽略”按钮

  函数功能:该函数创建、显示、和操作一个消息框。消息框含有应用程序定义的消息和标题,加上预定义图标与Push(下按)按钮的任何组合。

2

例程:

#include

#include

int main()

{

char str[99];

gets(str); //str储存输入的字符串,用来给文本框赋值

MessageBox(0,str,"对话框",MB_OK); //给对话框的文本框赋值str

return 0;

}

欢迎分享,转载请注明来源:品搜搜测评网

原文地址:https://pinsoso.cn/meirong/1138554.html

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

随机推荐

  • 原液和精华液的区别?

    原液比精华液的效果还要好,经常添加在美容产品中,也是因为原液的成分单一,效果强,使用的次数不宜太多,每周使用三至五次就可以,尽量在晚上使用,晚上肌肤会进入深度修复状态,面部血液循环加快,对原液的吸收效果会更加明显。精华液的成分非常复杂,本身

    2024-04-15
    46200
  • 精华液的作用及用法

    精华液的作用及用法  精华液的作用及用法,精华液是所有护肤品里面非常出名的一款护肤品,生活中很多爱美的女性都会买精华液来护理自己的肌肤,那么下面一起来看看精华液的作用及用法。精华液的作用及用法1  精华

    2024-04-15
    46200
  • 平价美白身体乳推荐 趁冬天白回来

    工欲善其事,必先利其器。要想美白,要找好合适的身体乳~如今身体乳还越做越像面部产品了,很多用在脸上的经典美白活性物组合直接被搬到身体乳里去了,身体也能和脸享受同等待遇了~ 接下来我就分享几款平价又好用的美白身体乳吧。1、凡士林3号烟酰胺身体

    2024-04-15
    30500
  • 快要军训了,用什么牌子的防晒霜防晒效果好?

    军训防晒霜品牌推荐:1、泰国mistine小蓝帽泰国的这款防晒霜的确做得很不错,同时很平价。小蓝帽主打的是身体防晒,大瓶一点,并且身体防晒和我们脸部防晒是同样重要的,像一些胳膊还有腿得晒伤,都会引起皮肤的一些泛红等。大家在做好脸部防晒的同时

    2024-04-15
    34800
  • 舒耐 妮维雅 曼秀雷敦止汗,哪个更好?

    舒耐 最好 毕竟是最专业的止汗露 就是比别的贵点如果你在家用 就用喷雾的 卫生 不会污染到里面如果想外出随时都用建议用走珠的 因为喷雾必须脱掉衣服你不可能在公共卫生间脱衣服用 不如走珠的方便用过一些,我总结一下吧雅芳和妮维雅这些

    2024-04-15
    28500
  • 奔驰伊斯坦纳架子号在哪?

    奔驰伊斯坦纳的车架号(VIN码)通常位于以下位置之一:1 发动机舱内:车架号通常位于发动机盖下方,发动机舱前部墙壁上。2 驾驶室内:车架号可能位于仪表板左侧、驾驶员座椅下方、倒车镜附近或中央控制台上。3 车辆外侧:车架号有时也可能位于车辆外

    2024-04-15
    29000
  • 抖音护肤品套盒便宜能用吗

    抖音50元 护肤品靠谱 ,我就买过乳液 效果也非常好 ,温和 没有刺激性成分 很安全 ,乳液质地很轻盈 很好的推开 延展性很好 ,抹在脸上 轻轻按摩至吸收 ,皮肤特别的舒服 凉凉的 ,清爽不油腻 补水保湿效果也很好 皮肤非常的水润润不干燥

    2024-04-15
    26900

发表评论

登录后才能评论
保存