Дата содержит синтаксическую ошибку в выражении запроса access

Igor163

0 / 0 / 0

Регистрация: 26.02.2017

Сообщений: 19

1

06.03.2017, 13:06. Показов 2340. Ответов 11

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день!
Выдает ошибку — Дата содержит синтаксическую ошибку в выражении запроса ‘#06.03.2017#’.

С форматом даты пробовал уже по всякому. Пишу значения в mdb.

Подскажите, кто знает как это исправить.

VB.NET
1
2
3
4
5
datereminderDB = Format(MonthCalendar1.SelectionStart, "yyyy/MM/dd")
SqlCom = New OleDb.OleDbCommand("INSERT INTO [Clients] ([id], [NameOfClient], [PhoneOfClient], [DateReminder], [Master], [Comment]) VALUES ('" & idDB & "', '" & nameDB & "', '" & phoneDB & "', '" & masterDB & "', " & "#" & datereminderDB & "#" & ", '" & commentDB & "')", Con)
Con.Open()
SqlCom.ExecuteNonQuery()
Con.Close()



0



Модератор

Эксперт .NET

3897 / 3219 / 484

Регистрация: 27.01.2014

Сообщений: 5,900

06.03.2017, 13:16

2

наверное потому что нужно в запрос передавать не объект даты, а его строковое представление, с которым работает база Access

Добавлено через 2 минуты
а вообще SELECTION START возвращает Integer значение индекса начала выделения.



0



0 / 0 / 0

Регистрация: 26.02.2017

Сообщений: 19

06.03.2017, 13:17

 [ТС]

3

наверное потому что нужно в запрос передавать не объект даты, а его строковое представление, с которым работает база Access

А можете разъяснить на примере?

а вообще SELECTION START возвращает Integer значение индекса начала выделения.

Да, но насколько мне известно, по другому значение выбранное пользователем этот компонент не вернет.



0



Модератор

Эксперт .NET

3897 / 3219 / 484

Регистрация: 27.01.2014

Сообщений: 5,900

06.03.2017, 13:42

4

вам нужно не SelectionStart, а Value данного элемента управления



1



Igor163

0 / 0 / 0

Регистрация: 26.02.2017

Сообщений: 19

06.03.2017, 13:55

 [ТС]

5

Цитата
Сообщение от Yury Komar
Посмотреть сообщение

вам нужно не SelectionStart, а Value данного элемента управления

Заменил используемый компонент на DateTimePicker1

VB.NET
1
2
3
4
5
datereminderDB = Format(DateTimePicker1.Value, "yyyy/MM/dd")
SqlCom = New OleDb.OleDbCommand("INSERT INTO [Clients] ([id], [NameOfClient], [PhoneOfClient], [DateReminder], [Master], [Comment]) VALUES ('" & idDB & "', '" & nameDB & "', '" & phoneDB & "', '" & masterDB & "', " & "#" & datereminderDB & "#" & ", '" & commentDB & "')", Con)
Con.Open()
SqlCom.ExecuteNonQuery()
Con.Close()

Ошибка та же…



0



1090 / 826 / 145

Регистрация: 25.07.2015

Сообщений: 1,831

06.03.2017, 14:13

6

Igor163, поставьте точку останова на con.Open
сделайте скрин сформированного в переменной SqlCom запроса, нужно посмотреть,
какой запрос реально передаётся.
Какой формат в БД у поля [DateReminder] и есть ли там маска ввода?

Цитата
Сообщение от Yury Komar
Посмотреть сообщение

наверное потому что нужно в запрос передавать не объект даты, а его строковое представление, с которым работает база Access

Да не, можно и объект. # как раз и говорит Access , что это дата , в не строка.
Хотя я бы конечно хранил бы в строковом виде и конвертировал бы значение туда-сюда ,
ибо это проще . Формат даты — один из самых замороченных , очень много тонких моментов.



3



Модератор

Эксперт .NET

3897 / 3219 / 484

Регистрация: 27.01.2014

Сообщений: 5,900

06.03.2017, 14:37

7

а мне все же кажется что accessпринимает формат вида dd.MM.yyyy



0



0 / 0 / 0

Регистрация: 26.02.2017

Сообщений: 19

06.03.2017, 14:48

 [ТС]

8

Цитата
Сообщение от Kulma
Посмотреть сообщение

Igor163, поставьте точку останова на con.Open
сделайте скрин сформированного в переменной SqlCom запроса, нужно посмотреть,
какой запрос реально передаётся.
Какой формат в БД у поля [DateReminder] и есть ли там маска ввода?

Формат поля DateReminder — Дата и время
Маски не стояло никакой, но сейчас решил попробовать установить — 00.00.0000;0;_
Но ошибка та же, ничего не изменилось

Миниатюры

Синтаксическая ошибка при передаче даты в Access
 



0



1090 / 826 / 145

Регистрация: 25.07.2015

Сообщений: 1,831

06.03.2017, 16:34

9

Ну вот собственно о чём я писал про приколы с полями типа Дата .
У вас с удовольствием добавится дата , если в запросе она будет выглядеть вот так
#06/03/2017# (слеши , а не точки в качестве разделителя.точки акцесс не понимает).
При этом вы можете добавлять и в формате «yyyy/MM/dd» , но акцесс
всё-равно «кувырнёт» её в формат dd.MM.yyyy , о котором писал Юрий , т.е. согласно
локализации Ru



2



0 / 0 / 0

Регистрация: 26.02.2017

Сообщений: 19

06.03.2017, 17:21

 [ТС]

10

Цитата
Сообщение от Kulma
Посмотреть сообщение

Ну вот собственно о чём я писал про приколы с полями типа Дата .
У вас с удовольствием добавится дата , если в запросе она будет выглядеть вот так
#06/03/2017# (слеши , а не точки в качестве разделителя.точки акцесс не понимает).
При этом вы можете добавлять и в формате «yyyy/MM/dd» , но акцесс
всё-равно «кувырнёт» её в формат dd.MM.yyyy , о котором писал Юрий , т.е. согласно
локализации Ru

На скрине, что я приложил видно, что я задаю формат datereminderDB именно как вы сказали — yyyy/MM/dd.
Но в CommandText у SqlCom она выглядит как dd.MM.yyyy

Не могу понять почему…



0



1090 / 826 / 145

Регистрация: 25.07.2015

Сообщений: 1,831

06.03.2017, 18:00

11

Лучший ответ Сообщение было отмечено Igor163 как решение

Решение

Цитата
Сообщение от Igor163
Посмотреть сообщение

Не могу понять почему…

Потому что вы задаёте формат , т.е. последовательность предоставления информации , а не шаблон.
В локали наверняка прописано , что разделителем в дате является точка, вот оттуда
sql её и берёт.
Тут или вы принудительно меняете настройки локализации, чтобы подогнать представление даты
под формат , понятный акцессу -не уверен , что это правильное решение
Либо оперируете строковыми типами в базе , переводя их в формат даты перед вычислениями,
что гораздо проще.
Тем более , что акцесс , даже если вы ухитритесь малозатратно побороть локализацию и впихнуть
данные в поле таблицы, не позволит вам сохранить данные в формате yyyy/MM/dd.
Он всё-равно перевернёт его в dd.MM.yyyy.
Ему всё-равно , что вы там наформатировали. Он видит , что вводимые данные -дата , значит
введены они должны быть согласно его настройкам.
Попробуйте исполнить запрос на добавление в самом акцесс — результат вас удивит )))

Добавлено через 10 минут
Вот почитайте



1



0 / 0 / 0

Регистрация: 26.02.2017

Сообщений: 19

06.03.2017, 20:07

 [ТС]

12

Цитата
Сообщение от Kulma
Посмотреть сообщение

Потому что вы задаёте формат , т.е. последовательность предоставления информации , а не шаблон.
В локали наверняка прописано , что разделителем в дате является точка, вот оттуда
sql её и берёт.
Тут или вы принудительно меняете настройки локализации, чтобы подогнать представление даты
под формат , понятный акцессу -не уверен , что это правильное решение
Либо оперируете строковыми типами в базе , переводя их в формат даты перед вычислениями,
что гораздо проще.
Тем более , что акцесс , даже если вы ухитритесь малозатратно побороть локализацию и впихнуть
данные в поле таблицы, не позволит вам сохранить данные в формате yyyy/MM/dd.
Он всё-равно перевернёт его в dd.MM.yyyy.
Ему всё-равно , что вы там наформатировали. Он видит , что вводимые данные -дата , значит
введены они должны быть согласно его настройкам.
Попробуйте исполнить запрос на добавление в самом акцесс — результат вас удивит )))

Спасибо!
Вы мне очень помогли!



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

06.03.2017, 20:07

12

Как отфильтровать по диапазону дат (от и до)?!

Нужен запрос вида SQL-WHERE (для функции setFilter).

Лог дебага

"Дата BETWEEN '01.05.2017' AND '02.05.2017'"
"[Microsoft][Драйвер ODBC Microsoft Access] Несоответствие типов данных в выражении условия отбора."
"QODBC3: Unable to execute statement"

Пишу на Qt.

void DataBase::DiapasonDate(QTableView *tableView,QString TableName, QDateEdit *Date1, QDateEdit *Date2)
{
  objTable ->setTable(TableName);
//  Date1->setDisplayFormat("MM/dd/yyyy");
//  Date2->setDisplayFormat("MM/dd/yyyy");
  QString queriDiaposon = "Дата BETWEEN '" + Date1->text() + "' AND '"+ Date2->text() +"'";
  qDebug()<<queriDiaposon;
  objTable->setFilter(queriDiaposon);
  if (!objTable ->select())
  {
      qDebug()<<objTable->lastError().databaseText();
      qDebug()<<objTable ->lastError().driverText();
  }else
  {
   tableView->setModel(objTable);
  }

}

задан 21 мая 2017 в 12:19

hays's user avatar

3

Разобрался нужно было поменять формат типа

  Date1->setDisplayFormat("MM/dd/yyyy");
  Date2->setDisplayFormat("MM/dd/yyyy");

И запрос типа

objTable->setFilter("Дата BETWEEN #" + Date1->text() + "# AND #"+ Date2->text() +"#");

ответ дан 23 мая 2017 в 6:06

hays's user avatar

hayshays

6831 золотой знак7 серебряных знаков22 бронзовых знака

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    >
    Запрос по дате
    , Создание запроса по дате

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    08.10.04, 12:48

      Уважаемые господа!
      Подскажите где у меня ошибка?
      База в файле Access через ADO.
      Создаю запрос с использованием DateEdit:

      SQL.Add(‘(Date=»’+DateEdit.EditText+»’)’);

      компилируется нормально, но при обращении выдает ошибку «Несоответствие типов данных в выражении условия отбора».

      Master

      Chow



      Сообщ.
      #2

      ,
      08.10.04, 13:11

        Используй параметры:

        ExpandedWrap disabled

          SQL.Add(‘(Date=:P_DATE)’);

          SQL.ParamByName(‘P_DATE’).Value = DateEdit.Date;


        nikvicfc



        Сообщ.
        #3

        ,
        08.10.04, 13:34

          Спасибо за такой быстрый ответ, но к сожалению не компилируется.
          Пишет, что не понимает «Parameters».

          Wizard

          Bas



          Сообщ.
          #4

          ,
          08.10.04, 13:50

            Цитата nikvicfc, 8.10.04, 15:48

            SQL.Add(‘(Date=»’+DateEdit.EditText+»’)’);

            ExpandedWrap disabled

              ‘(Date=#’+DateEdit.EditText+’#)’


            nikvicfc



            Сообщ.
            #5

            ,
            11.10.04, 06:04

              Уважаемый Master!
              При таком коде появляется ошибка: ‘Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=##)».


              Kobra



              Сообщ.
              #6

              ,
              11.10.04, 06:23

                Цитата nikvicfc, 8.10.04, 15:48

                SQL.Add(‘(Date=»’+DateEdit.EditText+»’)’);

                тут кажется ошибки нет, но дату нужно вводить соответствующим форматом. точно не помню но кажется YYYY-MM-DD.
                или как писал Chow через параметр.


                shilnik



                Сообщ.
                #7

                ,
                11.10.04, 07:24

                  Если выдается именно (дословно) такая ошибка:

                  Цитата

                  ‘Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=##)»

                  то это значит, что DateEdit.EditText имеет пустое значение. Иначе было бы:
                  ‘Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=#чего-то там#)»

                  Wizard

                  Bas



                  Сообщ.
                  #8

                  ,
                  11.10.04, 07:50

                    Цитата nikvicfc, 11.10.04, 09:04

                    ‘Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=##)».

                    В Accesse дату принято заключать в #.
                    Слово ‘Date’ — являеться зарезервированным во многих язаках, и если оно являеться именем поля то обычно надо брать в кавычки.


                    nikvicfc



                    Сообщ.
                    #9

                    ,
                    11.10.04, 10:01

                      Уважаемые господа!
                      Отвечаю по-порядку.
                      И в таблице и в запросе формат dd.mm.yyyy, в таблице Access — краткий формат даты.
                      Первоначально сообщение об ошибке так и было написоно:’Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=#11.10.2004#)».
                      Название поля(Date) на самом деле иное.

                      Сообщение отредактировано: nikvicfc — 11.10.04, 10:05

                      Wizard

                      Bas



                      Сообщ.
                      #10

                      ,
                      11.10.04, 10:26

                        Цитата nikvicfc, 11.10.04, 13:01

                        ‘(Date=#11.10.2004#)».

                        А так (Date=#11/10/2004#)

                        ExpandedWrap disabled

                          WHERE (((Заказы.ДатаРазмещения)=#7/26/1996#));


                        pigas



                        Сообщ.
                        #11

                        ,
                        12.10.04, 01:51

                          слово DATE зарезервировано стандартом ANSI/iso sql92.
                          Оно не допустимо к исползованию как имя поля.


                          nikvicfc



                          Сообщ.
                          #12

                          ,
                          12.10.04, 05:45

                            Уважаемый Master!
                            Попробывал заменить везде, в том числе в системе разделители даты.
                            Кроме изменения разделителей ничего не изменилось. Ошибка та же:’Дата содержит синтаксическую ошибку в выражении запроса ‘(S_Date=#11/10/2004#)».
                            Уважаемый Pigas, как я уже писал название поля на самом деле не Date, так написал на форуме для простоты.


                            Mamont



                            Сообщ.
                            #13

                            ,
                            12.10.04, 06:07

                              Member

                              **

                              Рейтинг (т): 4

                              Я работаю на Delphi 7 с использованием DBExpress Компонет.
                              И у меня тоже возникла ошибка при работе с датой, точнее передачей ее запросом.

                              Цитата

                              SQLQuery1.Close;
                              SQLQuery1.SQL.Text:=’insert into history (now_date) values (:date)’;
                              SQLQuery1.ParamByName(‘date’).asDateTime:=date;
                              SQLQuery1.ExecSQL();

                              Он ругается : «dbExpress Error: Invalid Field Type»
                              В таблице поле типа: datetime
                              Также пытался Задавать параметр asDate. Все равно нивкакую.

                              Сообщение отредактировано: Mamont — 12.10.04, 06:23

                              Master

                              Chow



                              Сообщ.
                              #14

                              ,
                              12.10.04, 06:09

                                Какой текст запроса полностью?
                                (И все-же стоит использовать параметры — не надо ломать голову о формате представления того или иного типа. Тем более, что на другом компьютере могут быть другие настройки и ваша программа не будет работать)

                                Добавлено 12.10.04, 06:11

                                Цитата Mamont, 12.10.04, 09:07

                                ‘insert into (now_date) values (:date)’

                                Где здесь указано имя таблицы?


                                Mamont



                                Сообщ.
                                #15

                                ,
                                12.10.04, 06:12

                                  Member

                                  **

                                  Рейтинг (т): 4

                                  Забыл сказать, что тоже компилирует он нормально, ошибка возникает воремя обращения.

                                  Добавлено 12.10.04, 06:14
                                  Sorry

                                  Цитата

                                  SQLQuery1.SQL.Text:=’insert into history (now_date) values (:date)’;

                                  Это я когда пост писал, забыл написать. В проге название таблицы присутствует.

                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                  0 пользователей:

                                  • Предыдущая тема
                                  • Delphi: Базы данных
                                  • Следующая тема

                                  Рейтинг@Mail.ru

                                  [ Script execution time: 0,0356 ]   [ 16 queries used ]   [ Generated: 12.06.23, 10:53 GMT ]  

                                  I am creating a simple database for tracking working hours. The idea is that:

                                  1. Every day you need to input only the days that employee did not work (startDate, endDate, absenceType),
                                  2. Then calculate working days for the whole month or selected period.

                                  Calculation of working days should take into account weekends (saturday, sunday) and holidays from Holiday table.

                                  I took a function sample from MSDN (Counting the Number of Working Days in Access 2007) and put it into a module in my MS Access 2010 db but each time I run a query I have this error.

                                  Typically the same error appears attempting to run a query in another sample database from somewhere.

                                  The problem is in the strWhere clause:

                                  strWhere = "[Holiday] >=#" & startDate & "# AND [Holiday] <=#" & endDate & "#"
                                  
                                  ' Count the number of holidays.
                                  nHolidays = DCount(Expr:="[Holiday]", Domain:=strHolidays, Criteria:=strWhere)
                                  Workdays = nWeekdays - nHolidays
                                  

                                  The error msg from both databases is available in the link below

                                  Runtime Error 3075 Syntax error in date in query expression

                                  enter image description here

                                  Any help is appreciated.

                                  Parfait's user avatar

                                  [ Script execution time: 0,0356 ]   [ 16 queries used ]   [ Generated: 12.06.23, 10:53 GMT ]  

                                  I am creating a simple database for tracking working hours. The idea is that:

                                  1. Every day you need to input only the days that employee did not work (startDate, endDate, absenceType),
                                  2. Then calculate working days for the whole month or selected period.

                                  Calculation of working days should take into account weekends (saturday, sunday) and holidays from Holiday table.

                                  I took a function sample from MSDN (Counting the Number of Working Days in Access 2007) and put it into a module in my MS Access 2010 db but each time I run a query I have this error.

                                  Typically the same error appears attempting to run a query in another sample database from somewhere.

                                  The problem is in the strWhere clause:

                                  strWhere = "[Holiday] >=#" & startDate & "# AND [Holiday] <=#" & endDate & "#"
                                  
                                  ' Count the number of holidays.
                                  nHolidays = DCount(Expr:="[Holiday]", Domain:=strHolidays, Criteria:=strWhere)
                                  Workdays = nWeekdays - nHolidays
                                  

                                  The error msg from both databases is available in the link below

                                  Runtime Error 3075 Syntax error in date in query expression

                                  enter image description here

                                  Any help is appreciated.

                                  Parfait's user avatar

                                  Parfait

                                  104k17 gold badges93 silver badges124 bronze badges

                                  asked Nov 14, 2017 at 14:35

                                  Vedran's user avatar

                                  4

                                  You must force a format on the string expressions for your dates. Get used to use the ISO sequence yyyy-mm-dd as it works everywhere:

                                  strHolidays = "NameOfYourTable"
                                  strWhere = "[Holiday] >= #" & Format(startDate, "yyyy/mm/dd") & "# AND [Holiday] <= #" & Format(endDate, "yyyy/mm/dd") & "#"
                                  
                                  ' Count the number of holidays.
                                  nHolidays = DCount("*", strHolidays, strWhere)
                                  

                                  answered Nov 15, 2017 at 10:51

                                  Gustav's user avatar

                                  GustavGustav

                                  53k7 gold badges29 silver badges55 bronze badges

                                  4

                                  In the past I have had issues where VBA doesn’t always respect the regional date settings. Try forcing it into US format before concatenating it

                                  strWhere = "[Holiday] >=#" & Format(startDate, "MM/dd/yyyy") & "# AND [Holiday] <=#" & Format(endDate, "MM/dd/yyyy") & "#"
                                  

                                  answered Nov 14, 2017 at 14:44

                                  ste-fu's user avatar

                                  ste-fuste-fu

                                  6,8093 gold badges25 silver badges45 bronze badges

                                  2

                                  1. Make sure the date is in MM/DD/YYYY order in VBA. Always. I generally use:

                                    strWhere = "[Holiday] >= " & Format(startDate,"#mm/dd/yyyy#")

                                  2. the second argument of DCount is strHolidays. That does not look like the name of a table/query. This argument should be the name of a table/query.

                                  answered Nov 14, 2017 at 14:45

                                  iDevlop's user avatar

                                  iDevlopiDevlop

                                  24.8k11 gold badges89 silver badges147 bronze badges

                                  2

                                  Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите восстановить пароль

                                  Поиск по форуму
                                  Расширенный поиск

                                  Страница 1 из 2 1 2 Следующая >

                                  Почему возникает эта ошибка.
                                  Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘[Стипендія нарахування].[Середній бал]? (база данных в Access 2010)

                                  SELECT [Стипендія нарахування].[Середній бал]
                                  IF([Середній бал]<4,»0″,
                                  IF([Середній бал]=5,»950″,
                                  IF([Середній бал]>=4 And <5,»800″)) AS [Стипендія]
                                  FROM [Стипендія нарахування];

                                  Сообщение об ошибке при использовании специальных символов в базах данных Access

                                  В этой статье перечислены специальные символы, которые не следует использовать при работе с именами объектов базы данных или именами полей во всех версиях Access.

                                  Оригинальный номер базы знаний: 826763

                                  Эта статья применима к файлам баз данных Microsoft Access (.mdb) или (.accdb), а также к файлу проекта Microsoft Access (.adp).

                                  Симптомы

                                  При использовании специальных символов в Access возникает одна из следующих проблем.

                                  Проблема 1

                                  В имени поля таблицы используется один из следующих специальных символов:

                                  • Знак над символом (`)
                                  • Восклицательный знак (!)
                                  • Точка (.)
                                  • квадратные скобки ([])
                                  • Пробел
                                  • Непечатаемые символы

                                  В этом случае отобразится следующее сообщение об ошибке:

                                  Недопустимое имя поля.
                                  Убедитесь, что имя не содержит точку (.), восклицательный знак(!), квадратные скобки ([]), пробел или непечатаемый символ, например символ возврата каретки. Если вы вставляете имя из другого приложения, попробуйте нажать клавишу ESC и ввести имя еще раз.

                                  При использовании этих специальных символов в имени таблицы отобразится следующее сообщение об ошибке:

                                  Введенное имя объекта ‘TableName‘ не соответствует правилам именования объектов Microsoft Office Access.

                                  Проблема 2

                                  Вы создаете выражение запроса. Выражение запроса включает поля, содержащие специальные символы. При использовании отдельных специальных символов отображается следующее сообщение об ошибке:

                                  Если имя поля содержит пробел, вопросительный знак (?) или знак @, отобразится следующее сообщение об ошибке:

                                  Ошибка синтаксиса во введенном выражении.
                                  Задано значение для операции без оператора

                                  Если имя поля содержит кавычки («) или апостроф (‘), отобразится следующее сообщение об ошибке:

                                  Введенное выражение содержит ошибочную строку.
                                  Строка может содержать до 2048 знаков, включая знаки открывающей и закрывающей кавычек.

                                  Если имя поля содержит знак решетки (#), отобразится следующее сообщение об ошибке:

                                  Введенное выражение содержит недопустимое значение даты.

                                  Если имя поля содержит знак процента (%), тильду (

                                  ), точку с запятой (;) или скобки ([]), отобразится следующее сообщение об ошибке:

                                  Ошибка синтаксиса во введенном выражении.
                                  Пропущен операнд или оператор, введен недопустимый знак или лишняя запятая, либо задана строка без кавычек.

                                  Если имя поля содержит фигурные скобки (), отобразится следующее сообщение об ошибке:

                                  Неверно сформированный код GUID в выражении запроса ‘ObjectName

                                  Если имя поля содержит квадратные скобки ([]) или круглые скобки (()), отобразится следующее сообщение об ошибке:

                                  Во введенном выражении отсутствует закрывающая скобка, квадратная скобка (]) или вертикальная черта (|).

                                  Проблема 3

                                  У вас есть запрос, содержащий выражения запроса. Выражения запроса включают поля, содержащие специальные символы. При выполнении запроса предлагается ввести значение параметра. Как правило, эта проблема возникает при использовании следующих специальных символов:

                                  • знак «больше» (>);
                                  • знак «меньше» (<);
                                  • Точка (.)
                                  • Звездочка (*)
                                  • Двоеточие (:)
                                  • Крышка (^)
                                  • Знак плюс (+)
                                  • Обратная косая черта ()
                                  • Знак равенства (=)
                                  • амперсанд (&);
                                  • Косая черта (/)

                                  Обходной путь

                                  Чтобы устранить эту проблему, не используйте специальные символы. Если в выражениях запроса необходимо использовать специальные символы, заключите их в квадратные скобки ([]). Например, если вы хотите использовать знак «больше» (>), используйте [>].

                                  Дополнительная информация

                                  Microsoft Access не ограничивает использование специальных символов, таких как знак решетки (#), точка (.) или кавычки («) в именах объектов базы данных или в именах полей базы данных. Однако при использовании специальных символов могут возникнуть непредвиденные ошибки. Поэтому корпорация Майкрософт рекомендует не использовать специальные символы в именах объектов базы данных в базе данных Access или в проекте базы данных. В этой статье рассматриваются специальные символы, которые не следует использовать во избежание известных проблем с ними.

                                  При работе с Access или другим приложением, например приложением Microsoft Visual Basic или приложением Active Server Pages (ASP), не следует использовать следующие специальные символы:

                                  Соглашения об именовании в Access

                                  Корпорация Майкрософт рекомендует не использовать точку (.), восклицательный знак (!), знак ударения (`), квадратные скобки ([ ]), пробел ( ) или кавычки («) внутри имен функций, имен переменных, имен полей или имен объектов базы данных, таких как таблицы и формы.

                                  Использование следующих специальных символов в Access приводит к возникновению известных проблем. В следующих сценариях описано, когда не следует использовать специальные символы:

                                  Что значит пропущен оператор в выражении запроса access

                                  Профиль
                                  Группа: Участник
                                  Сообщений: 310
                                  Регистрация: 15.11.2007

                                  Репутация: нет
                                  Всего: нет

                                  Здравствуйте.

                                  Вобще на форме выбирется ДАТА в dateTimePicker, затем хочу сделать ЗАПРОС на ВЫБОРКУ из таблицы (Access) по этой дате . ну если дата совпала, то потом все вывожу в dataGridView1

                                  Код
                                  OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=»+dateTimePicker1.Value+»», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
                                  B.SelectCommand.Connection.Open();
                                  B.SelectCommand.ExecuteNonQuery();
                                  B.SelectCommand.Connection.Close();
                                  DataTable C = new DataTable();
                                  B.Fill(C);
                                  dataGridView1.DataSource = C;

                                  ну вобщем когда я на форме выбираю дату и нажимаю кнопку поиск ВЫЛАЗИЕТ вот такая ОШИБКА:

                                  Код
                                  Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘Дата=03.12.2008 0:00:00’.
                                  Код
                                  SELECT * FROM Содержание_заказа WHERE Дата=03.12.2008 0:00:00

                                  Помогите разобраться с этой проблемой.
                                  Заранее спасибо.

                                  Let’s do some .NET

                                  Профиль
                                  Группа: Модератор
                                  Сообщений: 2828
                                  Регистрация: 19.12.2005
                                  Где: Санкт-Петербург

                                  Репутация: нет
                                  Всего: 67

                                  kuller, dateTimePicker1.Value.ToString(«dd.MM.yyyy»);

                                  Добавлено через 36 секунд
                                  kuller, а вообще в каком формате дата хранится в базе?

                                  Профиль
                                  Группа: Участник
                                  Сообщений: 310
                                  Регистрация: 15.11.2007

                                  Репутация: нет
                                  Всего: нет

                                  Let’s do some .NET

                                  Профиль
                                  Группа: Модератор
                                  Сообщений: 2828
                                  Регистрация: 19.12.2005
                                  Где: Санкт-Петербург

                                  Репутация: нет
                                  Всего: 67

                                  Вот так выглядит у меня в Access 2003 запрос на выборку поля с датой

                                  SELECT Table1.ID, Table1.Field1
                                  FROM Table1
                                  WHERE (((Table1.Field1)=#1/10/2008#));

                                  Профиль
                                  Группа: Участник
                                  Сообщений: 310
                                  Регистрация: 15.11.2007

                                  Репутация: нет
                                  Всего: нет

                                  Код
                                  Дата содержит синтаксическую ошибку в выражении запроса ‘Дата=#03.12.2008 0:00:00#’.
                                  Код
                                  SELECT * FROM Содержание_заказа WHERE Дата=#03.12.2008 0:00:00#

                                  Добавлено через 4 минуты и 4 секунды
                                  и так ошибка(((

                                  Код
                                  OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE (([Содержание_заказа].[Дата]=» + dateTimePicker1.Value + «))», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
                                  Код
                                  Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘(([Содержание_заказа].[Дата]=03.12.2008 0:00:00))’.

                                  Let’s do some .NET

                                  Профиль
                                  Группа: Модератор
                                  Сообщений: 2828
                                  Регистрация: 19.12.2005
                                  Где: Санкт-Петербург

                                  Репутация: нет
                                  Всего: 67

                                  kuller, попробуйте прогнать запрос с хардкодом

                                  Код
                                  OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата= #12/03/2008#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
                                  B.SelectCommand.Connection.Open();
                                  B.SelectCommand.ExecuteNonQuery();
                                  B.SelectCommand.Connection.Close();
                                  DataTable C = new DataTable();
                                  B.Fill(C);
                                  dataGridView1.DataSource = C;

                                  Профиль
                                  Группа: Участник
                                  Сообщений: 310
                                  Регистрация: 15.11.2007

                                  Репутация: нет
                                  Всего: нет

                                  Код
                                  OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#12/03/2008#», .

                                  ну т.к. в БД нет строки с такой датой то у меня выскочила табличка:

                                  Код
                                  MessageBox.Show(«Извените, по вашему запросу ничего не найдено», .

                                  значит все работает, но это для статического варианта даты . а вот как теперь это исправить для динамически меняющейся даты.

                                  Добавлено через 1 минуту и 8 секунд
                                  Вот поставил 20/11/2008:
                                  и в dataGridView1 вывелись ВСЕ найденные РЕЗУЛЬТАТЫ .. причем верные)))))

                                  Добавлено через 3 минуты и 34 секунды
                                  ВЫВОД:

                                  дату надо получить из dateTimePicker1.Value и привести к виду:

                                  #ч/м/г#,а потом только вызывать запрос.

                                  Let’s do some .NET

                                  Профиль
                                  Группа: Модератор
                                  Сообщений: 2828
                                  Регистрация: 19.12.2005
                                  Где: Санкт-Петербург

                                  Репутация: нет
                                  Всего: 67

                                  Код
                                  OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#»+dateTimePicker1.Value.ToString(«dd/MM/yyyy»)+»#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
                                  B.SelectCommand.Connection.Open();
                                  B.SelectCommand.ExecuteNonQuery();
                                  B.SelectCommand.Connection.Close();
                                  DataTable C = new DataTable();
                                  B.Fill(C);
                                  dataGridView1.DataSource = C;

                                  Это сообщение отредактировал(а) Partizan — 4.12.2008, 12:28

                                  Профиль
                                  Группа: Участник
                                  Сообщений: 310
                                  Регистрация: 15.11.2007

                                  Репутация: нет
                                  Всего: нет

                                  Да уж(
                                  и так не работате((((

                                  Код
                                  OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#»+dateTimePicker1.Value.ToString(«MM/dd/yyyy»)+»#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
                                  Код
                                  Дата содержит синтаксическую ошибку в выражении запроса ‘Дата=#11.20.2008#’.
                                  Код
                                  SELECT * FROM Содержание_заказа WHERE Дата=#11.20.2008#

                                  Добавлено через 5 минут
                                  Причем по моему не так:
                                  ToString(«MM/dd/yyyy»)
                                  а вот так:
                                  ToString(«dd/MM/yyyy»)
                                  ну всеравно не пашет((((

                                  Это сообщение отредактировал(а) kuller — 4.12.2008, 12:32

                                  Let’s do some .NET

                                  Профиль
                                  Группа: Модератор
                                  Сообщений: 2828
                                  Регистрация: 19.12.2005
                                  Где: Санкт-Петербург

                                  Понравилась статья? Поделить с друзьями:
                                • Дата рождения указана некорректно 100 ошибка вконтакте
                                • Дата рождения ошибка в поле
                                • Данфосс частотный преобразователь ошибка al29
                                • Данфосс ошибка w68 на частотники
                                • Данфосс ошибка ulo на контроллере