Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для Plugz
0 / 0 / 0
Регистрация: 26.11.2022
Сообщений: 7

Пожалуйста объясните ошибку моего запроса

26.11.2022, 14:30. Показов 918. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По наставлению преподавателя я создал запрос в Access для добавления в таблицу не занятых преподавателей за определенный период времени. И этот запрос мне нужно было перенести и подправить в Windows Forms, сам запрос:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        private void btnOk2_Click(object sender, EventArgs e)
        {
            string query = $"SELECT teachers.ID_teacher, teachers.fio " +
                $"FROM teachers LEFT JOIN (SELECT [lectures for gr/te].teachers.ID_teacher, [lectures for gr/te].fio, [lectures for gr/te].date " +
                $"FROM [lectures for gr/te] " +
                $"WHERE(([lectures for gr/te].date) Between {dateTimePicker3.Value.ToShortDateString()} AND {dateTimePicker2.Value.ToShortDateString()})) zaprosnagruzka ON teachers.ID_teacher = zaprosnagruzka.ID_teacher " +
                $"WHERE(((zaprosnagruzka.date) Is Null))";
            OleDbCommand command = new OleDbCommand(query, dbConnection);
            MessageBox.Show(query);
            command.ExecuteNonQuery();
            this.freeTeachersTableAdapter.Fill(this.instituteDataSet.freeTeachers);
        }
Но мне выводит ошибку: "Число содержит синтаксическую ошибку в выражении запроса '(([lectures for gr/te].date) Between 26.11.2022 AND 29.11.2022)'."
Дата в таблице и дата в dateTimePicker одного формата, так что саму ошибку я не понимаю
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2022, 14:30
Ответы с готовыми решениями:

Объясните пожалуйста где я допускаю ошибку
В одномерном массиве, состоящем из n действительных элементов, вычислить: • минимальный элемент массива; • сумму элементов...

Объясните, пожалуйста, мою ошибку с вызовом метода
С помощью метода реализовать сравнение двух целых чисел, возвращаемый результат в виде одного из знаков: >, < или = static...

Объясните работу запроса, пожалуйста
SELECT a., a.SUMMA, b., b.SUMMA, a.DATBLK FROM RASXOD AS a, rasxod AS b WHERE b.DATBLK =a.DATBLK and a.=4 and b.<>a.; Спасибо,...

13
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
26.11.2022, 15:05
Plugz, чему равно значение переменной query вы смотрели?
0
 Аватар для Plugz
0 / 0 / 0
Регистрация: 26.11.2022
Сообщений: 7
26.11.2022, 15:15  [ТС]
Она равна этому:
"SELECT teachers.ID_teacher, teachers.fio FROM teachers LEFT JOIN (SELECT [lectures for gr/te].teachers.ID_teacher, [lectures for gr/te].fio, [lectures for gr/te].date FROM [lectures for gr/te] WHERE(([lectures for gr/te].date) Between 26.11.2022 AND 29.11.2022)) zaprosnagruzka ON teachers.ID_teacher = zaprosnagruzka.ID_teacher WHERE(((zaprosnagruzka.date) Is Null))"
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
26.11.2022, 17:02
Plugz, смотрим сюда
SQL
1
BETWEEN 26.11.2022 AND 29.11.2022
и видим что дата в неверном виде указана. Даты в Access заключаются в # и еще, вероятно, формат должен быть YYYY-MM-DD.

Добавлено через 1 минуту
Если заработает, то напишите. В вашем коде еще одно изменение требуется.
0
 Аватар для Plugz
0 / 0 / 0
Регистрация: 26.11.2022
Сообщений: 7
27.11.2022, 14:08  [ТС]
Сделал как вы сказали, но ошибка все та же
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
27.11.2022, 14:12
Plugz, показывайте исправленный код и текст запроса
0
 Аватар для Plugz
0 / 0 / 0
Регистрация: 26.11.2022
Сообщений: 7
27.11.2022, 14:17  [ТС]
C#
1
2
3
4
5
string query = $"SELECT teachers.ID_teacher, teachers.fio " +
                $"FROM teachers LEFT JOIN (SELECT [lectures for gr/te].teachers.ID_teacher, [lectures for gr/te].fio, [lectures for gr/te].date " +
                $"FROM [lectures for gr/te] " +
                $"WHERE(([lectures for gr/te].date) Between #{dateTimePicker3.Value.ToString("yyyy.MM.d")}# AND #{dateTimePicker2.Value.ToString("yyyy.MM.d")}#)) zaprosnagruzka ON teachers.ID_teacher = zaprosnagruzka.ID_teacher " +
                $"WHERE(((zaprosnagruzka.date) Is Null))";
Текст:
SQL
1
"SELECT teachers.ID_teacher, teachers.fio FROM teachers LEFT JOIN (SELECT [lectures for gr/te].teachers.ID_teacher, [lectures for gr/te].fio, [lectures for gr/te].date FROM [lectures for gr/te] WHERE(([lectures for gr/te].date) Between #2022.11.27# AND #2022.11.29#)) zaprosnagruzka ON teachers.ID_teacher = zaprosnagruzka.ID_teacher WHERE(((zaprosnagruzka.date) Is Null))"
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
27.11.2022, 14:33
Plugz, а если заменить ToString("yyyy.MM.d") на ToString("yyyy-MM-dd")?

P.S. Я отформатировал запрос для лучшего понимания. Строка №8 вызывает недоумение. Можете пояснить что такое teachers между [lectures for gr/te] и ID_teacher?
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    teachers.ID_teacher,
    teachers.fio
FROM
    teachers
    LEFT JOIN (
        SELECT
            [lectures FOR gr/te].teachers.ID_teacher, -- Три части через точку - это как?
            [lectures FOR gr/te].fio, -- Это колонка здесь не нужна по идее
            [lectures FOR gr/te].date
        FROM
            [lectures FOR gr/te] -- тут не помешал бы псевдоним для таблицы, чтобы упростить запрос. Access же поддерживает AS?
        WHERE
            [lectures FOR gr/te].date BETWEEN #2022.11.27# AND #2022.11.29#
    ) zaprosnagruzka ON teachers.ID_teacher = zaprosnagruzka.ID_teacher
WHERE
    zaprosnagruzka.date IS NULL
0
 Аватар для Plugz
0 / 0 / 0
Регистрация: 26.11.2022
Сообщений: 7
27.11.2022, 14:55  [ТС]
Я связывал поля ID_teachers из таблицы teachers, которая хранит информацию об учителях, и из запроса lectures for gr/te, где эта информация использовалась. Если честно я не помню почему создавал запрос именно так, но он работал и я оставил так.

P.S.
SQL
1
[lectures FOR gr/te].fio, -- Это колонка здесь не нужна по идее
Это колонку добавил, чтоб пользователь видел ФИО преподавателей, а не номер

Добавлено через 9 минут
SQL
1
[lectures FOR gr/te] -- тут не помешал бы псевдоним для таблицы, чтобы упростить запрос. Access же поддерживает AS?
Я делал так, но Access почему-то при выполнении запроса запрашивал ввод даты
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
27.11.2022, 15:08
Лучший ответ Сообщение было отмечено Plugz как решение

Решение

Plugz, вы можете выполнить пару запросов в самом Access и сообщить результат?
первый
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    teachers.ID_teacher,
    teachers.fio
FROM
    teachers
    LEFT JOIN (
        SELECT
            [lectures FOR gr/te].teachers.ID_teacher,
            [lectures FOR gr/te].fio,
            [lectures FOR gr/te].date
        FROM
            [lectures FOR gr/te]
        WHERE
            [lectures FOR gr/te].date BETWEEN #2022-11-27# AND #2022-11-29#
    ) zaprosnagruzka ON teachers.ID_teacher = zaprosnagruzka.ID_teacher
WHERE
    zaprosnagruzka.date IS NULL

второй
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
    t.ID_teacher,
    t.fio
FROM
    teachers AS t
    LEFT JOIN (
        SELECT
            l.teachers.ID_teacher,
            l.date
        FROM
            [lectures FOR gr/te] AS l
        WHERE
            l.date BETWEEN #2022-11-27# AND #2022-11-29#
    ) zaprosnagruzka ON t.ID_teacher = zaprosnagruzka.ID_teacher
WHERE
    zaprosnagruzka.date IS NULL
1
 Аватар для Plugz
0 / 0 / 0
Регистрация: 26.11.2022
Сообщений: 7
27.11.2022, 15:21  [ТС]
Выполнил запросы, они оба работают одинаково и как надо
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
27.11.2022, 15:23
Plugz, значит берете запрос №2 и подставляете его в C# так чтобы дата была ровно в таком же формате.
1
 Аватар для Plugz
0 / 0 / 0
Регистрация: 26.11.2022
Сообщений: 7
27.11.2022, 15:52  [ТС]
Понял, сейчас попробую

Добавлено через 26 минут
У меня все работает, благодарю вас.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
28.11.2022, 09:38
Лучший ответ Сообщение было отмечено Plugz как решение

Решение

Plugz, и еще шаг. Упрощаем запрос и используем параметры (важно!).
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void btnOk2_Click(object sender, EventArgs e)
{
    const string query = @"SELECT
    l.teachers.ID_teacher,
    l.fio
FROM
    [lectures FOR gr/te] AS l
WHERE
    l.date BETWEEN ? AND ?";
    OleDbCommand command = new OleDbCommand(query, dbConnection);
    command.Parameters.Add(new OleDbParameter("dateFrom", OleDbType.Date)).Value = dateTimePicker3.Value.Date;
    command.Parameters.Add(new OleDbParameter("dateTo", OleDbType.Date)).Value = dateTimePicker2.Value.Date;
    command.ExecuteNonQuery();
    this.freeTeachersTableAdapter.Fill(this.instituteDataSet.freeTeachers);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2022, 09:38
Помогаю со студенческими работами здесь

Объясните пожалуйста есть ли ограничения на длину запроса?
Помогите (объясните) пожалуйста есть ли ограничения на длину sql-запроса. приходится писать: CurrentDb.Execute "UPDATE TEMP_REAL,...

Объясните пожалуйста ошибку
Переделываю проект с Delphi на Lazarus, и вот столкнулся с ошибкой: компилятор выдаёт ошибку на строке "constructor...

Объясните ошибку пожалуйста
Писал передвижение в 2d игре. Вот мой код: using UnityEngine; using System.Collections; public class NewBehaviourScript :...

Объясните пожалуйста ошибку!!!
Здравствуйте! Я написала программу, вроде бы всё правильно, но оно мне выдает вот такую ошибку: Error215: Runtime error. Объясните её...

Объясните пожалуйста ошибку компиляции
Давайте темам осмысленные имена Помогите пожалуйста, не пойму почему ругается на эту строку? public class TrafficLightDemo { ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru