在Power Builder抛出错误中检索功能

时间:2015-07-09 20:00:46

标签: powerbuilder

我正在使用power builder版本9.在PB窗口中单击一个按钮时,其抛出错误“无效游标”。调试时发现了点击事件背后的sql查询。手动执行sql查询后,它给我正确的输出。但是在检索功能中,它在调试模式下给出了以下错误

  1. Sqldbcode = 999
  2. “选择错误:SQLSTATE = 2400 [Microsoft] [ODBC SQL Server驱动程序]无效的游标状态”。任何帮助都非常感谢。感谢

    string  szPool, szSQL 
    
    szPool = Message.StringParm
    dw_select.SetTrans(SQLCA)
    
    szSQL = "SELECT gl_year=convert(int,NULL), gl_period=convert(int,NULL),     comb=max(convert(decimal(8,2),convert(decimal(8,2),gl_year) + convert(decimal(8,2),gl_period) / 100)), " + &
        "fd_changed_hr_id, fd_changed_date, fd_admin_fee_rate " + &
        "INTO #temp1 FROM fd_pool_af_history WHERE fd_pool = '" + szPool + "' GROUP BY fd_changed_hr_id, fd_changed_date, fd_admin_fee_rate " + &
        "UPDATE #temp1 SET " + &
        "gl_year = convert(int,substring(convert(varchar(25), comb),1,4)), " + &
        "gl_period = convert(int,substring(convert(varchar(25), comb),6,2)) " + &
        "SELECT gl_year, gl_period, 0, fd_changed_hr_id, fd_changed_date, fd_admin_fee_rate " + &
        "FROM #temp1 "
    dw_select.Object.DataWindow.Table.Select = szSQL
    dw_select.Retrieve(szPool)
    

1 个答案:

答案 0 :(得分:0)

数据窗口用于根据select语句查询数据,然后修改它(插入,更新,删除)或使用select返回的结果。

您的SQL字符串中有3个单独的查询,这些查询不是数据窗口的工作原理(也就是为什么它在您手动运行但不在数据窗口内时有效):

(1)将数据提取到临时表

SELECT gl_year=convert(int,NULL), 
       gl_period=convert(int,NULL),     
       comb=max(convert(decimal(8,2), convert(decimal(8,2),gl_year) + convert(decimal(8,2),gl_period) / 100)),
       fd_changed_hr_id, 
       fd_changed_date, 
       fd_admin_fee_rate 
  INTO #temp1 
  FROM fd_pool_af_history 
 WHERE fd_pool = <szPool>
 GROUP BY fd_changed_hr_id, 
          fd_changed_date, 
          fd_admin_fee_rate;

(2)更新临时表中的值

UPDATE #temp1 
   SET gl_year = convert(int,substring(convert(varchar(25), comb),1,4)), 
       gl_period = convert(int,substring(convert(varchar(25), comb),6,2));

(3)查询临时表中的数据

SELECT gl_year, 
       gl_period, 
       0, 
       fd_changed_hr_id, 
       fd_changed_date, 
       fd_admin_fee_rate 
  FROM #temp1;

在你的情况下,你想要做的只是创建一个带有String检索参数(as_szPool)的数据窗口对象,它将(1)和(2)组合在一起并有效地返回(3)的结果。因此,驱动数据窗口的查询将如下所示:

SELECT convert(int,substring(convert(varchar(25), comb),1,4)) gl_year, 
       convert(int,substring(convert(varchar(25), comb),6,2)) gl_period,
       0,
       fd_changed_hr_id, 
       fd_changed_date, 
       fd_admin_fee_rate 
  FROM (SELECT max(convert(decimal(8,2), convert(decimal(8,2),gl_year) + convert(decimal(8,2),gl_period) / 100)) comb,
               fd_changed_hr_id, 
               fd_changed_date, 
               fd_admin_fee_rate 
          FROM fd_pool_af_history 
         WHERE fd_pool = :as_szPool
         GROUP BY fd_changed_hr_id, 
                  fd_changed_date, 
                  fd_admin_fee_rate
       ) data

然后,您的dw_select.Retrieve(szPool)来电将返回您正在寻找的数据。

此处还有datawindow.table.select property

的详细信息