![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странное поведение поля в Access [D7, XP]
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;