Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос / 25 сообщений из 41, страница 1 из 2
31.08.2011, 17:38
    #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
31.08.2011, 18:05
    #37419732
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Андрей1985,

И что, не получилось?
...
Рейтинг: 0 / 0
31.08.2011, 21:55
    #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
31.08.2011, 22:56
    #37420132
Ал_Тан
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Андрей1985Здравствуй. Помогите разобраться. Создал запрос котрый выдает ФИО сотрудника, и оплату если сумма больше 1000. Но дело в том, что значение 1000 я указываю в самом запросе, а как это сделать через форму.

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

Проверьте, чтобы текстбокс воспринимал значение "oplata" как число.
Правой кнопкой на текстбокса - контекстное меню, в нём выбрать builder...
В открывшемся окне Format Data Type выбрать Numeric.
...
Рейтинг: 0 / 0
31.08.2011, 23:13
    #37420150
Андрей1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Ал_Тан, спасибо, оказалось все так просто. Но без вас бы не догадался.
...
Рейтинг: 0 / 0
31.08.2011, 23:28
    #37420166
Андрей1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Ребята, результат выводится в таблице query, как обратиться к полям таблицы я знаю(?query.cfirstname), а вот как вывести эту таблицу на форму?
...
Рейтинг: 0 / 0
01.09.2011, 06:51
    #37420294
Ал_Тан
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Андрей1985Ребята, результат выводится в таблице query, как обратиться к полям таблицы я знаю(?query.cfirstname), а вот как вывести эту таблицу на форму?
На форму положить Grid. Прописать ему RecordSource query . Затем у каждой колонки прописать для ControlSource своё поле
query.cfirstname и т.д.
Перед выполнением запроса отключить Грид grid.RecordSource = "" . После выполнения запроса подключить Грид grid.RecordSource = query . Желательно не употреблять служебные слова для названий переменных, таблиц, запросов и т.п.
...
Рейтинг: 0 / 0
01.09.2011, 09:08
    #37420365
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Ал_ТанАндрей1985Ребята, результат выводится в таблице query, как обратиться к полям таблицы я знаю(?query.cfirstname), а вот как вывести эту таблицу на форму?
На форму положить Grid. Прописать ему RecordSource query . Затем у каждой колонки прописать для ControlSource своё поле
query.cfirstname и т.д.
Перед выполнением запроса отключить Грид grid.RecordSource = "" . После выполнения запроса подключить Грид grid.RecordSource = query . Желательно не употреблять служебные слова для названий переменных, таблиц, запросов и т.п.
Либо SELECT ... INTO CURSOR MyCursor
...
Рейтинг: 0 / 0
01.09.2011, 10:09
    #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
01.09.2011, 10:18
    #37420466
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Андрей1985...
Получается нужно после запуска программы, как-то закрывать таблицу query, результат выводить сразу в Grid2?

это курсовая и т.д. (сделать и забыть)?
или разработка для эксплуатации и т.д.?
...
Рейтинг: 0 / 0
01.09.2011, 10:22
    #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
01.09.2011, 11:05
    #37420564
Андрей1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
IgorNG,
Код написан в событии click
...
Рейтинг: 0 / 0
01.09.2011, 11:08
    #37420571
Андрей1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
прошелмимо,
В том то и дело,что это нужно для разработки. Задача будет намного сложнее. Нужно понять как это работает.
...
Рейтинг: 0 / 0
01.09.2011, 11:15
    #37420581
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Андрей1985,

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

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

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

Коль в кнопке ставишь этот код, то этот же код должен работать и при инициализации Gridа, а ты, наверное в свойствах проставил ему RowSource = query. Сделай метод LoadMyQuery и в него этот код, а в Init Grid и в Click кнопки - THISFORM.LoadMyQuery. А в запросе все-таки добавь INTO CURSOR <название курсора>, чтобы к нему не обезличенно обращаться.
Но это все для лучшего понимания как это работает. И смотри в сторону курсор адаптера.
...
Рейтинг: 0 / 0
01.09.2011, 12:17
    #37420755
Андрей1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Спасибо за помощь, буду разбираться. Буду разбираться, надо поискать книжки про cursorAdapter
...
Рейтинг: 0 / 0
01.09.2011, 18:42
    #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
01.09.2011, 18:51
    #37421833
Ал_Тан
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
На этом форуме можно исправлять уже оправленные сообщения? Как?

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

Спасибо за помощь, все работает.
...
Рейтинг: 0 / 0
01.09.2011, 22:56
    #37422043
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос
Ал_ТанНа этом форуме можно исправлять уже оправленные сообщения? Как?
Модератор: Исправлять ошибки не представляется возможным. Просто опубликуйте правильную версию кода еще раз или исправленную часть, что Вы и сделали.
...
Рейтинг: 0 / 0
01.09.2011, 22:56
    #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
02.09.2011, 06:57
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос / 25 сообщений из 41, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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