Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.22;
Скачать: CL | DM;

Вниз

Ошибка при работе с ADODataSet Access тип DEC   Найти похожие ветки 

 
palva ©   (2009-10-08 12:32) [0]

Натолкнулся и не могу продвинуться. Пока заменил командой 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 не заполнять, то запись успешно добавляется.


 
clickmaker ©   (2009-10-08 12:40) [1]

а если банальный double?


 
palva ©   (2009-10-08 12:55) [2]


> а если банальный 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;
Ошибка та же


 
palva ©   (2009-10-08 13:00) [3]

Может быть я ошибаюсь, но у Access 2000 тип DEC/NUMERIC отсутствовал
Сейчас вижу, что этот тип поддерживается и через чистый ADO нормально обновляется.
Может быть в VCL какая-то недоработка, касающаяся этого типа?


 
clickmaker ©   (2009-10-08 13:05) [4]

> Может быть в VCL какая-то недоработка, касающаяся этого
> типа?

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


 
palva ©   (2009-10-08 13:17) [5]


> если в vcl, тогда при отладке внутри vcl можно увидеть,
> на какой строке валится

У меня отладчик в VCL не заходит. Надо что-то подключить?


 
clickmaker ©   (2009-10-08 13:18) [6]

> Надо что-то подключить?

use debug dcu в настройках компилера


 
Плохиш ©   (2009-10-08 13:26) [7]

Чему равно

> ADODataSet1.Fields[2].FieldType

?


 
palva ©   (2009-10-08 13:45) [8]

clickmaker ©   (08.10.09 13:18) [6]
Спасибо. Поковыряюсь. Если лень и занятость не пересилят любопытство.

> ADODataSet1.Fields[2].FieldType

Такого свойства у меня нет. Но если посмотреть через чистый ADO свойство Type, то возвращает 131, что соответствует NUMERIC/DECIMAL



Страницы: 1 вся ветка

Текущий архив: 2009.11.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
2-1254843332
8shar
2009-10-06 19:35
2009.11.22
Проверка типа данных


15-1253561708
Anatoly Podgoretsky
2009-09-21 23:35
2009.11.22
Если у кого есть немного свободного времени


8-1200150296
antonn
2008-01-12 18:04
2009.11.22
Быстрое копирование битмапов


3-1229490448
Sirus
2008-12-17 08:07
2009.11.22
Рекурсивный внешний ключ на саму запись


2-1253626479
Fr
2009-09-22 17:34
2009.11.22
Перебор форм