关于getitemnumber函数的问题!!!急!!!在线等待,高分马上给!

时间:2021-09-26 23:56:18
我做的图书管理系统中,在借书窗口,有这样一个问题,当输入图书的编号后,首先要判断数据库中是否有该书,如果没有则返回。我用了两种方法写代码:
第一种:
//判断是否有该书
int bookid,bookid1
bookid = dw_1.getitemnumber(1,"title_id")
select title_id into :bookid1 from title where title_id = :bookid;
if bookid1 = 0 then
   messagebox("提示","无该图书编号,请重新输入!")
//dw_1.setitem(1,"title_id","")
return
end if

但是不起作用,我输入一个不存在的编号,也不给我提示,直接执行后面的代码,这段代码好象根本就没有执行,我怀疑是getitemnumber函数用的不对,但是编译也没有报错,请高手们帮我看看是怎么会事?

第二种方法:
//判断是否有该书
   string bookid
   bookid = trim(dw_1.getitemstring(1,"title_id"))
   dw_1.setfilter("title_id = '"+bookid+"'")
dw_1.retrieve()
if dw_1.rowcount() < 1 then
MessageBox("提示","无该图书编号,请重新输入!")
return 
end if
这段代码是我抄书上的,但是也不对。

急,请大家帮我解决一下。感激不尽!

12 个解决方案

#1


第一种:
//判断是否有该书
int bookid,bookid1,li_count
bookid = dw_1.getitemnumber(1,"title_id")
select count(title_id) into :li_count from title where title_id = :bookid;
if li_count = 0 then   //或者if sqlca.sqlcode=100 then //注意判断条件
   messagebox("提示","无该图书编号,请重新输入!")
    //dw_1.setitem(1,"title_id","")
    return
end if

第二种方法:
//判断是否有该书
   string bookid
   bookid = trim(dw_1.getitemstring(1,"title_id"))
   dw_1.setfilter("title_id = "+bookid) //注意去掉单引号
    dw_1.retrieve()
    if dw_1.rowcount() < 1 then
        MessageBox("提示","无该图书编号,请重新输入!")
        return 
    end if

#2


你判断一下sqlca的值。
int bookid,bookid1
bookid = dw_1.getitemnumber(1,"title_id")
select title_id into :bookid1 from title where title_id = :bookid;
if sqlca.sqlcode = -1 then 
   messagebox('error',sqlca.sqlerrtext)
   return 
end if
if bookid1 = 0 or isnull(booid1)then
   messagebox("提示","无该图书编号,请重新输入!")
//dw_1.setitem(1,"title_id","")
return
end if

#3


至于是使用getitemnumber()还是使用getitemstring()函数,要看title_id这个列的数据类型,如果是INTEGER即整型的就使用getitemnumber(),如果是CHAR即字符型的就使用getitemstring()函数。
还有把下面的代码:
select title_id into :bookid1 from title where title_id = :bookid;
if bookid1 = 0 then
   messagebox("提示","无该图书编号,请重新输入!")
    //dw_1.setitem(1,"title_id","")
    return
end if

改成:
bookid1 = -1
select count(title_id) into :bookid1 from title where title_id = :bookid;
if bookid1 = 0 then
   messagebox("提示","无该图书编号,请重新输入!")
   return
end if


试试

#4


我觉得可能有2个问题,一个就是图书编号太长,你是不是应该用长整形变量呢?或是变量不匹配?二是你输入的图书编号怎么不见你用呢??既然你用到了数据窗口怎么还直接去库中查数据呢??
   我不知道你的实际程序,只是猜测的,希望不要误导你才好

  

#5


你将所有要判断的地方赋值给局部变量,然后debug看看他的数值是什么。检查到底是那个地方你疏忽了。看过程你写的是对的阿。
  祝好运

#6


你可以再做一个数据存储 DATASTORE,它的数据窗口对象为所有图书的编号,先把他全部检索出来。
当输入图书编号之后,就开始在数据存储中查找有没有该编号存在
这个方法肯定行。

#7



  bookid = dw_1.getitemnumber(1,"title_id")
  说明数据类型正确,但要注意下面的语句也是正确的:
  bookid = dw_1.getitemdecimal(1,"title_id")

  select title_id into :bookid1 from title where title_id = :bookid;
  有可能符合条件的记录不存在,这时bookid1为NULL,导致if bookid1 = 0 then 语句不执行;另外要注意字段title_id 的类型要和变量bookid1一致

#8


别忘了先dw_1.accepttext()
然后确定字段是number型
bookid = dw_1.getitemnumber(1,"title_id")

select title_id into :bookid1 from title where title_id = :bookid;
if sqlca.sqlcode = 100 then 
   messagebox("提示","无该图书编号,请重新输入!")
   return 
end if

#9


解决了吗?

#10


getitemnumber是得到数据窗口中某一行中某一列中的数据
你用dw_1.getitemnumber(1,"title_id")得到的只是数据窗口中
第一行中"title_id"列的数值。
你要查找数据库中有没有该书的编号应该用find函数
int li_find, li_bookid
string ls_condition
il_bookid = 0001 或 li_bookid = number(sle_1.text) 
ls_condition = "title_id" + string(li_bookid)
li_find = dw_1.find(ls_condition ,1, dw_1.rowcount())
if li_find > then
   dw_1.scrolltorow(li_find) //滚行到满足条件的那一行
   else
      messagebox("提示","无该图书编号,请重新输入!")return
end if





#11


我怀疑是你的条件不对:
int bookid,bookid1
bookid = dw_1.getitemnumber(1,"title_id")
select title_id into :bookid1 from title where title_id = :bookid;
if bookid1 = 0  then //我加的 ***** if bookid1 =0 or isnull(bookid1) then 

   messagebox("提示","无该图书编号,请重新输入!")
//dw_1.setitem(1,"title_id","")
return
end if

#12


int bookid,bookid1
bookid = dw_1.getitemnumber(1,"title_id")
select count(title_id) into :bookid1 from title where title_id = :bookid;
if sqlca.sqlcode = 100 then 
   messagebox('error',sqlca.sqlerrtext)
   return 
end if
if bookid1 = 0 or isnull(bookid1) then
   messagebox("提示","无该图书编号,请重新输入!")
   return
end if

最后改为这样就行了,看来少了count不行,另外,sqlca.sqlcode = 100也要加上,不过后来我去掉了,一样可以,奇怪。
还有 hyllp(nice) 说的用数据存储的办法,我觉得思路新颖,不错,虽然我还没有试,但估计也行。
总之,千言万语无法表达我的感激之情,再次感谢大家了。
btw,我想给大家追加一些分,怎么做?我一个帖子只能给100分,实在抱歉了。要不我再问几个菜问题,给以上几个大哥多加几分,如何?
谢谢了!(罗嗦了,hehe)

#1


第一种:
//判断是否有该书
int bookid,bookid1,li_count
bookid = dw_1.getitemnumber(1,"title_id")
select count(title_id) into :li_count from title where title_id = :bookid;
if li_count = 0 then   //或者if sqlca.sqlcode=100 then //注意判断条件
   messagebox("提示","无该图书编号,请重新输入!")
    //dw_1.setitem(1,"title_id","")
    return
end if

第二种方法:
//判断是否有该书
   string bookid
   bookid = trim(dw_1.getitemstring(1,"title_id"))
   dw_1.setfilter("title_id = "+bookid) //注意去掉单引号
    dw_1.retrieve()
    if dw_1.rowcount() < 1 then
        MessageBox("提示","无该图书编号,请重新输入!")
        return 
    end if

#2


你判断一下sqlca的值。
int bookid,bookid1
bookid = dw_1.getitemnumber(1,"title_id")
select title_id into :bookid1 from title where title_id = :bookid;
if sqlca.sqlcode = -1 then 
   messagebox('error',sqlca.sqlerrtext)
   return 
end if
if bookid1 = 0 or isnull(booid1)then
   messagebox("提示","无该图书编号,请重新输入!")
//dw_1.setitem(1,"title_id","")
return
end if

#3


至于是使用getitemnumber()还是使用getitemstring()函数,要看title_id这个列的数据类型,如果是INTEGER即整型的就使用getitemnumber(),如果是CHAR即字符型的就使用getitemstring()函数。
还有把下面的代码:
select title_id into :bookid1 from title where title_id = :bookid;
if bookid1 = 0 then
   messagebox("提示","无该图书编号,请重新输入!")
    //dw_1.setitem(1,"title_id","")
    return
end if

改成:
bookid1 = -1
select count(title_id) into :bookid1 from title where title_id = :bookid;
if bookid1 = 0 then
   messagebox("提示","无该图书编号,请重新输入!")
   return
end if


试试

#4


我觉得可能有2个问题,一个就是图书编号太长,你是不是应该用长整形变量呢?或是变量不匹配?二是你输入的图书编号怎么不见你用呢??既然你用到了数据窗口怎么还直接去库中查数据呢??
   我不知道你的实际程序,只是猜测的,希望不要误导你才好

  

#5


你将所有要判断的地方赋值给局部变量,然后debug看看他的数值是什么。检查到底是那个地方你疏忽了。看过程你写的是对的阿。
  祝好运

#6


你可以再做一个数据存储 DATASTORE,它的数据窗口对象为所有图书的编号,先把他全部检索出来。
当输入图书编号之后,就开始在数据存储中查找有没有该编号存在
这个方法肯定行。

#7



  bookid = dw_1.getitemnumber(1,"title_id")
  说明数据类型正确,但要注意下面的语句也是正确的:
  bookid = dw_1.getitemdecimal(1,"title_id")

  select title_id into :bookid1 from title where title_id = :bookid;
  有可能符合条件的记录不存在,这时bookid1为NULL,导致if bookid1 = 0 then 语句不执行;另外要注意字段title_id 的类型要和变量bookid1一致

#8


别忘了先dw_1.accepttext()
然后确定字段是number型
bookid = dw_1.getitemnumber(1,"title_id")

select title_id into :bookid1 from title where title_id = :bookid;
if sqlca.sqlcode = 100 then 
   messagebox("提示","无该图书编号,请重新输入!")
   return 
end if

#9


解决了吗?

#10


getitemnumber是得到数据窗口中某一行中某一列中的数据
你用dw_1.getitemnumber(1,"title_id")得到的只是数据窗口中
第一行中"title_id"列的数值。
你要查找数据库中有没有该书的编号应该用find函数
int li_find, li_bookid
string ls_condition
il_bookid = 0001 或 li_bookid = number(sle_1.text) 
ls_condition = "title_id" + string(li_bookid)
li_find = dw_1.find(ls_condition ,1, dw_1.rowcount())
if li_find > then
   dw_1.scrolltorow(li_find) //滚行到满足条件的那一行
   else
      messagebox("提示","无该图书编号,请重新输入!")return
end if





#11


我怀疑是你的条件不对:
int bookid,bookid1
bookid = dw_1.getitemnumber(1,"title_id")
select title_id into :bookid1 from title where title_id = :bookid;
if bookid1 = 0  then //我加的 ***** if bookid1 =0 or isnull(bookid1) then 

   messagebox("提示","无该图书编号,请重新输入!")
//dw_1.setitem(1,"title_id","")
return
end if

#12


int bookid,bookid1
bookid = dw_1.getitemnumber(1,"title_id")
select count(title_id) into :bookid1 from title where title_id = :bookid;
if sqlca.sqlcode = 100 then 
   messagebox('error',sqlca.sqlerrtext)
   return 
end if
if bookid1 = 0 or isnull(bookid1) then
   messagebox("提示","无该图书编号,请重新输入!")
   return
end if

最后改为这样就行了,看来少了count不行,另外,sqlca.sqlcode = 100也要加上,不过后来我去掉了,一样可以,奇怪。
还有 hyllp(nice) 说的用数据存储的办法,我觉得思路新颖,不错,虽然我还没有试,但估计也行。
总之,千言万语无法表达我的感激之情,再次感谢大家了。
btw,我想给大家追加一些分,怎么做?我一个帖子只能给100分,实在抱歉了。要不我再问几个菜问题,给以上几个大哥多加几分,如何?
谢谢了!(罗嗦了,hehe)