问题1:

      有表  areatab 如下

id    parentid    areaname    areanum
18    0    县    001000000
19    18    县城    001001000
21    18    马武    001002000
22    18    下路    001003000
23    18    鱼池    001004000

在 pb中写如下语句,

int  noarea = 18

int boys
SELECT count(*) INTO  :boys  FROM areatab WHERE parentid = :noarea ;

得到的boys 是0,sqlcode 是 -1,不知道错在那里。

在 数据库的查询分析器中运行

SELECT count(*)   FROM areatab WHERE parentid = 18 ;

能得到正确的结果。

问题2:

语句   update Tempfld set dsp = :display where  fldname = :fdname     ;  执行不成功,

上下文如下:

     // 从配置文件中读取字段显示状态,1、显示,0、不显示

 DECLARE curfdname CURSOR FOR 
  SELECT fldname  
    FROM Tempfld  ;
     
string fdname
int  display

open curfdname ;

FETCH curfdname INTO :fdname;

DO WHILE sqlca.sqlcode = 0

    display  = profileint(gs_inifn,"dspfield" ,w_ty.curtabname+"."+fdname ,1 )   
   
    update Tempfld set dsp = :display where  fldname = :fdname
    ;

   
    if sqlca.sqlcode =0 then
        messageBox("failed.",fdname);
    end if
   
    if 1 = display  then
        lb_1.additem(fdname)
    else
        lb_2.additem( fdname)
    end if
   
    FETCH curfdname INTO :fdname;

LOOP
   
CLOSE curfdname;

换成如下语句,还是不行。

//    mysql = "update tempfld set dsp= "+string(display)+" where fldname='"+fdname+“‘”
//        EXECUTE IMMEDIATE :Mysql ;

思考中,寻求解决

 

.................以下是10月16日晚  追加.........................

经过一下午的煎熬,反复查看了sql 帮助和进行程序调试,终于发现 了一个问题的原因。

select into  和  select 是不同的语句,select into 必须接一个表名,犯了一个低级的错误,在此给自己和网友提个醒,以免走了弯路。