Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

Не работает запрос через ADOQuery

14.09.2014, 10:59. Показов 2039. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
И так у меня есть таблица clients
IDfiotelstartdateenddateclients_type
1Иванов Иван Иванович8123456789006.07.201405.08.2014Истина
2Сидоров Сидор Сидорович8213456789006.10.201405.10.2014Ложь
3Семёнов Семён Семёнович8312456789015.07.201414.08.2014Истина
4Петров Петр Петрович8134678943612.09.201411.10.2014Истина
7Степанов Степан Степанович8134672957412.09.201411.10.2014Ложь
8Генадьев Генадий Генадьевич8903123456712.09.201411.12.2014Ложь
9Ставров Ставр Ставрович8945693564312.09.201411.10.2014Ложь
14Пупкин Василий Васильевич8903542343412.09.201411.03.2015Истина
15Василевский Василий Васильевич 12.09.201411.09.2015Ложь
16Краснов Валерий Александрович8945234865413.09.201412.10.2014Истина
И таблица visit
IDid_clientvisit_datevisit_timecomment
1107.06.201422:00 
2107.09.201423:00 
8113.09.201414:48 
9113.09.201414:53 
10213.09.201414:55 
11213.09.201415:03Должен 50р за воду
12413.09.201415:05rtyui
13713.09.201415:10 
15413.09.201415:39 
18913.09.201415:41 
20113.09.201419:59 
21113.09.201420:02 
22113.09.201420:02 
23113.09.201420:02 
24113.09.201420:03 
25113.09.201420:03 
26313.09.201420:04 
27113.09.201420:26 
28113.09.201420:26 
В MSAccess я выполняю запрос:
SQL
1
2
3
4
5
6
SELECT visit.id,visit.visit_date,Format(visit.visit_time,'short time') AS times
FROM visit
INNER JOIN clients ON visit.id_client=clients.id
WHERE clients.id = 1
AND (CDate(visit_date) BETWEEN #06/07/2014# AND #09/13/2014#)
AND (CDate(visit_time) BETWEEN #14:48# AND #23:00#);
Получаю все как нужно
idvisit_datetimes
107.06.201422:00
207.09.201423:00
813.09.201414:48
913.09.201414:53
2013.09.201419:59
2113.09.201420:02
2213.09.201420:02
2313.09.201420:02
2413.09.201420:03
2513.09.201420:03
2713.09.201420:26
2813.09.201420:26
Теперь мне нужно получить это программно:
Я пытаюсь так:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
IF (ADOQuery1->Active) {
    ADOQuery1->Close();
}
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->ADD("SELECT visit.id,visit.visit_date,Format(visit.visit_time,'short time') as times, visit.comment");
ADOQuery1->SQL->ADD("FROM visit");
ADOQuery1->SQL->ADD("INNER JOIN clients ON visit.id_client=clients.id");
ADOQuery1->SQL->ADD("WHERE clients.id = :id");
ADOQuery1->SQL->ADD("AND (CDate(visit.visit_date) BETWEEN :d1 AND :d2)");
ADOQuery1->SQL->ADD("AND (CDate(visit.visit_time) BETWEEN :t1 AND :t2)");
ADOQuery1->Parameters->ParamByName("id")->VALUE = 1;
//пробовал и задавать параметры таким способом ADOQuery1->Parameters->ParamValues["id"] = 1;
ADOQuery1->Parameters->ParamByName("d1")->VALUE = AnsiString("#"+StartDate+"#");
ADOQuery1->Parameters->ParamByName("d2")->VALUE = AnsiString("#"+EndDate+"#");
ADOQuery1->Parameters->ParamByName("t1")->VALUE = AnsiString("#"+StartTime+"#");
ADOQuery1->Parameters->ParamByName("t2")->VALUE = AnsiString("#"+EndTime+"#");
//Пробовал и ADOQuery1->Active = TRUE;
ADOQuery1->OPEN();
В итоге у меня получается пустая таблица
Я решил проверить что с параметрами:
SQL
1
2
3
4
5
ShowMessage(ADOQuery1->Parameters->ParamValues["id"]);
ShowMessage(ADOQuery1->Parameters->ParamByName("d1")->VALUE);
ShowMessage(ADOQuery1->Parameters->ParamByName("d2")->VALUE);
ShowMessage(ADOQuery1->Parameters->ParamByName("t1")->VALUE);
ShowMessage(ADOQuery1->Parameters->ParamByName("t2")->VALUE);
и получил
1
#06/07/2014#
#09/13/2014#
#14:48#
#23:00#
А если не использовать параметры получаю ошибку:
Неправильно определен объект Parameter
Что делать?
Помогите пожалуйста

Добавлено через 30 минут
так же уточнение
SQL
1
2
DBGrid->DataSource=DataSource1;
DataSource->DataSet=ADOQuery1;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.09.2014, 10:59
Ответы с готовыми решениями:

SQL запрос через ADOQuery из нескольких таблиц
Здравствуйте! В общем, проблема такая.. Нужно мне составить отчет, который содержит данные из нескольких таблиц. С этим проблем нет,...

Запрос ADOQuery внутри другого ADOQuery реален?
Помогите сформировать запрос для двух ADOQuery. Есть 2 таблицы БД mssql: sotrudniki , table_hlp(Вспомогательная таблица для делания...

Запрос по дате через AdoQuery (Delphi DateTimePicker1)
Доброго времени суток! Не могу написать запрос в AdoQuery2 для вывода тех дат которые равны DateTimePicker1 procedure...

17
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
14.09.2014, 11:21
Поле дата в мс аццес и данные в них разделяются точками, а ты передаешь \.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
14.09.2014, 12:31  [ТС]
Цитата Сообщение от DeadHipo Посмотреть сообщение
Поле дата в мс аццес и данные в них разделяются точками, а ты передаешь \.
Вы не правы. Если передавать . и заключать в # то сам ms Access ругается.
к примеру #09.27.2014# будет ошибка: "Дата содержит синтаксическую ошибку в выражении запроса..."

Добавлено через 3 минуты
Не забывайте что в msAccess американский формат.(по крайней мере у меня.)
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
14.09.2014, 12:37
Тогда я бы на твоём месте посмотрел как тебя вообще выглядит твой итоговый запрос.
ADOQuery1->SQL->Text
Выведи его так же через ShowMessage и посмотри в чём косяк.
Ну это если ты синтаксис знаешь ясное дело
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
14.09.2014, 12:42  [ТС]
Конечно знаю и в том то и дело что запрос в полном порядке.
а именно результат таков:
Не работает запрос через ADOQuery

Вставляю этот запрос в msAcces указывая вместо id,d1,d2,t1,t2 соответствующие значения из параметров
получаю нужный результат в виде таблицы, а в DBGrid пусто.
Любой другой простой запрос выполняю и DBGrid нормально заполняется.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.09.2014, 12:43
А так?
C++
1
2
3
4
5
6
7
8
9
10
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
 ShortDateFormat = "DD/MM/YYYY";
 ShortTimeFormat = "hh:mm:ss";
}
 
 
 
ADOQuery1->Parameters->ParamByName("d1")->Value = StrToDate("07.06.2014");
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
14.09.2014, 12:47
А параметры где? Если это итоговый запрос то вместо :d1 итд у тебя должно быть то, что ты передаёшь.
Перед OPEN выведи текст запроса
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
14.09.2014, 12:56  [ТС]
Цитата Сообщение от DeadHipo Посмотреть сообщение
Перед OPEN выведи текст запроса
А это и есть перед Open(). Я не знаю как посмотреть полную строку запроса с подставленными параметрами

Добавлено через 6 минут
Sasha,
у меня компилятор не понимает что такое
ShortDateFormat и ShortTimeFormat
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
14.09.2014, 12:58
ivan.-94, да вот она и должна быть с параметрами. Ты их вообще созал в твоём adoquery? Там есть такая штука как Params и там нужно описать все 4 тип данных и имя
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
14.09.2014, 13:04  [ТС]
Не работает запрос через ADOQuery
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.09.2014, 13:06
Цитата Сообщение от DeadHipo Посмотреть сообщение
А параметры где? Если это итоговый запрос то вместо :d1 итд у тебя должно быть то, что ты передаёшь.
Перед OPEN выведи текст запроса
Это я сделал в качестве примера понятно что здесь много строк не хватает
0
14.09.2014, 13:11

Не по теме:

Sasha, это было адресовано не тебе :) Пока писал твоё сообщение появилось.

0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
14.09.2014, 14:04  [ТС]
И собственно получается, что вроде бы все хорошо, а в итоге пусто.

Добавлено через 31 минуту
Методом тыка так сказать я понял что проблема в параметрах, но не ясно в чем именно

Добавлено через 16 минут
Я кажется понял проблему:
Если параметр в строке написать "SELECT... #:d1#" то параметр не будет работать потому что # и : без пробела
а если указать пробел то тогда в запросе будет пробел между # и датой
Вот такая вот фиговнятина получается
Есть ли какая функция которая окружает строку определенным символом?
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
14.09.2014, 14:21
Не работает запрос через ADOQuery

Новая папка.rar
Запрос вот так выглядит
SQL
1
SELECT * FROM tabl WHERE DATA = :DATA;
Может чем то поможет. Только поменяй директроию базы...
1
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
14.09.2014, 14:35
C++
1
2
3
    ADOQuery1->Close();
    ADOQuery1->Parameters->ParamByName("data")->Value =  Edit1->Text;
    ADOQuery1->Open();
И edit тоже работает если запись формата dd.mm.yyyy с решётками пока работать отказывается, и что-то мне кажется не нужны они. Т.е. нужны когда ты пишешь запрос в ms acces...

Добавлено через 4 минуты
И да, при вызове sql запроса с параметрами он остаётся таким как вы писали. вместо :id итд ничего не подставится. За это прошу прощения Что-то я попутал видимо и начал утверждать без проверки.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
14.09.2014, 15:08  [ТС]
воспользовался Date.FormatString;
переписал параметры все работает.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
15.09.2014, 06:03
ivan.-94, можно было для параметров свойство DataType сделать равным ftDateTime и передавать в параметр объекты типа TDateTime, а не пытаться запихать в параметр строку с датой в формате ACCESS.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
15.09.2014, 16:50  [ТС]
kodv, я именно так и сделал в итоге.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.09.2014, 16:50
Помогаю со студенческими работами здесь

Связал таблицы в AdoQuery через Sql запрос, для отчета. Сам отчет делаю в FastReport
Связал таблицы в AdoQuery через Sql запрос, для отчета. Сам отчет делаю в FastReport. Но при добавлении новых данных программно, новые...

Запрос работает через Access, но не работает ASP.
Привет Коллеги ! У меня возникла проблема с ADO В MS ACCESS базе данных есть табличка TABLE1 в ней 2 поля ID ( autonumber ) и...

Добавление информации в базу данных через ADOQuery вводимый через Edit
Не получается добавить информацию в таблицу, каждый Edit отвечает за отдельное поле в строке... Вот код: ADOQuery2->Close(); ...

Как в делфи добавить через Adoquery в таблицу вещественное число, через insert
Как в делфи добавить через Adoquery в таблицу вещественное число, через insert. При добавлении у меня выводит ошибку Data Truncated for...

Запрос в ADOQuery
В Delphi оформила форму, добавив следующие компоненты: - ADOConnection; - AdoQuery; - DataSource; - DBGrid; - Edit; -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
Реализация конвейеров машинного обучения с Python и Scikit-learn
AI_Generated 23.04.2025
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки. . .
Контроллеры Kubernetes Ingress: Сравнительный анализ
Mr. Docker 23.04.2025
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами. . .
Оптимизация кода Python с Cython и Numba
py-thonny 23.04.2025
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и. . .
Микросервис на Python с FastAPI и Docker
ArchitectMsa 23.04.2025
В эпоху облачных вычислений и растущей сложности программных продуктов классическая монолитная архитектура всё чаще уступает место новым подходам. Микросервисная архитектура становится фаворитом. . .
Создаем веб-приложение на Vue.js и Laravel
Reangularity 23.04.2025
Выбор правильного технологического стека определяет успех веб-проекта. Laravel и Vue. js формируют отличную комбинацию для создания современных приложений. Laravel — это PHP-фреймворк с элегантным. . .
Максимальная производительность C#: Span<T> и Memory<T>
stackOverflow 22.04.2025
Мир высоконагруженных приложений безжалостен к неэффективному коду. Каждая миллисекунда на счету, каждый выделенный байт памяти может стать причиной падения производительности. Разработчики на C#. . .
JWT аутентификация в Java
Javaican 21.04.2025
JWT (JSON Web Token) представляет собой открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Эта информация. . .
Спринты Agile: Планирование, выполнение, ревью и ретроспектива
EggHead 21.04.2025
Спринты — сердцевина Agile-методологии, позволяющая командам создавать работающий продукт итерационно, с постоянной проверкой гипотез и адаптацией к изменениям. В основе концепции спринтов лежит. . .
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров
Programma_Boinc 21.04.2025
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров. 3 марта 2025 года, в результате обобщенного поиска простых чисел Ферма в PrimeGrid был найден. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru