Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78

Синтаксическая ошибка в SQL запросе к базе MS Access 2003

11.06.2012, 18:03. Показов 4669. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В таблице есть колонка Date of Birth, тип - Дата/Время
Все записи в ней отображаются в виде 23.02.1987 (dd.mm.yyyy)
Повесил событие на кнопку, которое посылает sql-запрос к базе:

SQL
1
2
SELECT * FROM \"Table1\" \
WHERE Table1.Sex=True AND \"Table1.Date Of Birth\">=" + StrToDate(minDateAnsi) + " AND \"Table1.Date Of Birth\"<=" + StrToDate(maxDateAnsi)
Тут Table1.Sex - boolean колонка(но это неважно, тк запрос работает исправно, если обращаться только к Table1.Sex)
StrToDate(maxDateAnsi) - Анси-строка вида "11.04.1983" конвертирую в дату

При нажатии на кнопку вылазиет ошибка:

Project Project1.exe raised exception class EOleException with message '[Microsoft][Драйвер ODBC Microsoft Access] Число содержит синтаксическую ошибку в выражении запроса 'Table1.Sex=True AND [Table1.Date Of Birth]>=11.06.1989 AND [Table1.Date Of Birth]<=11.06.1997''. Process stopped. Use Step or Run to continue.

Эта же ошибка вылазиит при запросах
SQL
1
2
SELECT * FROM \"Table1\" \
        WHERE Table1.Sex=False AND \"Table1.Date Of Birth\" BETWEEN " + StrToDate(minDateAnsi) + " AND " + StrToDate(maxDateAnsi)
и

SQL
1
2
SELECT * FROM \"Table1\" \
        WHERE Table1.Sex=False AND \"Table1.Date Of Birth\" BETWEEN #" + StrToDate(minDateAnsi) + "# AND #" + StrToDate(maxDateAnsi) + '#'
При попытки конвертации Анси-строки вида "11/03/1987" вылазиет ошибка с сообщением, что формат даты неправильный.

Что с этими датами делать?)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2012, 18:03
Ответы с готовыми решениями:

Синтаксическая ошибка в запросе
люди помогите понять что не так сервер не хочет выполнять запрос говорит в сроке запроса к базе ошибка вот код ф-ции где я прописываю...

Синтаксическая ошибка в запросе
Всем привет. Пишу приложение, взаимодействующие с БД Access, столкнулся с проблемой, что запросы update, insert и delete не выполняются, не...

синтаксическая ошибка в запросе
Здравствуйте форумчане, На этой строке показывает ошибку, не знаю, где она SqlCommand cmd = new SqlCommand( ...

10
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.06.2012, 19:37
Имя поля с пробелами особо не допускается
0
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
11.06.2012, 21:55  [ТС]
В соседнем запросе работает такая штука:

C++
1
2
3
4
select * from \"Table1\" \
  Where \"Table1.Music interests\" in \
  ( select Music from MusicInterests where Music=" + QuotedStr(DBLookupComboBox2->Text) + ") \
  AND Table1.FIO LIKE '%" + DBLookupComboBox1->Text + "%'
Проблема в чем-то другом
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.06.2012, 09:25
Зачем там куча слешей?
0
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
12.06.2012, 10:24  [ТС]
Я в кавычки выделяю "Таблица.Имя колонки с пробелами". Слэш - эскейп-символ для кавычек. (само sql-выражение заключается в кавычки)

Их можно все убрать, и после переименования колонки в DateOfBirth, та же ошибка появляется в выражении
SQL
1
SELECT * FROM Table1 WHERE Table1.Sex=TRUE AND Table1.DateOfBirth>=" + StrToDate(maxDateAnsi) + " AND Table1.DateOfBirth<=" + StrToDate(minDateAnsi)
Число содержит синтаксическую ошибку в выражении запроса 'Table1.Sex=True AND Table1.DateOfBirth>=11.06.1989 AND Table1.DateOfBirth<=11.06.1997''.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.06.2012, 11:04
А так?
C++
1
SELECT * FROM Table1 WHERE Sex=TRUE AND (DateOfBirth>='" + StrToDate(maxDateAnsi) + "' AND DateOfBirth<='" + StrToDate(minDateAnsi)"');
0
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
12.06.2012, 16:42  [ТС]
C++
1
DataModule2->ADODataSet1->CommandText = "SELECT * FROM Table1 WHERE Sex=TRUE AND (DateOfBirth>='" + StrToDate(minDateAnsi) + "' AND DateOfBirth<='" + StrToDate(maxDateAnsi) + "')";
Project Project1.exe raised exception class EOleException with message '[Microsoft][Драйвер ODBC Microsoft Access] Несоответствие типов данных в условии отбора. Process stopped. Use Step or Run to continue.

Добавлено через 4 минуты
Цитата Сообщение от Sasha Посмотреть сообщение
А так?
C++
1
SELECT * FROM Table1 WHERE Sex=TRUE AND (DateOfBirth>='" + StrToDate(maxDateAnsi) + "' AND DateOfBirth<='" + StrToDate(minDateAnsi)"');
А что происходит, когда мы заключаем выражение в одинарные ковычки?

Нагуглил - такая ошибка вылазиит, согласно http://support.microsoft.com/kb/175258/ru, в 3х случаях

- С помощью источника данных Microsoft Access. Данная проблема не возникает в источнике данных SQL.
- Условия поиска в поле Тип данных даты и времени.
- Пользователь вводит значение условий поиска в виде "мм/дд/гг"

Сейчас с представлением даты поколдую

Добавлено через 28 минут
формат даты сделал #mm/dd/yyyy#,
C++
1
DataModule2->ADODataSet1->CommandText = "SELECT * FROM Table1 WHERE Sex=TRUE AND (DateOfBirth>=#" + StrToDate(minDateAnsi) + "# AND DateOfBirth<=#" + StrToDate(maxDateAnsi) + "#)";
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EConvertError with message ''6/12/1999' is not a valid date'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

хотя с фака по асессу
-даты должны быть заключены в решетки и написаны по американскому формату (mm/dd/yyyy) с дробной чертой в качестве разделителя.

Добавлено через 4 часа 28 минут
такая штука тоже не проходит:

C++
1
2
3
4
TDateTime dtMIN(min, Month, Day);    //min - меньший год
TDateTime dtMAX(max, Month, Day);   //max - больший год
 
DataModule2->ADODataSet1->CommandText = "SELECT * FROM Table1 WHERE Sex=TRUE AND (DateOfBirth>=#" + FormatDateTime("mm/dd/yyyy", dtMIN) + "# AND DateOfBirth<=#" + FormatDateTime("mm/dd/yyyy", dtMAX) + "#)";
Project Project1.exe raised exception class EOleException with message '[Microsoft][Драйвер ODBC Microsoft Access] Дата содержит синтаксическую ошибку в выражении запроса 'Sex=TRUE AND (DateOfBirth>=#06.12.1989# AND DateOfBirth<=#06.12.1999#)''. Process stopped. Use Step or Run to continue.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
12.06.2012, 17:55
4ance, если не трудно, выложите плиз проект... Так будет проще разобраться.
0
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
14.06.2012, 00:28  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
4ance, если не трудно, выложите плиз проект... Так будет проще разобраться.
Сделал простой поиск по дате - без промежутков...

C++
1
2
3
DataModule2->ADODataSet1->Active = false;
  DataModule2->ADODataSet1->CommandText = "SELECT * FROM \"Table1\" WHERE Table1.DateOfBirth=#" + DBLookupComboBox5->Text + "#";
  DataModule2->ADODataSet1->Active = true;
Выбираю дату из комбобокса(на скрине) - вылазиет

Project Project1.exe raised exception class EOleException with message '[Microsoft][Драйвер ODBC Microsoft Access] Дата содержит синтаксическую ошибку в выражении запроса 'Table1.DateOfBirth=#'30.08.1986'#''. Process stopped. Use Step or Run to continue.

Скрин и проект приложил
Миниатюры
Синтаксическая ошибка в SQL запросе к базе MS Access 2003  
Вложения
Тип файла: 7z testProj.7z (387.8 Кб, 17 просмотров)
0
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
14.06.2012, 00:32  [ТС]
База
пароль - password1
Вложения
Тип файла: 7z db1.7z (9.31 Мб, 18 просмотров)
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.06.2012, 12:04
4ance, Project1.cpp - недостаточно Полноценный проект можно увидеть?

Добавлено через 46 минут
4ance,
Забыл по этому поводу отписаться:
Цитата Сообщение от 4ance Посмотреть сообщение
Сделал простой поиск по дате - без промежутков...
Пробуйте так:
C++
1
DataModule2->ADODataSet1->CommandText = "SELECT * FROM Table1 WHERE Table1.DateOfBirth=" + FormatDateTime("'#'mm'/'dd'/'yyyy'#'", StrToDate(DBLookupComboBox5->Text));


И кстати, почему вы все упорно обходите параметризированные запросы, м? Расскажите, пожалуйста, мне очень интересно

Вот так не проще будет ли?

C++
1
2
3
4
DataModule2->ADODataSet1->Close();
DataModule2->ADODataSet1->CommandText="SELECT * FROM Table1 WHERE Table1.DateOfBirth= =:Дата";
DataModule2->ADODataSet1->Parameters->Items[0]->Value=DBLookupComboBox5->Text;
DataModule2->ADODataSet1->Open();
Вообще же запариваться не надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2012, 12:04
Помогаю со студенческими работами здесь

Синтаксическая ошибка в запросе
При проведении документа расходная накладная выскакивает ошибка (Синтаксическая ошибка Максимум(Количество)). Скажите что не так, вчера...

Синтаксическая ошибка в запросе
я щас лопну от злости!!!! почему не работает String qwe = &quot;SELECT T.id FROM Ліки AS T&quot; + &quot;WHERE (SELECT...

Синтаксическая ошибка в запросе 1С
Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {Документ.ОказаниеУслуги.МодульОбъекта(42)}: Ошибка при вызове...

Синтаксическая ошибка в запросе
Здравствуйте! Пытаемся изменить документ &quot;Счет на оплату покупателю&quot;, его печатную форму, Для этого необходимо изменить запрос, заходим в...

Синтаксическая ошибка в запросе
Помогите пожалуйста с запросами. Те которые я написал, выдают кучу синтаксических ошибок. 1)Вывести список имен преподавателей...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru