powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос
41 сообщений из 41, показаны все 2 страниц
запрос
    #37419639
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуй. Помогите разобраться. Создал запрос котрый выдает ФИО сотрудника, и оплату если сумма больше 1000. Но дело в том, что значение 1000 я указываю в самом запросе, а как это сделать через форму.
Текст запроса:
Код: plaintext
1.
2.
3.
SELECT Names.cfirstname, Names.csecondname, Names.clastname, Names.itogo;  
   FROM base!names;  
   WHERE  Names.itogo >  1000 

имя texbox для ввода значения "oplata"
Пробовал таким образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
WITH THISFORM.PageFrame1.Page2  
  oplata1 = .oplata.value  
  ENDWITH  
      SELECT Names.cfirstname, Names.csecondname, Names.clastname, Names.itogo;  
   FROM base!names;  
   WHERE  Names.itogo > oplata1
...
Рейтинг: 0 / 0
запрос
    #37419732
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985,

И что, не получилось?
...
Рейтинг: 0 / 0
запрос
    #37420076
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG,

Призапуске пишет ошибку "operator/operand" and type mismatch.
Я так понял нужно куда-то вывести результат.
А если вот так
Код: plaintext
1.
2.
3.
4.
SELECT Names.cfirstname, Names.csecondname, Names.clastname, Names.itogo;    
     FROM base!names;    
     WHERE  Names.itogo > oplata1 ;    
     INTO CURSOR SelectedNames    
то пишет ошибку синтаксиса
...
Рейтинг: 0 / 0
запрос
    #37420132
Ал_Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей1985Здравствуй. Помогите разобраться. Создал запрос котрый выдает ФИО сотрудника, и оплату если сумма больше 1000. Но дело в том, что значение 1000 я указываю в самом запросе, а как это сделать через форму.

имя texbox для ввода значения "oplata"

Проверьте, чтобы текстбокс воспринимал значение "oplata" как число.
Правой кнопкой на текстбокса - контекстное меню, в нём выбрать builder...
В открывшемся окне Format Data Type выбрать Numeric.
...
Рейтинг: 0 / 0
запрос
    #37420150
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ал_Тан, спасибо, оказалось все так просто. Но без вас бы не догадался.
...
Рейтинг: 0 / 0
запрос
    #37420166
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, результат выводится в таблице query, как обратиться к полям таблицы я знаю(?query.cfirstname), а вот как вывести эту таблицу на форму?
...
Рейтинг: 0 / 0
запрос
    #37420294
Ал_Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей1985Ребята, результат выводится в таблице query, как обратиться к полям таблицы я знаю(?query.cfirstname), а вот как вывести эту таблицу на форму?
На форму положить Grid. Прописать ему RecordSource query . Затем у каждой колонки прописать для ControlSource своё поле
query.cfirstname и т.д.
Перед выполнением запроса отключить Грид grid.RecordSource = "" . После выполнения запроса подключить Грид grid.RecordSource = query . Желательно не употреблять служебные слова для названий переменных, таблиц, запросов и т.п.
...
Рейтинг: 0 / 0
запрос
    #37420365
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ал_ТанАндрей1985Ребята, результат выводится в таблице query, как обратиться к полям таблицы я знаю(?query.cfirstname), а вот как вывести эту таблицу на форму?
На форму положить Grid. Прописать ему RecordSource query . Затем у каждой колонки прописать для ControlSource своё поле
query.cfirstname и т.д.
Перед выполнением запроса отключить Грид grid.RecordSource = "" . После выполнения запроса подключить Грид grid.RecordSource = query . Желательно не употреблять служебные слова для названий переменных, таблиц, запросов и т.п.
Либо SELECT ... INTO CURSOR MyCursor
...
Рейтинг: 0 / 0
запрос
    #37420452
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ал_Тан, спасибо, на форму Grid2 результат выводится.
Поменял код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
grid2.RecordSource = ""
WITH THISFORM.PageFrame1.Page2  
  oplata1 = .oplata.value  
  ENDWITH  
      SELECT Names.cfirstname, Names.csecondname, Names.clastname, Names.itogo;  
   FROM base!names;  
   WHERE  Names.itogo > oplata1
grid2.RecordSource = query
В таблице Grid2 выводится результат запроса, но при нажатии на кнопку(запуск нового запроса) выдает ошибку, что обьект Grid2 не создан, результат снова выдается в виде таблицы query, появляется в Grid2 только после перезапуска программы.
Получается нужно после запуска программы, как-то закрывать таблицу query, результат выводить сразу в Grid2?
...
Рейтинг: 0 / 0
запрос
    #37420466
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985...
Получается нужно после запуска программы, как-то закрывать таблицу query, результат выводить сразу в Grid2?

это курсовая и т.д. (сделать и забыть)?
или разработка для эксплуатации и т.д.?
...
Рейтинг: 0 / 0
запрос
    #37420472
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985Ал_Тан, спасибо, на форму Grid2 результат выводится.
Поменял код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
grid2.RecordSource = ""
WITH THISFORM.PageFrame1.Page2  
  oplata1 = .oplata.value  
  ENDWITH  
      SELECT Names.cfirstname, Names.csecondname, Names.clastname, Names.itogo;  
   FROM base!names;  
   WHERE  Names.itogo > oplata1
grid2.RecordSource = query
В таблице Grid2 выводится результат запроса, но при нажатии на кнопку(запуск нового запроса) выдает ошибку, что обьект Grid2 не создан, результат снова выдается в виде таблицы query, появляется в Grid2 только после перезапуска программы.
Получается нужно после запуска программы, как-то закрывать таблицу query, результат выводить сразу в Grid2?

Этот код в каком событии написан?
...
Рейтинг: 0 / 0
запрос
    #37420564
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG,
Код написан в событии click
...
Рейтинг: 0 / 0
запрос
    #37420571
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,
В том то и дело,что это нужно для разработки. Задача будет намного сложнее. Нужно понять как это работает.
...
Рейтинг: 0 / 0
запрос
    #37420581
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985,

Т.е. при загрузке формы в Grid у тебя есть данные, еще до нажатия кнопки?
...
Рейтинг: 0 / 0
запрос
    #37420618
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985прошелмимо,
В том то и дело,что это нужно для разработки. Задача будет намного сложнее. Нужно понять как это работает.

задачу можно упростить если использовать курсорадаптер.
...
Рейтинг: 0 / 0
запрос
    #37420623
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG,
Да, получается так.
...
Рейтинг: 0 / 0
запрос
    #37420633
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поиграться.
пример, в котором есть курсорадаптер
и для него динамически формируется условие ограничения выборки.

тупо играться, думать, тупо думать почему так сделано
и какие выгоды несет.
...
Рейтинг: 0 / 0
запрос
    #37420664
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985IgorNG,
Да, получается так.

Коль в кнопке ставишь этот код, то этот же код должен работать и при инициализации Gridа, а ты, наверное в свойствах проставил ему RowSource = query. Сделай метод LoadMyQuery и в него этот код, а в Init Grid и в Click кнопки - THISFORM.LoadMyQuery. А в запросе все-таки добавь INTO CURSOR <название курсора>, чтобы к нему не обезличенно обращаться.
Но это все для лучшего понимания как это работает. И смотри в сторону курсор адаптера.
...
Рейтинг: 0 / 0
запрос
    #37420755
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь, буду разбираться. Буду разбираться, надо поискать книжки про cursorAdapter
...
Рейтинг: 0 / 0
запрос
    #37421817
Ал_Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей1985В таблице Grid2 выводится результат запроса, но при нажатии на кнопку(запуск нового запроса) выдает ошибку, что обьект Grid2 не создан, результат снова выдается в виде таблицы query, появляется в Grid2 только после перезапуска программы.
Получается нужно после запуска программы, как-то закрывать таблицу query, результат выводить сразу в Grid2?

А куда ж денется Grid, если он создан в дизанй-тайме на форме?
Возможно, к нему неправлиьно обращаешься? Он лежит на второй странице PageFframe?

Попробуй так:
1. В Init формы пропиши обнуление Grid
Код: plaintext
1.
THISFORM.PageFrame1.Page2grid2.RecordSource = ""

2. В кнопке запуска запроса в событии клик пропиши:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
THISFORM.PageFrame1.Page2grid2.RecordSource = ""
oplata1 = THISFORM.PageFrame1.Page2.oplata.value  

  SELECT Names.cfirstname, Names.csecondname, Names.clastname, Names.itogo;  
     FROM base!names;  
         WHERE  Names.itogo > oplata1;
             INTO CURSOR query

THISFORM.PageFrame1.Page2grid2.RecordSource = "query"
Thisform.Refresh 

P.S Можно прописать более короткие пути, но для этого нужно знать структуру PageFrame.
...
Рейтинг: 0 / 0
запрос
    #37421833
Ал_Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На этом форуме можно исправлять уже оправленные сообщения? Как?

Вкралась ошибка нужно поставить точку между Page2 и grid2 во всех подобных строках.
Код: plaintext
1.
THISFORM.PageFrame1.Page2.grid2.RecordSource = ""
...
Рейтинг: 0 / 0
запрос
    #37422023
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ал_Тан,

Спасибо за помощь, все работает.
...
Рейтинг: 0 / 0
запрос
    #37422043
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ал_ТанНа этом форуме можно исправлять уже оправленные сообщения? Как?
Модератор: Исправлять ошибки не представляется возможным. Просто опубликуйте правильную версию кода еще раз или исправленную часть, что Вы и сделали.
...
Рейтинг: 0 / 0
запрос
    #37422044
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей1985,

Да, только вот еще одна загвоздка, все работает до перезагрузки FoxPro. После перезагрузки выдает ошибку "Error loading - record number 101 < or one of of its memmbers > Control source: Aliace 'OUERY' is not found". Запускаешь вручную запрос query(через do), все продолжает работать. Я так понял, что после перезагрузки очищается таблица OUERY. Как быть, чтобы не выскакивало эта ошибка?
...
Рейтинг: 0 / 0
запрос
    #37422197
Ал_Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей1985Андрей1985,

Да, только вот еще одна загвоздка, все работает до перезагрузки FoxPro. После перезагрузки выдает ошибку "Error loading - record number 101 < or one of of its memmbers > Control source: Aliace 'OUERY' is not found". Запускаешь вручную запрос query(через do), все продолжает работать. Я так понял, что после перезагрузки очищается таблица OUERY. Как быть, чтобы не выскакивало эта ошибка?
1. Определитесь с названиями сущностей. У Вас и запрос "query" и таблица "query" и командная кнопка "query"???

2. Пусть кнопка называется Command1. В её событии Click прописаны команды для выполнения запроса, которые приведены выше и которые работают по Вашим словам. Тогда непонятна фраза "Запускаешь вручную запрос query(через do)" . Это как?
Ведь запрос выполняется при клике на кнопке Command1. В VFP можно создать сущность "query" с помощью построителя. Но обычно это применяют поначалу для получения текста кода запроса. И если он уже создан, опробован и работает, этот текст (набор команд) помещают в нужное место. Чаще всего на кнопку Command1. Что мы и сделали.

3. Пусть в результате выполнения этого запроса результаты помещаются в курсор csrQuery. Тогда сообщение " Aliace 'csrOUERY' is not found". означает, что где-то в программе происходит обращение к курсору csrQuery ещё до того, как была выполнена команда Click на кнопке Command1. Нужно найти это место и устранить вызов csrQuery до его создания.
Ранее у Вас запрос направлялся в таблицу OUERY. Может быть она помещена в DataEnviroment формы и оттуда автоматически открывается? Тут можно только гадать...
...
Рейтинг: 0 / 0
запрос
    #37426180
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться. Создал запрос на выборку полей таблицы по месяцу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
thisform.GrdList.RecordSource = ""
WITH THISFORM
    month1 = .ComboMonth.value    
 ENDWITH     
    
 SELECT Tarif.ctarif, Tarif.czena1, Tarif.cdenizm, Tarif.czena2, Tarif.cizm,;
  Tarif.cnametarif, Tarif.cmonth, Tarif.cyear;
   FROM ;  
       gaz!tarif;  
   WHERE  Tarif.cmonth = month1 INTO CURSOR MyCursor  
  thisform.GrdList.RecordSource = ""  
  thisform.GrdList.RecordSource = "MyCursor"
Но дело в том, что до выполнения запроса я мог редактировать записи. После выполнения запроса я могу редактировать лишь ту запись, где остался курсор.
Может как то сделать можно иначе. Нужно сначало делать выборку по месяцу, а далее редактировать записи.
Саму программу я выложил, форма называется tarif.scx.
http://mogilevmebel.com/admin/oblgaz.rar
...
Рейтинг: 0 / 0
запрос
    #37426302
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985,

SELECT ... INTO CURSOR MyCursor READWRITE - Усли VFP 9
...
Рейтинг: 0 / 0
запрос
    #37426334
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, у меня при нажатии на кнопку изменить на форме срабатывает команда thisform.doEdit()(click), this.enabled = not eof("tarif")(refresh).
Процедура doedit:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
lparameters tcMode
local loForm, llOk
do form forms\EditTarif name loForm linked with tcMode to llOk
if llOk
thisform.refresh()
thisform.grdList.setfocus()
endif

где EditTarif - форма для изменения.
где мне нужно прописать SELECT ... INTO CURSOR MyCursor READWRITE ?
...
Рейтинг: 0 / 0
запрос
    #37426354
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь

Андрей1985Помогите разобраться. Создал запрос на выборку полей таблицы по месяцу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
thisform.GrdList.RecordSource = ""
WITH THISFORM
    month1 = .ComboMonth.value    
 ENDWITH     
    
 SELECT Tarif.ctarif, Tarif.czena1, Tarif.cdenizm, Tarif.czena2, Tarif.cizm,;
  Tarif.cnametarif, Tarif.cmonth, Tarif.cyear;
   FROM ;  
       gaz!tarif;  
   WHERE  Tarif.cmonth = month1 INTO CURSOR MyCursor  READWRITE 
  thisform.GrdList.RecordSource = ""  
  thisform.GrdList.RecordSource = "MyCursor"
Но дело в том, что до выполнения запроса я мог редактировать записи. После выполнения запроса я могу редактировать лишь ту запись, где остался курсор.
Может как то сделать можно иначе. Нужно сначало делать выборку по месяцу, а далее редактировать записи.
Саму программу я выложил, форма называется tarif.scx.
http://mogilevmebel.com/admin/oblgaz.rar
...
Рейтинг: 0 / 0
запрос
    #37426489
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, изменил код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
thisform.GrdList.RecordSource = ""
WITH THISFORM
    month1 = .ComboMonth.value    
 ENDWITH     
    
 SELECT Tarif.ctarif, Tarif.czena1, Tarif.cdenizm, Tarif.czena2, Tarif.cizm,;
  Tarif.cnametarif, Tarif.cmonth, Tarif.cyear;
   FROM ;  
       gaz!tarif;  
   WHERE  Tarif.cmonth = month1 INTO CURSOR MyCursor NOFILTER READWRITE
  thisform.GrdList.RecordSource = ""  
  thisform.GrdList.RecordSource = "MyCursor"

Изменений никаких ...
...
Рейтинг: 0 / 0
запрос
    #37426753
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985IgorNG, изменил код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
thisform.GrdList.RecordSource = ""
WITH THISFORM
    month1 = .ComboMonth.value    
 ENDWITH     
    
 SELECT Tarif.ctarif, Tarif.czena1, Tarif.cdenizm, Tarif.czena2, Tarif.cizm,;
  Tarif.cnametarif, Tarif.cmonth, Tarif.cyear;
   FROM ;  
       gaz!tarif;  
   WHERE  Tarif.cmonth = month1 INTO CURSOR MyCursor NOFILTER READWRITE
[color=red]  thisform.GrdList.RecordSource = ""  [/color]
  thisform.GrdList.RecordSource = "MyCursor"
[color=red]THISFORM.Refresh[/color]
Изменений никаких ...
...
Рейтинг: 0 / 0
запрос
    #37426777
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, THISFORM.Refresh - мы просто обновляем форму. Тут получается выполнив запрос, мы результат записываем во временную таблицу, а при нажатиии на кнопку ИЗМЕНИТЬ, изменяем мы не во временной таблице, а в tarif.dbf.
...
Рейтинг: 0 / 0
запрос
    #37426870
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985,

Дело в том, что в Gride редактировать не рекомендуется, пользователю позволять редактировать одну запись. Соответственно, Grid для просмотра необходимых данных с использованием курсора. Для редактирования выбранной записи, т.е. для нахождения её в таблице необходимы уникальные ID, по которому и можно найти соответствующую запись в таблице для ее редактирования. Я не думаю, что изменение тарифов настолько глобально, что требуется редактирование в Grid. Опять же, редактирование данных напрямую в таблице тоже плохо. А если нужно отменить изменения?
...
Рейтинг: 0 / 0
запрос
    #37426924
Андрей1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, т.е. таким способом не получится. Получается, только если сделать поиск по наименованию тарифа, получив результат, только редактировать.
...
Рейтинг: 0 / 0
запрос
    #37426944
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей1985,

В общем-то, да. Ну, можно в Grid выводить данные из таблицы только для чтения с применением фильтра по условию. И редактировать данные текущей записи. Вообще-то прежде всего нужно, чтобы проект выстроился сначала в голове, а потом уже рисовать формы. Иначе можно наткнуться на то, что его просто придется переделывать с нуля.
...
Рейтинг: 0 / 0
запрос
    #37431789
190r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветсвую!
Сделал запрос по дате
Код: plaintext
1.
2.
3.
4.
SELECT Gorod.begin, Gorod.number, Gorod.name, Gorod.address, Gorod.line,;
  Gorod.type;
 FROM ;
     gts!gorod;
 WHERE  Gorod.end = ( {^ 2001 / 01 / 01 } );
в browse выводит правильно, а когда сделал тот же запрос в отчет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT Gorod.begin, Gorod.number, Gorod.name, Gorod.address, Gorod.line,;
  Gorod.type;
 FROM ;
     gts!gorod;
 WHERE  Gorod.end = ( {^ 2001 / 01 / 01 } );
 INTO CURSOR Qgorod  
 REPORT FORM c:\foxpro\kross3\reports\rgorod.frx 
то выводит все записи таблицы... никак не пойму почему,
...
Рейтинг: 0 / 0
запрос
    #37432026
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
190r,

Проверь, на основании каких данных строится отчет - курсора или таблицы?
...
Рейтинг: 0 / 0
запрос
    #37432494
190r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG190r,

Проверь, на основании каких данных строится отчет - курсора или таблицы?
вообще то отчет я строил на данных таблицы через DE, а нужно через данные курсора?
если да, то как? (это мой первый проэкт, опыта маловато в программировании)
...
Рейтинг: 0 / 0
запрос
    #37432846
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
190r,

Курсор у тебя создается перед выводом отчета. В отчета во всех выводимых полях укажи не имя таблицы, а имя курсора.
...
Рейтинг: 0 / 0
запрос
    #37433664
190r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG,спасибо! заработало! только вот панель где находится значек принтера не активна, наверное что то пропустил?
...
Рейтинг: 0 / 0
запрос
    #37434829
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
190r,
Какая еще панель? У тебя на форме должна быть кнопка "Печать"
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]