CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  DataWindow

这个问题如何解决?在线等!UP也有分

楼主happyscaiyu(酸菜鱼)2004-01-03 20:59:56 在 PowerBuilder / DataWindow 提问

在数据窗口中删除当前行后,我想用删掉的这一行后面的一行的行号来Retrieve,如果删除行是最后一行,则用第一行的行号来Retrieve,请问各位如何实现? 问题点数:80、回复次数:24Top

1 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:08:21 得分 50

在删除代码中这么写:  
   
  Int   Row  
   
  Row=dw_1.GetRow()  
  dw_1.DeleteRow(Row)  
  If   Row>dw_1.RowCount()   Then  
        dw_1.Retrieve(1)  
  Else  
        dw_1.Retrieve(Row)  
  End   IfTop

2 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 21:23:58 得分 0

出错:Retrieve   argument   1   does   not   match   expected   type  
   
  Dw_1的retrieve参数是string型,可是加引号还是出错Top

3 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:25:33 得分 0

Retrieve(String(1))Top

4 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 21:33:35 得分 0

还是出错,真搞不懂  
  Top

5 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:35:49 得分 0

什么地方出错,你的检索参数是怎么定义的   出错信息是什么?Top

6 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:37:27 得分 0

如果检索参数类型为String,这么写:  
  Int   Row  
   
  Row=dw_1.GetRow()  
  dw_1.DeleteRow(Row)  
  If   Row>dw_1.RowCount()   Then  
        dw_1.Retrieve(String(1))  
  Else  
        dw_1.Retrieve(String(Row))  
  End   If  
  Top

7 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 21:43:58 得分 0

删除代码如下:  
  string   ls_id  
  integer   li_rowcount  
  integer   li_getrow  
  li_rowcount   =   dw_1.RowCount()  
  li_getrow   =   dw_1.GetRow()  
  ls_id   =   dw_1.object.p_line_id[dw_1.GetRow()]  
   
  Integer   li_return  
  Integer   li_i  
  li_return   =   messagebox("系统提示",   "确定删除该记录吗?",   question!,   YesNo!,   2)  
  IF   li_return   <>   1   THEN   return  
   
  DELETE   FROM   product_line  
  WHERE   p_line_id   =   :ls_id;  
   
  IF   SQLCA.SQLCode   <>   0   THEN  
  messagebox("系统提示",   "删除该记录失败!")  
  ROLLBACK;  
  ELSE  
  COMMIT;  
  li_i   =   messagebox("系统提示",   "该记录已被成功删除!")  
  if   li_getrow   >   dw_1.RowCount()   then  
  dw_1.Retrieve(1)  
  else  
  dw_1.Retrieve(li_getrow)  
  end   if  
  END   IF  
   
  出错信息:Retrieve   argument   1   does   not   match   expected   typeTop

8 楼icedot(小雨)回复于 2004-01-03 21:46:30 得分 10

这个错误就是你的参数类型不相同。  
   
   
  你用了。   CodeMagic(写错了吧)   的方法还是错了吗?不会吧。Top

9 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:51:41 得分 0

你的数据窗口为FreeForm风格的吧?  
  你可以在删除前先记录下一条记录的主键,而不是它的记录编号,这样写:  
   
  String   Id  
   
  ......  
  ......  
   
  li_getrow   =   dw_1.GetRow()  
  If   li_getrow=dw_1.RowCount()   Then  
        Id=dw_1.GetItemString(1,'为主键的列名')  
  Else  
        Id=dw_1.GetItemString(dw_1.RowCount()   +1,'为主键的列名')  
  End   If  
   
  ....  
  ....  
   
  把  
                    COMMIT;  
  li_i   =   messagebox("系统提示",   "该记录已被成功删除!")  
  if   li_getrow   >   dw_1.RowCount()   then  
  dw_1.Retrieve(1)  
  else  
  dw_1.Retrieve(li_getrow)  
  end   if  
  改为:  
  Commit;  
  dw_1.Retrieve(Id)  
   
   
   
   
  Top

10 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:53:25 得分 0

li_getrow   =   dw_1.GetRow()  
  If   li_getrow=dw_1.RowCount()   Then  
        Id=dw_1.GetItemString(1,'为主键的列名')  
  Else  
        Id=dw_1.GetItemString(dw_1.RowCount()   +1,'为主键的列名')  
  End   If  
  dw_1.DeleteRow(li_getrow)Top

11 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:01:35 得分 0

是啊,我的Retrieve参数类型是String啊,真是奇怪Top

12 楼CodeMagic(ErrorDetector)回复于 2004-01-03 22:04:03 得分 0

你按照我写的代码改了么?Top

13 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:10:50 得分 0

改了,还是不行  
  Top

14 楼CodeMagic(ErrorDetector)回复于 2004-01-03 22:12:40 得分 0

你的数据窗口为FreeForm风格的吗?  
  你为主键设的检索条件吗?  
  什么错误?Top

15 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:31:01 得分 0

真是麻烦你了,我都不好意思了。  
  我的数据窗口为FreeForm风格,   没有为主键设的检索条件  
  你再看看代码:  
  string   ls_id,   ls_next_id  
  integer   li_rowcount  
  integer   li_getrow  
  li_rowcount   =   dw_1.RowCount()  
  li_getrow   =   dw_1.GetRow()  
  ls_id   =   dw_1.object.p_line_id[dw_1.GetRow()]  
   
  If   li_getrow=dw_1.RowCount()   Then  
        ls_next_id   =   dw_1.GetItemString(1,   'p_line_id')  
  Else  
        ls_next_id   =   dw_1.GetItemString(dw_1.GetRow()   +   1,   'p_line_id')  
  End   If  
   
   
  Integer   li_return  
  Integer   li_i  
  li_return   =   messagebox("系统提示",   "确定删除该记录吗?",   question!,   YesNo!,   2)  
  IF   li_return   <>   1   THEN   return  
   
  DELETE   FROM   product_line  
  WHERE   p_line_id   =   :ls_id;  
   
  IF   SQLCA.SQLCode   <>   0   THEN  
  messagebox("系统提示",   "删除该记录失败!")  
  ROLLBACK;  
  ELSE  
  COMMIT;  
  dw_1.Retrieve(ls_next_id)  
  END   IF  
  Top

16 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:34:10 得分 0

错误信息为:Invalid   Datawindow   Row/Column   Specified   at   line   12   in   clicked   event....Top

17 楼CodeMagic(ErrorDetector)回复于 2004-01-03 22:42:21 得分 0

把  
  DELETE   FROM   product_line  
  WHERE   p_line_id   =   :ls_id;  
  改为  
  dw_1.DeteleRow(li_getrow)Top

18 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:49:42 得分 0

今晚是弄不出来了,头都大了.  
  无论如何还是谢谢你了,请明天再帮忙Top

19 楼CodeMagic(ErrorDetector)回复于 2004-01-03 23:29:06 得分 0

在删除部分这样写即可:  
   
  Int   Row  
   
  If   MessageBox('系统提示','确定删除该记录吗?',Question!,YesNo!,2)<>1   Then   Return  
   
  Row=dw_2.GetRow()  
  dw_2.DeleteRow(Row)  
   
  If   Row>dw_2.RowCount()   Then  
        dw_2.ScrollToRow(1)  
  Else  
        dw_2.ScrollToRow(Row)  
  End   IfTop

20 楼CodeMagic(ErrorDetector)回复于 2004-01-03 23:39:03 得分 0

1     删除后,使用检索条件是错误的。因为使用带参数的检索条件,那么检索出来的记录只有一条,这相当于这一次删除操作删除了N-1   条记录,这是不正确的。  
   
  2     在别的地方进行更新,例如在窗体关闭时进行Commit;   ,不要在删除部分进行Commit;   。更新代码如下:  
   
  If   dw_2.Update()<>1   Then  
        Rollback;  
  Else  
        Commit;  
  End   IfTop

21 楼zhaotjh(我堕落了……)回复于 2004-01-03 23:55:08 得分 5

up哦Top

22 楼sinkiangscorpio(诸葛军师)回复于 2004-01-04 20:31:09 得分 5

你应该告诉我们出错在哪一行?Top

23 楼banalman(IT解放者)回复于 2004-01-04 20:52:28 得分 5

 
  您删除记录通过后台来的,而数据窗口没有同步。  
  出现的错误提示,就是例如下面的情况就会出现错误。如果数据窗口只有一行,那么您的代码显然会出现错误。  
   
  另外您的这种做法有点怪,我想问问您究竟想实现怎样的功能。Top

24 楼dingzhaofeng(Alading)回复于 2004-01-04 21:28:15 得分 5

upTop

相关问题

  • 这个sql如何搞掂!90分等你拿!在线等待!!!!
  • 这个触发器如何写啊,急,100分在线等
  • 在线给分:请问这个MD5如何使用?
  • 请教这个SQL语句如何写?在线等,即时揭帖给分!
  • 请帮忙如何解决这个问题,一定送50分(我是菜鸟,没多少分)在线等候
  • 这个如何处理!!!(来者有分)
  • 这个如何实现?up有分!!
  • 这个事情如何做?(50分)
  • 如何解析这个网址?(100分)
  • 急:100分:如何处理这个xml

关键词

  • 检索
  • 代码
  • 数据
  • 系统
  • dw
  • getrow
  • 删除
  • li
  • rowcount
  • retrieve

得分解答快速导航

  • 帖主:happyscaiyu
  • CodeMagic
  • icedot
  • zhaotjh
  • sinkiangscorpio
  • banalman
  • dingzhaofeng

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo