Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странное поведение поля в Access [D7, XP]


Страницы:   1 2

DimonS ©   (2009-08-03 09:29:00) 

Ну может и не поля...
В общем, есть элементарный кусок кода:

ADOCommand1.CommandText:='update PathForms set TimeFact1=:TF1 where ...';
ADOCommand1.Parameters.ParamValues['TF1']:=TimeFact1;
ADOCommand1.Execute;


Переменная TimeFact1 объявлена как TDateTime, значение, например, 40025,875.
Поле в таблице имеет формат Дата/Время.

В общем, при выполнении кода в таблицу вставляется только значение даты, время отсеивается.
В чем может быть причина?
В режиме отладки при присвоении параметру значения переменной TimeFact1 переменная не округлена до целого числа, с временем.
Если поменять код на такой:
ADOCommand1.Parameters.ParamValues['TF1']:=Date+Time;
то записывается и дата и время в табличку, так что формат поля нормальный. Проблема именно при присвоении значения переменной.


DimonS   (2009-08-10 08:19:00) [1]


> sniknik ©   (07.08.09 15:50) [32]

Спасибо за направление поиска! Разобрался, все работает.


sniknik   (2009-08-07 15:50:00) [2]

> Вот неработающая строка подключения:
Password - это на юзера. естественно не работает, дальше можно не смотреть. погугли на эту тему.


DimonS   (2009-08-07 09:10:00) [3]


> sniknik ©   (07.08.09 08:01) [30]

Вот неработающая строка подключения:
Provider=Microsoft.Jet.OLEDB.4.0;Password=ldofmer9ERG40Gweg;Data Source='+Regini.ReadString(*,*,'')+';Persist Security Info=True

Создал точно так же через мастера.


sniknik   (2009-08-07 08:01:00) [4]

> Да вот не знаю, может она и ни причем
как это не причем? если без нее нормально с этим типом работает с ней глючит. кто тогда причем?

> Строка подключения:
и зачем строка к ODBC, если говорили про Jet? в ней же ошибка, а эта так понимаю рабочая.

> Пароль на базу или юзера? Хм, вопрос интересный.
PWD - на базу.

> может просто не захотели выдавать все тонкости.
это не их "тонкости", это общие знания по работе с access. или у них синдром партизана?


DimonS   (2009-08-07 05:19:00) [5]


> ни о чем не говорят слова в ошибке?

Понятно, что через MS Jet цепляется.


> а тот факт, что эта надстройка воспринимает(и исправляет)
> тип дататайм на тип дата, это нормально?

Да вот не знаю, может она и ни причем, где-то в системе ошибка вкралась, хотя и не исключаю.


> только то значение, что видимо на составлении чуть более
> сложной строки с паролем вы с разработчиками и "поломались",
>  

А это как понять? Пароль 17-значный, не я его придумывал. И по делу он там как козе припарка.

Строка подключения:
Provider=MSDASQL.1;Password=ldofmer9ERG40Gweg;Persist Security Info=True;Data Source=База данных MS Access;Mode=ReadWrite;Extended Properties="DSN=База данных MS Access;DBQ='+Regini.ReadString(*,*,'')+';DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;PWD=ldofmer9ERG40Gweg;";Initial Catalog='+Regini.ReadString(*,*,'')
Составлял обычным мастером в ConnectionString ADOConnection-а.

Пароль на базу или юзера? Хм, вопрос интересный. Не задавался им. На базу скорее всего, потому как запрашивается только пароль.

Ну а насчет разработчиков... Не ламеры, наверное, может просто не захотели выдавать все тонкости.

PS. Пароль в строке подключения.


sniknik   (2009-08-06 08:03:00) [6]

> Я так понял сделать запрос к базе, к которой Jet не подключается?
> Через ODBC:
> [Microsoft][Драйвер ODBC ... Ядро базы данных Microsoft Jetне может  ...
ни о чем не говорят слова в ошибке?

> Да и через ODBC работает-то нормально.
а тот факт, что эта надстройка воспринимает(и исправляет) тип дататайм на тип дата, это нормально?

> Да, если это имеет значение, база запоролена.
только то значение, что видимо на составлении чуть более сложной строки с паролем вы с разработчиками и "поломались", ведь сам jet то работает, ODBC его вызывает...

> Выслать, в  принципе, можно
строку подключения для начала приведи, и какой там пароль, на базу или на юзера? (ели на юзера то требуется еще файл system.mdw, вроде)
> Да чего уж говорить, если сами разработчики не смогли ответить :)
ламеры разрабатывали? или отвечал, как обычно студент, на полставки... берут таких в цто, сами ничего не знают.


DimonS   (2009-08-06 02:39:00) [7]


> sniknik ©   (05.08.09 21:37) [26]

ADOCommand1.CommandText:= 'select * from TestNone';

Я так понял сделать запрос к базе, к которой Jet не подключается?

Через ODBC:
Project '' raizet exception class EOleExpection with message '[Microsoft][Драйвер ODBC Microsoft Access]Ядро базы данных Microsoft Jet не может найти входную таблицу или запрос'TestNone'...

Если в ADOCommand1.ConnectionStringпрописать драйвер MS Jet, то при выполнении запроса (проверка подключения не происходит, ошибку я выше писал) другая ошибка:
Project '' raizet exception class EOleExpection with message 'Не удается запустить приложение. Системная база данных отсутствует или открыта с монопольным доступом другим пользователем'.

Естетсенно, с монопльным доступом она открыта быть не может, с ней одновременно работают несколько человек. Да и через ODBC работает-то нормально.
Да, если это имеет значение, база запоролена.

Выслать, в  принципе, можно, если почистить, так она довольно тяжелая. Самому интересен этот факт, но в инете шарился - не нашел ответа (правда, давно уже). Да чего уж говорить, если сами разработчики не смогли ответить :)


sniknik   (2009-08-05 21:37:00) [8]

неправильно ODBC тип дататайм интерпретирует...
похоже выход задавать тип флоат как в > DimonS   (05.08.09 01:28) [20]
или jet...
Не выполнена проверка подключения из-за ошибки инициализации поставщика. ..
вот этого не может быть, поставщик есть и он работает даже в случае твоего подключения к ODBC
вот попробуй в своем тесте выполни
ADOCommand1.CommandText:= 'select * from TestNone'; //знаю что такой таблицы нет
ADOCommand1.Execute;

и ВНИМАТЕЛЬНО прочитай ошибку.

т.е. с jet это твой "косяк", и разработчиков если они по той же причине используют ODBC.
хочешь выложи еще и базу. проверю. хотя лучше сначала попробуй сам.


DimonS   (2009-08-05 10:53:00) [9]

Если кто писать-спрашивать будет, то отвечу только завтра, ибо рабочий дэн закончился уже :)


DimonS   (2009-08-05 09:52:00) [10]

Все проясняется.
Если использовать провайдера Microsoft Jet, то конвертация и запись происходит нормально.
Но к той базе, что я пытаюсь изм енить через него подключиться не получается, вылазит ошибка:
Не выполнена проверка подключения из-за ошибки инициализации поставщика. ..
Почему так происходит - не знаю, программа сторонних разработчиков. Пришлось использовать ODBC Drivers.

PS. Разработчики сказали, что тоже через ODBC их программа с базой общается.


DimonS   (2009-08-05 09:44:00) [11]

Вот, выложил.
http://ifolder.ru/13406792

Проверил сейчас на другой машине - такое же поведение.
Возможно еще в строке подключения что-то напутал...


DimonS   (2009-08-05 09:12:00) [12]


> sniknik ©   (05.08.09 07:52) [21]

Куда кинуть? На мыло тебе устроит? А то на работе позаблокировали все...


sniknik   (2009-08-05 07:52:00) [13]

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


DimonS   (2009-08-05 01:28:00) [14]


> Anatoly Podgoretsky ©   (04.08.09 12:16) [19]

Ну немного разные часовые пояса у нас, потому и не сразу отвечаю :)

Как я понимаю, так правильно:
ADOCommand1.Parameters.ParamByName('TF1').DataType:=ftDateTime;
ADOCommand1.Parameters.ParamByName('TF1').Value := Now;
ADOCommand1.Execute;


Ну вот хоть тресни, но записывается только дата и все.
Однако же если присваивать Date+Тime, то записывается и дата  и время.

Вот еще что попробовал:
ADOCommand1.Parameters.ParamByName('TF1').DataType:= ftFloat;
ADOCommand1.Parameters.ParamByName('TF1').Value := Now;
ADOCommand1.Execute;

Теперь записывается и дата и время.
Похоже что-то с конвертацией все-таки связано...


Anatoly Podgoretsky   (2009-08-04 12:16:00) [15]

На полноту ответов особо расчитывать не приходится. Может мы никогда не узнаем всю правду.


sniknik   (2009-08-04 11:48:00) [16]

> Проверил. Только дата...
а меняется тип при присвоении значения только если он ftUnknown, если другой то идет попытка конвертации.

возможно у тебя тип этого параметра где то устанавливается, может в прежнем запросе до вноса этого есть такой же параметр.


Anatoly Podgoretsky   (2009-08-04 11:17:00) [17]

> DimonS  (04.08.2009 10:43:16)  [16]

Попробуй сменить. Во всяком случае причина в этом.


DimonS   (2009-08-04 10:43:00) [18]


> MonoLife ©   (04.08.09 10:38) [14]
> А может насильно присвоить тип параметра?
> ADOCommand1.Parameters.ParamByName('TF1').DataType:=ftDateTime;
>


Проверил. Только дата...


DimonS   (2009-08-04 10:40:00) [19]


> Anatoly Podgoretsky ©   (04.08.09 10:27) [13]
>
> > ADOCommand1.Parameters.ParamByName('TF1').Value
>
> И какое значение это имеет после присвоения?


Сразу не проверил. Конец дня...
Значение: '04.08.2009 16:39:08'


MonoLife   (2009-08-04 10:38:00) [20]

А может насильно присвоить тип параметра?
ADOCommand1.Parameters.ParamByName('TF1').DataType:=ftDateTime;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо