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 <[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 doesn'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 > >
