C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Сортировка данных c помощи 2-х DateTimePicker, Сортировка данных c помощи 2-х DateTime
nmaryan
  Отправлено: 31.01.2007, 16:11


Ученик-кочегар

Группа: Участник
Сообщений: 3



Я в программирование практически чайник. У меня возникла такая вот проблемма. Есть форма на каторой есть следующие компоненты DBGrid, 2 компонента DateTimePicker и кнопка BitBtn. В форме также используются компаненты Query и DateSource. Интересует как правильно написать обработчик кнопки что бы произвадилась сортировка данных в таблице или в DBGrid. В зависимости от выбора даты в компонентах DateTimePicker. Тип таблицы используемый Query
Access.

Отредактировано nmaryan — 31.01.2007, 19:33
Valdemar
Отправлено: 31.01.2007, 16:58


Мастер участка

Группа: Участник
Сообщений: 433



Если под словом "сортировать" вы понимали "фильтровать", т.е. хотите выбрать записи, например, за определенный период, то воспользуйтесь параметрическим запросом. Что-то вроде этого:
CODE
Query->Close();
Query->SQL->Text="select * from myTable where date between :d1 and :d2");
Query->ParamByName("d1")->AsDate = DateTimePicker1->Date;
Query->ParamByName("d2")->AsDate = DateTimePicker2->Date;
Query->Open();
nmaryan
Отправлено: 31.01.2007, 17:50


Ученик-кочегар

Группа: Участник
Сообщений: 3



Да именно. Я хочу сделать фильтр. Но тот код каторый ты написал вызывает ошибку. Ошибка возникает во второй строчки кода. Непойму почему.


Query1->Close();
Query1->SQL->Text="select * from report where date between : d1 and : d2");
Query1->ParamByName("d1")->AsDate = DateTimePicker1->Date;
Query1->ParamByName("d2")->AsDate = DateTimePicker2->Date;
Query1->Open();



Отредактировано nmaryan — 31.01.2007, 18:26
Миshук
Отправлено: 31.01.2007, 18:40


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Привет!

CODE
Query1->SQL->Text="select * from report where date between : d1 and : d2";
nmaryan
  Отправлено: 31.01.2007, 19:37


Ученик-кочегар

Группа: Участник
Сообщений: 3



Пытаюсь использовать вот етот код.

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("select * from report where date between : d1 and : d2");
Query1->ParamByName("d1")->AsDate = DateTimePicker1->Date;
Query1->ParamByName("d2")->AsDate = DateTimePicker2->Date;
Query1->Open();

Выдает ошибку. Возможна ли причина ошибки. Формат даты при работе с таблицами Access ?

Отредактировано nmaryan — 31.01.2007, 19:38
Valdemar
Отправлено: 01.02.2007, 08:04


Мастер участка

Группа: Участник
Сообщений: 433



В моем первом сообщении надо убрать скобку в конце второй строки, опечатался я. В вашем коде в тексте запроса между двоеточием и именем параметра не должно быть пробела.
Пример я привел с использованием Query из BDE. Если вы используете не BDE, а ADO, то там обращение к параметрам немного по другому.
И еще, возможно имя таблицы date конфликтует с зарезервированным словом.
Какая ошибка выдается?
Миshук
Отправлено: 01.02.2007, 11:58


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Привет.
QUOTE
И еще, возможно имя таблицы date конфликтует с зарезервированным словом.

Вероятнее всего.Вчера в аську писал про ошибочное использование слова date.
nawok78
Отправлено: 05.02.2007, 11:57


Станционный диспетчер

Группа: Участник
Сообщений: 115



Итого, с учетом выше сказанного:
[CODE]
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("select * from report where report.'date' between :d1 and :d2");
Query1->ParamByName("d1")->AsDate = DateTimePicker1->Date;
Query1->ParamByName("d2")->AsDate = DateTimePicker2->Date;
Query1->Open();
[CODE]

Отредактировано nawok78 — 05.02.2007, 11:58

Вернуться в Работа с базами данных в C++Builder