The next method returns FALSE if there are no more records, which in your case 
probably means that there were no records returned at all.  It would be good 
practice to always check the return value of next even if you expect at least 
one record from the defquery call.  I have successfully used defquery calls in 
deffunction calls.

Bob Kirby

At 08:15 AM 8/25/2008, Seyed Hossein wrote:
>Hi,
>Thanks Mr. Kirby for the response,
>As I mentioned in my previous email, I've called next in my program's 
>deffunction running-query [(?result next)], but why does it return false? I 
>think the problem is caused by calling the defquery within a deffuction. Does 
>anyone know a better way of connecting a Gui-text with defquery?
>Thank you
>
>On 8/24/08, Robert Kirby <<mailto:[EMAIL PROTECTED]>[EMAIL PROTECTED]> wrote:
>The value of next on the QueryResult is not being checked.  If next returns 
>FALSE, the message below will be seen as if next had not been called.  The 
>getInt method and other "get" methods could throw a JessException with a 
>different message when called after next returns FALSE, but don't.
>
>Bob Kirby
>
>At 10:14 AM 8/18/2008, Seyed Hossein wrote:
>>Hi,
>>I'm trying to write a program that asks a user his telephone number in GUI, 
>>then searches a database for that phone # using defquery, and outputs some 
>>results. But when I run it I get an error as below.
>>
>>
>>Jess reported an error in routine QueryResult.get
>>while executing (call ?result getInt ca)
>>while executing (printout t ?text crlf (call ?result getInt ca))
>>while executing deffunction running-query
>>while executing (running-query ?text)
>>while executing deffunction read-input
>>while executing (read-input <Java-Object:java.awt.event.ActionEvent>).
>>  Message: The cursor is before the first row; you must call next() before 
>> accessing query result .
>>
>>Since I called next() before accessing query result, I thought the error 
>>might be caused by calling the defquery within a deffunction. Following is 
>>the program I wrote. I'd appreciate any help.
>>
>>
>>;(watch all)
>>(import javax.swing.*)
>>(import javax.swing.JFrame)
>>(import java.awt.event.ActionListener)
>>(import java.awt.BorderLayout)
>>(import java.awt.Color)
>>(import javax.swing.*)
>>(import java.awt.*)
>>(import java.awt.event.*)
>>
>>
>>
>>
>>(defglobal ?*f* = (new JFrame "Testing"))
>>(defglobal ?*c* = (?*f* getContentPane))
>>(defglobal ?*apanel* = (new JPanel))
>>(defglobal ?*afield* = (new JTextField 40))
>>(defglobal ?*afield-ok* =(new JButton OK))
>>
>>
>>(?*apanel* add ?*afield*)
>>(?*apanel* add ?*afield-ok*)
>>((?*f* getContentPane) add ?*apanel*
>>(get-member BorderLayout CENTER))
>>(?*f* validate)
>>(?*f* repaint)
>>(?*c* add (new JLabel "What is the phone number? ") (BorderLayout.NORTH))
>>
>>
>>
>>
>>(deftemplate conditions
>>    (slot telnumb)
>>    (slot adr)
>>    (slot esc)
>>    (slot sta)
>>    (slot car))
>>
>>
>>(deffacts testdata
>>    (conditions (telnumb 4978548) (adr 8) (esc 0) (sta 4) (car 4))
>>    (conditions (telnumb 8754655) (adr 5) (esc 0) (sta 1) (car 6))
>>    (conditions (telnumb 9856211) (adr 1) (esc 0) (sta 7) (car 2))
>>    (conditions (telnumb 5284877) (adr 8) (esc 1) (sta 2) (car 5))
>>    (conditions (telnumb 9845652) (adr 8) (esc 0) (sta 1) (car 1))
>>    )
>>
>>
>>(defquery search-by-telnumb
>>    "Finds locations with given telephone number"
>>    (declare (variables ?tn))
>>    (conditions (telnumb ?tn) (adr ?ad) (esc ?es) (sta ?st) (car ?ca)))
>>
>>
>>(deffunction running-query (?text)
>>(bind ?result (run-query* search-by-telnumb ?text))
>>(?result next)
>>(printout t ?text crlf (?result getInt ca))
>>)
>>
>>
>>(deffunction read-input (?EVENT)
>>(bind ?text (sym-cat (?*afield* getText)))
>>(running-query ?text)
>>)
>>
>>(bind ?handler (new jess.awt.ActionListener read-input (engine)))
>>(?*afield* addActionListener ?handler)
>>(?*afield-ok* addActionListener ?handler)
>>
>>(?*f* setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE))
>>
>>
>>(?*f* pack)
>>(?*f* setSize 520 150)
>>(?*f* setVisible TRUE)
>>
>>
>>Thank you,
>>Seyed

Reply via email to