Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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; и все заработало.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.023 c
1-22700           sammy                 2002-03-25 19:43  2002.04.08  
Установка Языка


3-22560           Юрий Жуков            2002-02-22 12:04  2002.04.08  
Delphi 6 Update 2 - Первые впечатления


1-22759           Толик                 2002-03-26 17:07  2002.04.08  
вызов функции-члена класса


4-22877           ctapik-net            2002-02-05 22:01  2002.04.08  
Интерфейс для работы с архивами


14-22822          Shirson               2002-02-27 14:11  2002.04.08  
DBE vs ADO