![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при работе с ADODataSet Access тип DEC [D7, XP]
palva © (2009-10-08 12:32:00)Натолкнулся и не могу продвинуться. Пока заменил командой INSERT. Но хочу разобраться.
Пустая база данных создана в Access 2003, MDAC 2.8 Windows-XP ставить не хочет, говорит, что все уже имеется. Провайдер Microsoft.Jet.OLEDB.4.0
Таблица создана так:
procedure TForm1.BtnCreateClick(Sender: TObject);
begin
ADOCommand1.CommandText := 'CREATE TABLE Test(id COUNTER, str VARCHAR(10), dc DEC(4,1))';
ADOCommand1.Execute;
end;
Ошибка при работе возникает здесь:
procedure TForm1.Button1Click(Sender: TObject);
var
bcd1: TBcd;
begin
ADODataSet1.CommandText := 'SELECT id, str, dc FROM Test';
ADODataSet1.Open;
ADODataSet1.Append;
ADODataSet1.Fields[1].Value := 'Paloma';
// Следующий способ присваивания
// работает непосредственно через ADO VBScript
ADODataSet1.Fields[2].Value := '345,6';
// но в данном случае вызывает ошибку при вызове Post
// Даже так попробовал
//bcd1.Precision := 4;
//bcd1.SignSpecialPlaces := 4;
//bcd1.Fraction[0] := $34;
//bcd1.Fraction[1] := $56;
//ADODataSet1.Fields[2].AsBCD := bcd1;
ADODataSet1.Post;
// В этом месте "Несоответствие типов данных в выражении условия отбора."
end;
Если поле DEC не заполнять, то запись успешно добавляется.
palva (2009-10-08 13:45:00) [1]clickmaker © (08.10.09 13:18) [6]
Спасибо. Поковыряюсь. Если лень и занятость не пересилят любопытство.
> ADODataSet1.Fields[2].FieldType
Такого свойства у меня нет. Но если посмотреть через чистый ADO свойство Type, то возвращает 131, что соответствует NUMERIC/DECIMAL
Плохиш (2009-10-08 13:26:00) [2]Чему равно
> ADODataSet1.Fields[2].FieldType
?
clickmaker (2009-10-08 13:18:00) [3]> Надо что-то подключить?
use debug dcu в настройках компилера
palva (2009-10-08 13:17:00) [4]
> если в vcl, тогда при отладке внутри vcl можно увидеть,
> на какой строке валится
У меня отладчик в VCL не заходит. Надо что-то подключить?
clickmaker (2009-10-08 13:05:00) [5]> Может быть в VCL какая-то недоработка, касающаяся этого
> типа?
если в vcl, тогда при отладке внутри vcl можно увидеть, на какой строке валится
palva (2009-10-08 13:00:00) [6]Может быть я ошибаюсь, но у Access 2000 тип DEC/NUMERIC отсутствовал
Сейчас вижу, что этот тип поддерживается и через чистый ADO нормально обновляется.
Может быть в VCL какая-то недоработка, касающаяся этого типа?
palva (2009-10-08 12:55:00) [7]
> а если банальный double?
Это я пробовал.
ADODataSet1.Fields[2].Value := '3';
ADODataSet1.Fields[2].Value := 345.6;
ADODataSet1.Fields[2].AsFloat := 345.6;
ADODataSet1.Fields[2].AsInteger := 345;
ADODataSet1.Fields[2].AsCurrency := 345;
Ошибка та же
clickmaker (2009-10-08 12:40:00) [8]а если банальный double?