2013-10-13 1 views
0

Я хочу построить запрос для db получения параметров из texboxes, нажав кнопку. Есть такое определение класса:FoxPro, как получить доступ к объекту при процедуре, определенной внутри класса?

DEFINE CLASS myForm as Form 
Height = 200 
Width = 300 
visible = .t. 
ADD OBJECT insertBut AS COMMANDBUTTON; 
WITH Caption = "insert", width = 70, height = 20, top = 165, left = 10 

ADD OBJECT lbl1 as label WITH caption = 'Title', left = 10, top = 10 
ADD OBJECT text1 AS TEXTBOX WITH left = 10, top = 25 
ADD OBJECT lbl2 as label WITH caption = 'Amount', left = 10, top = 45 
ADD OBJECT text2 as textbox WITH left = 10, top = 60 
ADD OBJECT lbl3 as label WITH caption = 'Price', left = 10, top = 80 
ADD OBJECT text3 as textbox WITH left = 10, top = 95 
ADD OBJECT lbl4 as label WITH caption = 'Manufacturer id', left = 10, top = 115 
ADD OBJECT text4 as textbox WITH left = 10, top = 130 

ADD OBJECT lbl5 as label WITH caption = 'Id', left = 120, top = 10 
ADD OBJECT text5 as textbox WITH left = 120, top = 25 

PROCEDURE insertBut.click 
    USE stock 
    INSERT INTO stock (title, price, amount, man_id) values(text1.text, text3.text, text2.text, text4.text) 
    browse 
ENDPROC 

ENDDEFINE 

и процедуры, которые я называю с помощью командной строки

PROCEDURE tform 
t = CREATEOBJECT("myform") 
t.show 
READ events 
return 
ENDPROC 

После того как я нажал кнопку insertBut Я получил сообщение об ошибке «псевдоним TEXT1 не найден». Что я делаю не так?

+0

Какая у вас база данных db? SQL? –

+0

Его бэкэнд db не имеет значения; его форма имеет дело с курсором, а сам курсор - это то, что должно заботиться об этом. – DougM

ответ

3

insertBut.click работает в контексте myForm.insertBut, а не myForm, который имеет text1 и др.

Вам необходимо префикс вызовов другим объектам формы с помощью THISFORM.


Лучшее решение, кстати, это данные, связать текстовые поля либо курсора или объекта данных, так что вы получите лучшее разделение ответственности. Вы можете либо добавить пользовательский объект явно в описание класса, либо просто запустить или создать курсор напрямую.

открыть или проверить для stock курсора на Init методом myForm, а затем просто установить dataSource свойство каждого элемента управления при его создании. Например:

ADD OBJECT text1 AS TEXTBOX WITH ; 
    left = 10, ; 
    top = 25, ; 
    dataSource = 'stock.title' 

 Смежные вопросы

  • Нет связанных вопросов^_^