powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / SQL_DATETIME ~ ???
14 сообщений из 14, страница 1 из 1
SQL_DATETIME ~ ???
    #34932502
pszMyNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!!! Есть база данных аксесовская, тама таблица, в ней поле типа DATETIME, вот мне очень интересно какой у него эквивалент в С++. Сейчас испоkьзую DATE_STRUCT, в принципе всё работает, но чувствую что как то странно всё... Понимаю, что объяснил хреново так что приведу кусок кода лучше... =)))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DATE_STRUCT		date, sysdate;

...

temp = SQLBindParameter(hStmt,  1 , SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TYPE_DATE,
									 64 ,  0 , &date,	sizeof(date),  0 );
			if(!MySqlError(temp, hStmt))
			{
				temp = SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
				
			}
// и выполняется такой запрос потом
SQLCHAR		Query3[] = " DELETE FROM SystemEventsHistory WHERE\
						   (((SystemEventsHistory.TimeDate) <  ? ));";



Объясните кто-нить как правильно работать с таким полем... А то я мучаюсь ппц сколько, всё равно осадок какойто...
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34943144
В Access/VBA дата хранится в виде Double. Дробная часть - время.
В 24:00 целая часть увеличивается на 1, а дробная равна 0, и с каждой секундой наращивается на 1/(24*60*60) (примерно 0.000011574074074)

Составляющую времени возвращает функция TimeValue(), или Time(), если это текущее время.
d = TimeValue(Now)
?d
17:43:46

На самом деле, это дробная часть числа.
?CDbl(d)
0.738726851851852

Выделяем части.
?Int(d*24)
17
?Int((d*24 - Int(TimeValue(d)*24))*60)
43
?Int((d*24*60 - Int(d*24*60))*60)
46
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34943172
Skokov Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Через какую библиотеку идет работа?
ADO работает с тимпом Variant в С++ есть соответствующие классы обертки.

--------------------------------------------
5 строк кода
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34946327
AndrewP_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для MDB базы (Access) в SQL запросе дата формируется в формате:
SELECT * FROM MyTable WHERE FIELD_DATE < #mm/dd/yyyy#
то есть в символах # в американском стандарте.

Но лучше испльзовать запрос с параметрами:

Код: plaintext
1.
2.
3.
4.
ADODataSet->CommandText="SELECT * FROM MyTable WHERE FIELD_DATE < :FIELD_DATE";

TDateTime cDate=Now();
ADODataSet->Parameters->Items[ 0 ]->Value=cDate;
ADODataSet->Active=true;
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34946767
pszMyNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я работаю напрямую с фцнкциями ODBC, в частности SQLBindParameter и НЕ пользуюсь , никакими библиотеками, ну кроме сишных =)

Анатолий ( Киев )В Access/VBA дата хранится в виде Double. Дробная часть - время.
В 24:00 целая часть увеличивается на 1, а дробная равна 0, и с каждой секундой наращивается на 1/(24*60*60) (примерно 0.000011574074074)

Составляющую времени возвращает функция TimeValue(), или Time(), если это текущее время.
d = TimeValue(Now)
?d
17:43:46

На самом деле, это дробная часть числа.
?CDbl(d)
0.738726851851852

Выделяем части.
?Int(d*24)
17
?Int((d*24 - Int(TimeValue(d)*24))*60)
43
?Int((d*24*60 - Int(d*24*60))*60)
46
Мне на самом деле интереснее было бы узнать, как это реализовать в С++, там тоже Double??? И как реализована целая часть, если не трудно, был бы благодарен за хорошую ссылочку, тесно связанную с ODBC и непосредственно с *.mdb, а то в мсдн кот наплакал, хотя тож много интересного нашёл...

AndrewP_TDateTime cDate=Now();
какая структура у типа TDateTime? Это просто переменная типа double или что?
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34946847
AndrewP_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкакая структура у типа TDateTime? Это просто переменная типа double или что?
Это пременная типа double. Целая часть дни, дробная время, как в Delphi.
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34946961
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pszMyNick wrote:
> Автор: "pszMyNick"
> Я работаю напрямую с фцнкциями ODBC, в частности SQLBindParameter и _НЕ
> пользуюсь_, никакими библиотеками, ну кроме сишных =)
>

Непонятно, чего хочется добиться?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34948548
pszMyNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teras
pszMyNick wrote:
> Автор: "pszMyNick"
> Я работаю напрямую с фцнкциями ODBC, в частности SQLBindParameter и _НЕ
> пользуюсь_, никакими библиотеками, ну кроме сишных =)
>

Непонятно, чего хочется добиться?
Posted via ActualForum NNTP Server 1.4

Ну если глобально , то чищу mdb\'шник =))) А так, то выполняю Sql-запрос на удаление по дате, т.е. не старше, допустим, 10.10.2007 всё удаляется и чтобы запрос не зависил, от какоййто конкретной даты, а пользователь сам бы смог указывать её, исользую запрос с параметром:

Код: plaintext
SQLCHAR\t\tQuery3[] = " DELETE FROM SystemEventsHistory WHERE\\\n\t\t\t\t\t\t   (((SystemEventsHistory.TimeDate) <  ? ));";
,
а что бы привинтитть параметр к запросу использую функцию SQLBindParameter, отсюда вопрос: Если в базе поле по которому идёт отбор записей(дата создания документа) имеет тип datetime, то какой тип необходимо использовать в Функции SQLBindParameter в качестве четвёртого парметра (тип) и восьмого (собственно само значение) ??? В мсдн ничё про это нету... И исчо один вопросик, может кто знает: как организована дата в переменной типа double? про время очень подробно выше расписал Анатолий ( Киев ), за что ему огромное спасибо, но всё же больше интереснее как устроена целая часть тобишь дата... Я где то читал, уже не помню где, что в целой части хранится число суток прошедших с 30 декабря 1899 года (за точность дат не ручаюсь), так лиэто???
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34949581
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pszMyNick wrote:
> SQLBindParameter, отсюда вопрос: Если в базе поле по которому идёт отбор
> записей(дата создания документа) имеет тип datetime, то какой тип
> необходимо использовать в Функции SQLBindParameter в качестве четвёртого
> парметра (тип) и восьмого (собственно само значение) ??? В мсдн ничё про
> это нету...

Нет, потому, что ODBC не поддерживает DATETIME. В "ODBC Drivers:
Microsoft Access Data Types", написано, что DATETIME преобразуется в
SQL_TIMESTAMP. Преобразование SQL_C_TYPE_DATE в SQL_TYPE_TIMESTAMP,
вполне допустимо в ODBC, при этом время устанавливается в 00:00:00.0.
Если такое поведение устраивает - замечательно. Если хочется
дополнительной свободы (например, удаление не в 00:00:00, а до начала
смены в 07:22:15), то можно задействовать SQL_C_TYPE_TIMESTAMP.

> И исчо один вопросик, может кто знает: как организована
> _дата_ в переменной типа double?

В ODBC - никак. Дата или время не преобразуется в число в принципе.
Совместимые типы описаны в "Converting Data from SQL to C Data Types":
строки, бинарное представление, дата, время, timestamp. Все остальное -
на совести производителя драйвера, в том числе и представление даты или
времени в виде чисел. Можно предположить, что если Access позволяет
сделать такое преобразование, то и в ODBC будет тот-же результат. Но
какой - не знаю, не пользуюсь.

Возможно, как написано в документации на Access:

Dates are stored as part of a real number. Values to the left of the
decimal represent the date; values to the right of the decimal represent
the time. Negative numbers represent dates prior to December 30, 1899.

Представимый интервал дат: January 1, 100 – December 31, 9999.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34949867
pszMyNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня снова не подтверждённые данные =0))) Читал, что в ODBC 3.0 TImestamp не поддерживается как синоним DATE_TIME??? Приду домой отпишусь поподробней...
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34950068
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pszMyNick wrote:
> У меня снова не подтверждённые данные =0))) Читал, что в ODBC 3.0
> TImestamp не поддерживается как синоним DATE_TIME??? Приду домой
> отпишусь поподробней...

С чего бы они стали синонимами? Принципиально разные типы. Зато можно
преобразовывать (time<->timestamp). В том числе и в ODBC 3.0
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34951184
pszMyNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо teras, вроде во всём разобрался SQL_C_TYPE_TIMESTAMP действительно нормально отрабатывает с SQL_DATETIME? при использовании SQL_C_TYPE_DATE Всё тож работает, но возвращается SQL_SUCCESS_WITH_INFO и сообщение о том что дата была урезана. Если пытаться привинтить double к этому типу поля , то влезает ошибка, но если указать SQL_C_TYPE_TIMESTAMP, а под само значение передать адрес переменной double? то в неё нормально возвращается значение, правдо лень бло разбираться правильное оно или нет... =)))
Для тех кому интересно дата была #10/11/2007 14:00:00# а значение в double 1.9469629684723e-308
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34952557
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pszMyNick wrote:
> действительно нормально отрабатывает с SQL_DATETIME? при использовании
> SQL_C_TYPE_DATE Всё тож работает, но возвращается SQL_SUCCESS_WITH_INFO
> и сообщение о том что дата была урезана.
Так и должно быть.

> к этому типу поля , то влезает ошибка, но если указать
> SQL_C_TYPE_TIMESTAMP, а под само значение передать адрес переменной
> double? то в неё нормально возвращается значение, правдо лень бло
Не, так делать нельзя точно - здесь просто портится память. timestamp -
длиной 16 байт, а double - 8. 8 байт перепишутся.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL_DATETIME ~ ???
    #34952631
pszMyNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен намудрил, но чего то переклинило что длина 8 байт... Тада SQL_TYPE_DATE и double ,буит -8.9989069924440e+061 =)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / SQL_DATETIME ~ ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]