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

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

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

Author24 — интернет-сервис помощи студентам
Пользователь выбирает месяц при помощи 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2013, 17:33
Ответы с готовыми решениями:

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

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

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

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

4
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24
02.05.2013, 17:40  [ТС] 2
Там в коде есть ещё СообщениевыйБокс - его использовал для проверки полученных переменных.
Можно его игнорировать.
-_-
Миниатюры
DateTime в SQL запросе к базе данных C++/CLI. Нужен способ сравнить даты  
0
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24
13.05.2013, 09:35  [ТС] 3
О, гуру Visual С++ и SQL, пусть давность заданности вопроса Вас не пугает
Очень хочу увидеть Ваш ответ
0
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24
28.05.2013, 22:23  [ТС] 4
ПОЧТИ дописал программу, обойдясь без датосодержащего вопроса к базе. И снова столкнулся с этой проблемой. Мне нужно удалить запись из базы данных. Для этого в 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
7 / 7 / 1
Регистрация: 15.11.2011
Сообщений: 24
29.05.2013, 15:11  [ТС] 5
Всем спасибо за внимание, решение найдено.
Как обычно, всё упиралось в правильный запрос к Гуглу:
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
29.05.2013, 15:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2013, 15:11
Помогаю со студенческими работами здесь

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

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

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

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

Соотношение сегодняшней Даты и записей даты в базе данных
Столкнулся с проблемой, делаю программу с WinForms, там DataGrid в гриде база, в базе есть столбцы...

Использование даты из MonthCalendar в SQL запросе
Доброго времени суток) Пытаюсь в базу засунуть дату (формат ячейки date) //DateTime date =...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru