Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
3 / 3 / 0
Регистрация: 02.02.2010
Сообщений: 29

Работа с датой

08.02.2010, 16:53. Показов 3580. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть dfb с полем "BIRTHDAY" я хочу выбрать людей из таблицы младше например конкретной даты:

делал так

C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ADODataSet1->Close();
ADODataSet1->CommandType = cmdText;
ADODataSet1->CommandText = "SELECT * from tt where BIRTHDAY < '01/01/1973'";
ADODataSet1->Open();
}
не работает пишет "Несоответствие типов данных в выражении условия отбора"
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2010, 16:53
Ответы с готовыми решениями:

Работа с датой
Доброго времени суток. Мне необходимо разработать запрос на показ товаров, дата возврата которых менше 3 дней от текущей даты. попробовал...

Работа с датой
Добрый вечер! Помогите решить мою проблему. Есть поле, которое содержит дату рождения, типа (10.05.1980). Как написать, чтобы он...

работа с датой
подскажите пожалуйста как правильно внести данные в поле с датой...работаю с интербейс и билдером

16
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 16:55
используй параметры, ибо чревато:

"Был я айтишником в одном турагентстве. Как-то, шерстя базу данных, я нашёл информацию о ценах в отелях на ближайшие три года. Спрашиваю у генерального директора, как это так: то ли у нас ясновидец в штате появился, то ли отели по три года не меняют цены в условиях инфляции? Босс ответил, что данные туда попали по ошибке, и их надо удалить.

Всего один короткий запрос. Всего две забытые кавычки:

delete from prices where price_date>unix_timestamp(2009-12-31)

Сервер радостно подсчитал: 2009 – 12 – 31 = 1968. Как и было заказано, база данных грохнула цены на все даты позже 1968 секунд от начала юникс-эпохи (то есть после 0 часов 32 минут 42 секунд 1 января 1970 года). На тот момент не существовало не только самой фирмы, но даже и самого гендиректора.

В итоге все отели лишились всех цен. Вытаскивать в авральном режиме из бэкапов несколько сотен тысяч строк вручную было ой как весело..." (c) by ITHappens
0
3 / 3 / 0
Регистрация: 02.02.2010
Сообщений: 29
08.02.2010, 17:25  [ТС]
методом научного тыка у мну получилось

#2000-01-01#

Добавлено через 20 минут
А вот теперь у мну проблемма:

Хочу получать дату из DateTimePicker

написал так:

C++
1
2
3
4
5
AnsiString D = StrToDate(DateTimePicker1->Date.DateString());
ADODataSet1->Close();
ADODataSet1->CommandType = cmdText;
ADODataSet1->CommandText = "SELECT * from tt where birthday < #" +D +"#";
ADODataSet1->Open();
Формат в DateTimePicker'е поставил: yyyy-MM-dd и в окошке выбора даты он мне её правильно пишет , но в переменную D выдаёт в формате dd.MM.yyyy , как быть?!?
1
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 17:29
Цитата Сообщение от Hellydeya Посмотреть сообщение
как быть?!?
нет бы прислушался...
Цитата Сообщение от oxotnik Посмотреть сообщение
используй параметры, ибо чревато:
мыши плакали, кололись, но продолжали жрать кактус.
0
3 / 3 / 0
Регистрация: 02.02.2010
Сообщений: 29
08.02.2010, 17:32  [ТС]
я не понимаю что значит используй параметры... напиши пожалуйста как
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 17:49
не скажу за всю Одессу (ADODataSet1), т.к. справки под рукой нет, а для TADOQuery делается примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
ADOQuery1->SQL->Text = "SELECT .... FROM Table WHERE Field1 < :Param1";
// двоеточие перед Param1 означает что это переменная-параметр
ADOQuery1->Parametrs->ParamByName("Param1")->Value = StrToDate("01.01.2100");
ADOQuery1->Active = True; // или ADOQuery1->Open();
 
// Для изменения записи:
ADOQuery1->SQL->Text = "UPDATE Table SET Field1 = :Param1 WHERE KeyField = :Param2";
// двоеточие перед Param1 означает что это переменная-параметр
ADOQuery1->Parametrs->ParamByName("Param1")->Value = StrToDate("01.01.2100");
ADOQuery1->Parametrs->ParamByName("Param2")->Value = 10; 
ADOQuery1->ExecSQL(); // ADOQuery1->Open(); тут не прокатит
0
 Аватар для NewZ
14 / 14 / 2
Регистрация: 01.09.2010
Сообщений: 287
12.08.2011, 21:34
Цитата Сообщение от oxotnik Посмотреть сообщение
нет бы прислушался...

мыши плакали, кололись, но продолжали жрать кактус.
А как использовать параметры, если у меня есть такой запрос:
SQL
1
SELECT * FROM MyTable;
А потом пользователю понадобилось отсортировать по дате:
SQL
1
SELECT * FROM MyTable WHERE MyDate = #2011-08-22#
Те. в первом случае нет WHERE, а во втором уже есть ?????
Получается без изменения SQL запроса не обойтись ???? или можно как-то ????
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.08.2011, 23:10
Цитата Сообщение от NewZ Посмотреть сообщение
А как использовать параметры, если у меня есть такой запрос:
SQL
1
SELECT * FROM MyTable;
А потом пользователю понадобилось отсортировать по дате:
SQL
1
SELECT * FROM MyTable WHERE MyDate = #2011-08-22#
Те. в первом случае нет WHERE, а во втором уже есть ?????
Получается без изменения SQL запроса не обойтись ???? или можно как-то ????
Так, а ты занеси текст запроса в переменную, а потом возвратись к ней
1
 Аватар для NewZ
14 / 14 / 2
Регистрация: 01.09.2010
Сообщений: 287
12.08.2011, 23:13
Цитата Сообщение от Sasha Посмотреть сообщение
Так, а ты занеси текст запроса в переменную, а потом возвратись к ней
Не понял ???? В какую переменную и зачем мне к ней возвратиться ????
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.08.2011, 23:16
После обновления строки тебе необходимо будет опять открыть список так вот перед обновлением строки тебе вот эту строку
C++
1
SELECT * FROM MyTable;
надо запомнить.
А потом когда обновишь вернёшься к этому запросу (т.е к этой строке)
1
 Аватар для NewZ
14 / 14 / 2
Регистрация: 01.09.2010
Сообщений: 287
12.08.2011, 23:23
Цитата Сообщение от Sasha Посмотреть сообщение
После обновления строки тебе необходимо будет опять открыть список так вот перед обновлением строки тебе вот эту строку
C++
1
SELECT * FROM MyTable;
надо запомнить.
А потом когда обновишь вернёшься к этому запросу (т.е к этой строке)
Да нет. Вы не поняли. Я совсем не это имел ввиду.
Если я буду делать так:

SQL
1
SELECT * FROM MyTable WHERE MyDate = :Param_1
то что будет в случае когда фильтрация не нужна ????
Я в программе просто не присваиваю значение Param_1 и запрос выглядит так:

SQL
1
SELECT * FROM MyTable WHERE MyDate = '';
Стремно получаетсЯ однако !!!
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.08.2011, 23:28
Делай 2 разных события одно просто открывает таблицу. Другое сортирует его. иначе я не вижу отсюда выхода

Добавлено через 45 секунд
Кстати, а как ты узнаешь что сортировка не нужна
1
 Аватар для NewZ
14 / 14 / 2
Регистрация: 01.09.2010
Сообщений: 287
12.08.2011, 23:49
Цитата Сообщение от Sasha Посмотреть сообщение
Делай 2 разных события одно просто открывает таблицу. Другое сортирует его. иначе я не вижу отсюда выхода

Добавлено через 45 секунд
Кстати, а как ты узнаешь что сортировка не нужна
Причем здесь события ???? Мы говорим о разных вещах.

Я узнаю, что сортировка нужна, если пользователь щелкнул мышкой по TCheckBox "Сортировать",
а если снял кыржик - сортировка не нужна.
Соотв. 2 разных SQL запроса: один

SQL
1
SELECT * FROM MyTable WHERE MyDate = :Param_1
и в коде я пишу:
Delphi
1
MyTable.Parameters.ParamByName('Param_1').AsDate := Date()
и запрос будет выглядеть так:
SQL
1
SELECT * FROM MyTable WHERE MyDate = '13-08-2011'
а во втором случае я ничего не присваиваю параметру и тогда запрос будет выглядеть так:
SQL
1
SELECT * FROM MyTable WHERE MyDate = ''
И вместо отмены сортировки я получу что ? правильно - пустой DataSet.
Стемно получается с параметрами !!!
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.08.2011, 23:54
Цитата Сообщение от NewZ Посмотреть сообщение
а во втором случае я ничего не присваиваю параметру и тогда запрос будет выглядеть так:
Код SQL1 SELECT * FROM MyTable WHERE MyDate = ''
А во втором слоучае можно сделать так
C++
1
SELECT * FROM MyTable
И не надо присваивать пустой параметр

Добавлено через 1 минуту
Цитата Сообщение от NewZ Посмотреть сообщение
MyTable.Parameters.ParamByName('Param_1' ).AsDate := Date()
Кстати это Delphi, а ты находишься в разделе C++Builder. Так что тебе не сюда, а вот сюда https://www.cyberforum.ru/delphi-database/
0
 Аватар для NewZ
14 / 14 / 2
Регистрация: 01.09.2010
Сообщений: 287
13.08.2011, 00:07
Цитата Сообщение от Sasha Посмотреть сообщение
А во втором слоучае можно сделать так
C++
1
SELECT * FROM MyTable
И не надо присваивать пустой параметр

Добавлено через 1 минуту

Кстати это Delphi, а ты находишься в разделе C++Builder. Так что тебе не сюда, а вот сюда https://www.cyberforum.ru/delphi-database/
А во втором случае, да и в первом прийдется предзагружать SQL запрос.
Те. 2 запроса: один с параметрами, другой без. Так получается ??? Не удобно как-то.

А насчет Дельфи или Билдера - без разницы, пишу на обоих.
Пример привел на Дельфи просто, вот и все.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
13.08.2011, 13:01
Цитата Сообщение от NewZ Посмотреть сообщение
Те. 2 запроса: один с параметрами, другой без. Так получается ??? Не удобно как-то.
Не обязательно правильный ответ является удобным
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
13.08.2011, 16:57
Сделать идин универсальный запрос, работающий с where (причем условий в общем случае может быть несколько) или без него, не удастся. Запрос придется МОДИФИЦИРОВАТЬ кодом, т.е. собирать его из двух частей: селекта и where (вообще-то есть и еще и третья часть - order by).
Вы правы, это достаточно морочливо, тем более что по-хорошему последние условия выборки (+ порядок сортировки), заданные пользователем, хорошо бы сохранять в пользовательских настройках и при повторном запуске "поднимать". Но можно сделать универсальный код и применять его затем в проектах.

Да и вообще.. хороший, удобный пользовательский интерфейс, сделанный с "душой", достаточно "морочливый" с т.зр. программинга. Это только в книжках некоторых злых авторов врут, что писать "базовые" программы - раз плюнуть. Не верье - это пишут люди либо жадные и злые, либо элементарно не знающие предмета.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.08.2011, 16:57
Помогаю со студенческими работами здесь

работа с датой в C++ Bulder
Всем доброго времени суток. У меня вот какой вопрос. Дана база данный из двух таблиц Путевой_лист, Водители В таблице Водители сталбцы...

Работа с датой, хранящейся в БД
Ситуация такова: есть БД Ассess. В этой БД есть таблица, в которой есть (упрощённо) столбец с фамилией и столбец с датой (дата приёма на...

Работа с датой в запросе sql
Вот такой запрос: Form1-&gt;ADOQuery1-&gt;SQL-&gt;Text=&quot;INSERT INTO Table1(Код, ) VALUES (&quot;+ QuotedStr(Edit10-&gt;Text) +&quot;,&quot;+...

Работа с датой
Прошу помощи замучался уже изначально входные данные: 1 Дата рождения к примеру 01.01.1990 2 Возраст 20 лет Нужно узнать какая дата...

Работа с датой
Ув.программисты подскажите пожалуйста как получить сегодняшнюю дату в формате «09» октября 2007 г не расписываеш функцию через switch если...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru