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

Вниз

Тип 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
4-22889
Turalyon
2002-02-07 10:54
2002.04.08
Путь к исполняемому файлу


1-22711
VJar
2002-03-26 20:13
2002.04.08
Свойства файла


7-22855
vlv
2002-01-14 15:00
2002.04.08
IDataObject


1-22716
~Alice~
2002-03-26 21:10
2002.04.08
RichEdit люди такой вопрос :


3-22607
xim
2002-03-17 15:47
2002.04.08
Помогите советом, сломалась таблица parodox.