Форум программистов, компьютерный форум, киберфорум
Visual C++: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для FROSTEROID
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24

DateTime в SQL запросе к базе данных C++/CLI. Нужен способ сравнить даты

02.05.2013, 17:33. Показов 3809. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пользователь выбирает месяц при помощи dateTimePicker. Нам важен месяц, им выбранный.
(Кстати, можно ли сделать так, чтобы dateTimePicker предоставлял только выбор месяца?)
Получив этот месяц, мы лезем в базу данных с кортежами, в каждом из которых есть поле "Дата" с типом данных Дата/время. (База данных создана в MS Access и, проверено, нормально поддаётся работе с ней.)
Из записей нам нужны только те, в поле "Дата" которых хранится дата, принадлежащая выбранному месяцу.

Поиск осуществлять пытаюсь при помощи SELECT прямо в SQL запросе (Задать условие WHERE хочу).
С радостью почитаю предложения с иными способами. Только не поиск в ДатаГрид'е(/ДатаСет'е) после заполнения.
^_^

Для того, чтобы находить этот "искомый месяц" создаю две переменных, с которыми буду сравнивать значение поля "Дата" из очередного кортежа. Одна из них будет хранить последнее число из предыдущего месяца, а вторая - первое из следующего. "Искомый месяц" - это числа, находящиеся "между" этими двумя.

Написал код, в котором, как я предполагал, в SQLзапросе будут сравниваться даты.
Но, по незнанию, написать запрос правильно не могу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        DateTime selected = dateTimePicker1->Value;  // Берём дату, выбранную пользователем
        
         // *Дата за один день до текущего месяца* - вычитанием из текущей количества дней:
        DateTime prevMonth = selected.AddDays(-selected.Day); //;
        // Дата через день после текущего месяца - прибавлением 1 месяца и вычитанием текущих дней, за исключением одного.
        DateTime nextMonth = selected.AddMonths(1); nextMonth = nextMonth.AddDays(-nextMonth.Day + 1);
        //.
 
        MessageBox::Show("Предыдущий месяц " + prevMonth.ToString() + "; следующий "+ nextMonth.ToString());
 
//      ShedulesAdapter->SelectCommand->CommandText = "SELECT Расписание.* FROM Расписание"; // - Запрос на взятие из таблицы ВСЕГО - работает идеально.
        ShedulesAdapter->SelectCommand->CommandText = "SELECT Расписание.* FROM Расписание " 
                                        +"WHERE [Дата] > convert(DATETIME, '"+prevMonth.ToString()+"', 104)"
                                        +" AND [Дата] < convert(DATETIME, '"+nextMonth.ToString() + "', 104)";
Ну и этот великолепный, по моему полчасаназад'овому мнению, код заставляет программу выпасть с ошибкой о том, что "нет, дружище, такой операции - convert!"

ЧЯДНТ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2013, 17:33
Ответы с готовыми решениями:

Как в базе данных, в запросе сделать так, чтобы пользователь вводил даты, и если такой даты нету, то выводило окно "тако
Как в базе данных, в запросе сделать так, чтобы пользователь вводил даты, и если такой даты нету, то выводило окно &quot;такой даты нет,...

Несоответствие формата даты System.DateTime и DATETIME в SQL Express Edition
Столкнулся с такой проблемой: В System.DateTime дата пишется в формате дд.мм.гггг чч.мм.сс, а DATETIME в SQL Express Edition хочет получать...

Как сравнить Textbox с значениями в базе данных sql
Поместил на форму компонент Edit и назвал его Login Есть sql база данных LP в которой есть два столбца(Login,Password) мне нужно узнать...

4
 Аватар для FROSTEROID
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24
02.05.2013, 17:40  [ТС]
Там в коде есть ещё СообщениевыйБокс - его использовал для проверки полученных переменных.
Можно его игнорировать.
-_-
Миниатюры
DateTime в SQL запросе к базе данных C++/CLI. Нужен способ сравнить даты  
0
 Аватар для FROSTEROID
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24
13.05.2013, 09:35  [ТС]
О, гуру Visual С++ и SQL, пусть давность заданности вопроса Вас не пугает
Очень хочу увидеть Ваш ответ
0
 Аватар для FROSTEROID
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24
28.05.2013, 22:23  [ТС]
ПОЧТИ дописал программу, обойдясь без датосодержащего вопроса к базе. И снова столкнулся с этой проблемой. Мне нужно удалить запись из базы данных. Для этого в DataAdapter'e есть параметр DeleteCommand. Всё ОК, оно работает, йа удаляю записи с восторженным треском мышкоклика, пока не имею дела с DateTime.
Но вот, этот час настал, и мне нужно удалить запись из табла, где ключевое поле содержит ДАТУ!

Собственно, вот костяк процедуры удаления:
C++
1
2
3
4
5
6
7
8
    //...                       
DateTime tmpDate = /*...*/ ;
oleDbConnection1->Open(); 
//... Начало цикла, в котором счётчиком является tmpDate:
ShedulesAdapter->DeleteCommand->CommandText = "Delete * FROM Билеты WHERE Дата = '" + SqlTypes::SqlDateTime::Parse(tmpDate.ToString()).ToString() + "'";
    ShedulesAdapter->DeleteCommand->ExecuteNonQuery(); 
//... Конец цикла.
oleDbConnection1->Close();
Вся эта радость вложена в цикл, где tmpDate представляет собой значение типа DateTime, которое должно стать ключом для удаления очередного кортежа из таблицы.

Если хотите что-то сказать насчёт конвертации в конвертации - не стесняйтесь, мне нужно пополнить список бесполезных отвечаторов.

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

Ну и давно полюбившийся мне эксепшн:
Миниатюры
DateTime в SQL запросе к базе данных C++/CLI. Нужен способ сравнить даты  
0
 Аватар для FROSTEROID
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24
29.05.2013, 15:11  [ТС]
Всем спасибо за внимание, решение найдено.
Как обычно, всё упиралось в правильный запрос к Гуглу:
http://stackoverflow.com/quest... -ms-access

Надо представить дату в виде YYYY-MM-DD HH:NN:SS.
Для этой гадости йа написал функцию, кушающую DateTime и какающую String'aми:
C++
1
2
3
4
5
6
7
8
9
String ^DateTimeToEatableForMSAccess(DateTime a){
        String ^ b = a.Year.ToString()+"-";
        if(a.Month.ToString()->Length == 2) b+= (a.Month.ToString() + "-"); else b+= ("0" + a.Month.ToString() + "-");
        if(a.Day.ToString()->Length == 2) b+= (a.Day.ToString() + " "); else b+= ("0" + a.Day.ToString() + " ");
        if(a.Hour.ToString()->Length == 2)b+= (a.Hour.ToString()+":"); else b+= ("0" + a.Hour.ToString()+":");
        if(a.Minute.ToString()->Length == 2)b+= (a.Minute.ToString()+":"); else b+= ("0" + a.Minute.ToString()+":");
        if(a.Second.ToString()->Length == 2)b+= (a.Second.ToString()+":"); else b+= ("0" + a.Second.ToString());
        return b;
    }
Да, отвратительный костыль. Если кто-то знает метод пооптимальней - жду уже почти месяц, пишите!

Как бы то ни было, благодаря этому убожеству, я могу взять так и написать:
C++
1
2
ShedulesAdapter->DeleteCommand->CommandText = "Delete * FROM Расписание WHERE Дата = #" + DateTimeToEatableForMSAccess(tmpDate) +"#";
ShedulesAdapter->DeleteCommand->ExecuteNonQuery();
И при выполнении моя программа ни на какой эксепшн своей киберпопой не сядет. ^_^
Стоит заметить, что дату в запросе надо оградить от злого внешнего мира решёточками.

Буду несказанно рад, если все эти мои потуги кому-то ещё помогут.
Ещё больше буду рад предоставлению более красивого метода подачи этого DateTime в SQL запрос к базе MSAccess.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2013, 15:11
Помогаю со студенческими работами здесь

Преобразование даты в SQL запросе
В БД есть две таблицы. В первой таблице поля &quot;дата&quot; (дд.мм.гггг) и &quot;время&quot; (мм:чч:сс) разделены, а во второй таблице &quot;дата и...

Проверка даты в запросе sql
Сначала спрошу если пользователь выполнил действие, и поставить setTimeout (5 минут) на выполнение ajax запроса к php скрипту и...

Формат даты в БД в запросе SQL
Добрый день! Я не имею опыта программирования и тем более не приходилось работать с БД. Поэтому всему учусь с нуля. В общем загружаю базу...

Ответы на 7 самых частых вопросов по Windows Forms, C++/CLI Edition - свой способ передачи данных между формами
Способ с использованием макросов. Средней сложности в реализации и понимании, не знаю, нарушает ли ООП, передача данных возможна в обе...

Хранение DateTime в базе данных
В таблице определен столбец типа DATETIME, через DataRow я успешно получаю, устанавливаю его значения. Теперь задача состоит в том, чтобы...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru