Форум: "Базы";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];
ВнизТип float в InterBase. Найти похожие ветки
← →
onix (2002-03-18 08:25) [0]Здравствуйте.
Раскажите пожалуйста о поведении поля с типом float. Забиваю к примеру число 120,55, в БД вижу 120,549998782569. Достаю значение и получаю 120,5 ?
← →
Alexandr (2002-03-18 09:03) [1]1) Поведение аналогично single в Delphi Отсюда и точность соответствующая. Хочешь точнее, используй double precision
2) Что значит "достаю значение и получаю"?
← →
onix (2002-03-18 09:13) [2]>Alexandr ©
2) Что значит "достаю значение и получаю"?
В БД лежит наименование продукта и его цена, хочу загрузить все это хозяйство в TreeView в виде "продукт (цена)". Записывал то цену в виде 120,55 а получил "продукт (120,5)".
И еще одна проблема возникла. Есть процедура на сервере, которая добавляет записи в табл. Так вот превый проход процедуры проходит, а на втором вылетает ошибка "XSQLDA index out of range". В чем причина?
← →
Alexandr (2002-03-18 09:23) [3]это ты при выводе где-то округляешь/формитируешь неправильно ( с одним знаком после запятой, хотя хочешь 2 знака). И Interbase здесь нипричем.
← →
onix (2002-03-18 09:38) [4]>Alexandr ©
> это ты при выводе где-то округляешь/формитируешь неправильно ( > с одним знаком после запятой, хотя хочешь 2 знака). И Interbase > здесь нипричем.
Точно. Нашел где не так.
Есть мысли по поводу ошибки "XSQLDA index out of range" ?
← →
sanbah (2002-03-18 09:40) [5]Зайди на сайс ib.demo.ru там очень хорошо описаны проблеммы округления и их решения.
← →
Alexandr (2002-03-18 09:43) [6]странная ошибка. Пока мыслей нет.
Приведи текст процедуры, чего делаешь и пр. Мож чего и прояснится...
← →
onix (2002-03-18 09:54) [7]procedure TFMain.SB_InsProductClick(Sender: TObject);
begin
with DM.SPTemp do begin
Active := false;
StoredProcName := "InsProduct";
Params.CreateParam(ftInteger,"Parent", ptInput).AsInteger := TView(TV_DirProduct.Selected.Data).ID;
Params.CreateParam(ftString,"Head", ptInput).AsString := NameProduct.Text;
Params.CreateParam(ftFloat,"PraceIn", ptInput).AsFloat := PraceIn.Value;
Params.CreateParam(ftFloat,"PraceOut", ptInput).AsFloat := PraceOut.Value;
ExecProc;
end;
end;
А это сама процедурка
CREATE PROCEDURE INSPRODUCT (
PARENT INTEGER,
HEAD VARCHAR(150),
PRACEIN FLOAT,
PRACEOUT FLOAT
) AS
BEGIN
insert into PRODUCT
values (GEN_ID(PRODUCT,1), :PARENT, :HEAD, :PRACEIN, :PRACEOUT);
END
← →
Alexandr (2002-03-18 10:00) [8]1) Что значит "первый проход процедуры" и "второй"... а "третий" что?
2) Что там насчет транзакций?
3) Приведи описание таблицы PRODUCT со всеми индексами, триггерами и пр.
4) Компоненты какие? IBX?
← →
Alexandr (2002-03-18 10:08) [9]попробуй prepare прописать перед вызовом или перед созданием параметров.
А еще лучше не использовать TIBStoredProc, а использовать TIBQUERY
в котором написать execute procedure insproduct...
А вообще, глючная эта IBX, лучше уж FIBPlus
← →
onix (2002-03-18 10:12) [10]1)Ввод первого, второго и т.д. значений. Т.е. при первом нажатии на кнопку все проходит, а вот дальше Error.
2)IB_Trans.Active := true;
IB_Trans.Commit;
3)CREATE TABLE PRODUCT (
ID INTEGER,
PARENT INTEGER,
HEADER CHAR(150),
PRACEIN NUMERIC(15, 2),
PRACEOUT NUMERIC(15, 2)
) И это все.
4) Компоненты IBX.
← →
Alexandr (2002-03-18 10:18) [11]а индесов что, нету?
про транзакции ненятно. Когда начинается, когда заканчивается.
И все-таки дело в prepare параметров процедуры. Где-то IBX тут не понимает, т.е. как-бы ожидает одни параметры, а ей передают другие, и кирдык.
1) Попробуй через TIBQuery, а еще при этом не с параметрами, а с напрямую формируемым запросом. Вообщем, экпериментируй.
2) Попробуй через IBConsole, IBExpert или что там тебе ближе, эту процедуру запустить- убедишься что дело не в Interbase , а в твоей проге
← →
tiger_ (2002-03-18 10:19) [12]Проблема скорее с CreateParam, т.к. при первом проходе параметры еще не созданы и соответственно все проходит на Ok. При втором проходе имя сохр. процедуры не меняется, соответственно и список параметров не меняется, а вы пытаесь их опять создать.
← →
Alexandr (2002-03-18 10:22) [13]угу. Вот в этом скорее всего все тело.
Если уж ты запрос формируешь в программе, а не визуально, то и компонент не используй, а создавай объект прямо в программе, а после запуска уничтожай его нафиг.
← →
onix (2002-03-18 10:26) [14]Большое спасибо всем ответившим.
Проблема действитено была указанная tiger_. Прописал Params.Clear; и все заработало.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c