Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.04.2007, 19:21
Teh Teh вне форума
Прохожий
 
Регистрация: 18.04.2007
Сообщения: 5
Репутация: 10
По умолчанию SQL запрос, отбор по дате

Доброго времени суток!!!
Итак задача ... запрос из таблицы (dbf) отбор по полям типа Date и соединяюсь через ADO. Задаю значение параметру, но при выполнении ошибку выдает... Параметр такойто не обнаружен.... такая же ситуация в логическими полями.

Код:
ADOQuery1.Active:=false;
ADOQuery1.Parameters.ParamByName('de').Value:=DateTimePicker1.Date;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select date');
ADOQuery1.SQL.Add('from mdocm');
ADOQuery1.SQL.Add('where  date=:ddd');
ADOQuery1.Active:=true;
Подскажите что я НЕ так делаю!
Пробовал и в стринге параметр передавать...

Последний раз редактировалось Teh, 18.04.2007 в 20:23.
Ответить с цитированием
  #2  
Старый 19.04.2007, 06:03
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Так попробуй:
Код:
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select [date]');
ADOQuery1.SQL.Add('from mdocm');
ADOQuery1.SQL.Add('where  [date]=:ddd');
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text,True);
ADOQuery1.Parameters.ParamByName('ddd').Value:=DateTimePicker1.Date;
ADOQuery1.Active:=true;

да и в приведенном тобой примере имена параметров не совпадают.
Ответить с цитированием
  #3  
Старый 19.04.2007, 10:46
Teh Teh вне форума
Прохожий
 
Регистрация: 18.04.2007
Сообщения: 5
Репутация: 10
По умолчанию

Aristarh Dark про имена параметров я заметил, это из-за спешки я редактировал сообщение , экспериментировал с параметрами.
Теперь по теме, приведенный вами код
Код:
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select [date]');
ADOQuery1.SQL.Add('from mdocm');
ADOQuery1.SQL.Add('where  [date]=:ddd');
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text,True);
ADOQuery1.Parameters.ParamByName('ddd').Value:=DateTimePicker1.Date;
ADOQuery1.Active:=true;
ошибка Missing Operand
База не моя ( я бы не использовал зарезервированные слова в именах полей) , [] не обязательны, в других запросах где отбор идет по текстовым и числовым полям поле Date вписано без [] и ошибки это не вызывает.
Ответить с цитированием
  #4  
Старый 19.04.2007, 11:48
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

А где именно ошибка, в момент отработки запроса?
Ответить с цитированием
  #5  
Старый 19.04.2007, 11:54
Teh Teh вне форума
Прохожий
 
Регистрация: 18.04.2007
Сообщения: 5
Репутация: 10
По умолчанию

Когда ADOQuery1 активирую.

ADOQuery1.Active:=true
Ответить с цитированием
  #6  
Старый 19.04.2007, 20:07
Teh Teh вне форума
Прохожий
 
Регистрация: 18.04.2007
Сообщения: 5
Репутация: 10
По умолчанию

Надоело, она мне сегодня снится будет, эта ошибка...

Код:
ADOQuery2.SQL.Add('select  [date] ');
ADOQuery2.SQL.Add('from mdocm');
ADOQuery2.SQL.Add('where  [date]='''+datetostr(DateTimePicker1.date)+'''');
Решил без параметров...но так запрос выполняется, но возвращается 0 строк. Наверное потому что ни одно из значений поля ДАТА (с соответствующим типом данных) не равно строке. АААА....я же не усну....
Ответить с цитированием
  #7  
Старый 20.04.2007, 07:13
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Прямо и не знаю чего посоветовать, единственное что я обычно заполняю свойство SQL немного не так, а именно:
Код:
ADOQuery1.Close;
ADOQuery1.SQL.Text:='SELECT [date] FROM mdocm WHERE [date] = :dt';
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text,True);
ADOQuery1.Parameters.ParamByName('dt').Value:=DateTimePicker1.Date;
ADOQuery1.Open;
хотя это в принципе тоже самое
Ответить с цитированием
  #8  
Старый 21.04.2007, 13:00
ilang ilang вне форума
Новичок
 
Регистрация: 11.12.2006
Сообщения: 68
Репутация: 10
По умолчанию

Цитата:
ADOQuery2.SQL.Add('where [date]='''+datetostr(DateTimePicker1.date)+'''');

Конечно не будет запрос работать. Такие сложные конструкции из нескольких кавычек )
Используй QuotedStr или где надо вставить кавычку ставь #39
Ответить с цитированием
  #9  
Старый 08.05.2007, 16:26
Teh Teh вне форума
Прохожий
 
Регистрация: 18.04.2007
Сообщения: 5
Репутация: 10
По умолчанию

Руки опустились.... видимо это в самой таблице поле записывается как-то не так,(работает с базой очень старая программа БЭСТ-4 , есть поле со значением ' 5' т.е. ПЯТЬ пробелов и цифра, вот и попробуй потом не зная этого провести выборку с четким равенством) хотя остальные запросы с параметрами по дате, даже с MSSQL работают.
Код:
ADOQuery2.Active:=false;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:='select * from operday where  operday BETWEEN  :datN and :datK  ';
ADOQuery2.Parameters.ParamByName('datN').Value:=nach;
ADOQuery2.Parameters.ParamByName('datK').Value:=kon;
ADOQuery2.Active:=true;
кстатии - значения параметрам передаю в строковом виде.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter