|
|
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
Всем привет!!! Есть база данных аксесовская, тама таблица, в ней поле типа DATETIME, вот мне очень интересно какой у него эквивалент в С++. Сейчас испоkьзую DATE_STRUCT, в принципе всё работает, но чувствую что как то странно всё... Понимаю, что объяснил хреново так что приведу кусок кода лучше... =))) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Объясните кто-нить как правильно работать с таким полем... А то я мучаюсь ппц сколько, всё равно осадок какойто... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 14:56:31 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
В 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2007, 18:59:24 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
Через какую библиотеку идет работа? ADO работает с тимпом Variant в С++ есть соответствующие классы обертки. -------------------------------------------- 5 строк кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2007, 19:12:03 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
Для MDB базы (Access) в SQL запросе дата формируется в формате: SELECT * FROM MyTable WHERE FIELD_DATE < #mm/dd/yyyy# то есть в символах # в американском стандарте. Но лучше испльзовать запрос с параметрами: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2007, 20:57:58 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
Я работаю напрямую с фцнкциями 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 или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2007, 14:44:07 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
авторкакая структура у типа TDateTime? Это просто переменная типа double или что? Это пременная типа double. Целая часть дни, дробная время, как в Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2007, 16:22:35 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
pszMyNick wrote: > Автор: "pszMyNick" > Я работаю напрямую с фцнкциями ODBC, в частности SQLBindParameter и _НЕ > пользуюсь_, никакими библиотеками, ну кроме сишных =) > Непонятно, чего хочется добиться? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2007, 18:57:17 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
teras pszMyNick wrote: > Автор: "pszMyNick" > Я работаю напрямую с фцнкциями ODBC, в частности SQLBindParameter и _НЕ > пользуюсь_, никакими библиотеками, ну кроме сишных =) > Непонятно, чего хочется добиться? Posted via ActualForum NNTP Server 1.4 Ну если глобально , то чищу mdb\'шник =))) А так, то выполняю Sql-запрос на удаление по дате, т.е. не старше, допустим, 10.10.2007 всё удаляется и чтобы запрос не зависил, от какоййто конкретной даты, а пользователь сам бы смог указывать её, исользую запрос с параметром: Код: plaintext а что бы привинтитть параметр к запросу использую функцию SQLBindParameter, отсюда вопрос: Если в базе поле по которому идёт отбор записей(дата создания документа) имеет тип datetime, то какой тип необходимо использовать в Функции SQLBindParameter в качестве четвёртого парметра (тип) и восьмого (собственно само значение) ??? В мсдн ничё про это нету... И исчо один вопросик, может кто знает: как организована дата в переменной типа double? про время очень подробно выше расписал Анатолий ( Киев ), за что ему огромное спасибо, но всё же больше интереснее как устроена целая часть тобишь дата... Я где то читал, уже не помню где, что в целой части хранится число суток прошедших с 30 декабря 1899 года (за точность дат не ручаюсь), так лиэто??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 12:34:58 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 16:55:26 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
У меня снова не подтверждённые данные =0))) Читал, что в ODBC 3.0 TImestamp не поддерживается как синоним DATE_TIME??? Приду домой отпишусь поподробней... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 17:57:40 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
pszMyNick wrote: > У меня снова не подтверждённые данные =0))) Читал, что в ODBC 3.0 > TImestamp не поддерживается как синоним DATE_TIME??? Приду домой > отпишусь поподробней... С чего бы они стали синонимами? Принципиально разные типы. Зато можно преобразовывать (time<->timestamp). В том числе и в ODBC 3.0 Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 19:04:00 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
Спасибо 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 11:31:00 |
|
||
|
SQL_DATETIME ~ ???
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 16:09:38 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34949867&tid=2027780]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 465ms |

| 0 / 0 |
