Форум: "Начинающим";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
ВнизОшибка при работе с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c