Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильное соединение с БД Interbase? [D5, IB5.x]


Страницы:   1 2 3

supersan ©   (2003-04-09 08:37:00) 

Господа, здравствуйте! Может, кто подскажет правильное соединение с БД Interbase? Я обычно делаю так (через стандартные компоненты): TIBDatabase(с БД), TIBTransaction(с TIBDatabase, хотя зачем это, не знаю :-)), TIBTable(с TIBDatabase, выбирая конкретную табличку, добавляю все поля через Add All Fields), TDataSourse(с TIBTable), далее TDBGridи т.д. В результате приходится еще добавлять TIBQuery, где ручками пишу все SQL (на Insert, Update, Delete). Остальные компоненты на закладке Interbase не использую. Нет ли более правильного соединения, где бы не пришлось бы писать все ручками, а использовать стандартные средства для модификации таблицы, предоставляемые TDBGrid и TDBNavigator? Спасибо за внимание, заранее благодарен. Если подскажете, где порядок соединения можно найти в Сети, то тоже нормально. Поля в таблицах разных типов, графику не использую.


supersan   (2003-04-10 15:49:00) [1]


> AlexSerp © (10.04.03 14:56)
> Заходите еще!

Зайдем обязательно. Видите, даже ник зарегистрировал :-)

> Johnmen © (10.04.03 14:59)
> Ну слава Аллаху ! Закончилось on-line обучение азам. :)
> Хотя странно, почему автор так упорно не желает читать документацию...Поскольку
> приведенный кусок supersan © (10.04.03 14:45) явно отдает
> непониманием...

Дак ведь сюда и приходят, чтоб чему-нибудь научиться, чего сами не знают, или не так?
Про документацию я выяснял, получил ответ

> Johnmen © (09.04.03 17:54)
> Читать, вникать и т.д. ibx.hlp или fibplushelp.hlp

Ну нет у меня на компе перечисленных файлов :-(, так и не понял, почему...
Еще раз спасибо, что помогли, если что, обращайтесь ;-)


Johnmen   (2003-04-10 14:59:00) [2]

Ну слава Аллаху ! Закончилось on-line обучение азам. :)
Хотя странно, почему автор так упорно не желает читать документацию...Поскольку приведенный кусок supersan © (10.04.03 14:45) явно отдает непониманием...


AlexSerp   (2003-04-10 14:56:00) [3]

Заходите еще!
Приятно, когда находится выход. ;-)


supersan   (2003-04-10 14:53:00) [4]


> Соловьев © (10.04.03 14:49)
> TIBDataset.InsertSQL:="INSERT INTO SPMONEY (MONEY) VALUES
> (cast(:MONEY) as float)

Так он ругается на Cast
ГОСПОДА, СПАСИБО!!! ПОМОГЛО DOUBLE PRECISION ПОЛЕ. ЗАПОЛНЯЕТ БЕЗ ПРОБЛЕМ, И С ТОЧКОЙ И БЕЗ ОНОЙ!!! И ДАЖЕ С ИСПОЛЬЗОВАНИЕМ TIBTable. СПАСИБО ВСЕМ, КТО ПРИНЯЛ УЧАСТИЕ В ОБСУЖДЕНИИ!!!


Соловьев   (2003-04-10 14:49:00) [5]

TIBDataset.InsertSQL:="INSERT INTO SPMONEY (MONEY) VALUES (cast(:MONEY) as float)


supersan   (2003-04-10 14:46:00) [6]


> AlexSerp © (10.04.03 14:31)
> А точно нужно NUMERIC(9,2)?
> Может просто DOUBLE PRECISION испоьзовать?
> У меня с ним никогда проблем не возникало.

В смысле, поле с таким типом? Счас попробую


supersan   (2003-04-10 14:45:00) [7]


> Соловьев © (10.04.03 14:26)
> CAST(... as float) или (numeric(9,2))

Извините, не совсем понял. Куда такую конструкцию вставить? Нельзя ли чуть-чуть поподробнее? Если имелось в виду, что надо использовать TIBDataset.InsertSQL:="INSERT INTO SPMONEY (MONEY) VALUES (:MONEY)" и туда вставить CAST. Так не получается, при открытии IBDataset выдается ошибка
PS Описание таблицы следующее
CREATE DOMAIN T_DELETED AS
CHAR(1)
DEFAULT "0"
COLLATE PXW_CYRL;

CREATE DOMAIN T_ID AS
INTEGER
NOT NULL;

CREATE DOMAIN T_MONEY AS
NUMERIC(9,2)
NOT NULL;


CREATE GENERATOR GEN_SPDATE_ID;
SET GENERATOR GEN_SPDATE_ID TO 0;


CREATE TABLE SPMONEY (
ID T_ID NOT NULL,
MONEY T_MONEY,
DELETED T_DELETED COLLATE PXW_CYRL
);








AlexSerp   (2003-04-10 14:31:00) [8]

А точно нужно NUMERIC(9,2)?
Может просто DOUBLE PRECISION испоьзовать?
У меня с ним никогда проблем не возникало.


Соловьев   (2003-04-10 14:26:00) [9]

CAST(... as float) или (numeric(9,2))


supersan   (2003-04-10 14:11:00) [10]


> Соловьев © (10.04.03 13:55)
> может поробовать привести к формату дату? CAST(... as TimeStamp)

НА ДАТУ ОН КАК РАЗ НЕ РУГАЕТСЯ. Счас попробовал создать две таблички, одна - с DATE, другая - с NUMERIC. Первая заполняется без проблем, причем даже с TIBTable. Вторая и выдает энту самую пресловутую ошибку.


> AlexSerp © (10.04.03 13:45)
> Посмотри еще региональные настройки на десятичный разделитель
> и формат даты в системе

В том-то и дело, что я ввожу число БЕЗ десятичной точки (пока, но потом буду с ней)

Итак, дело в NUMERIC. Будут какие-нибудь соображения на этот счет?


Соловьев   (2003-04-10 13:55:00) [11]


> :
> INSERT INTO SPMINPENS (ID,MONEY,DATE_MP) VALUES (:ID,:MONEY,:DATE_MP)

может поробовать привести к формату дату? CAST(... as TimeStamp)


AlexSerp   (2003-04-10 13:45:00) [12]

Посмотри еще региональные настройки на десятичный разделитель и формат даты в системе.


supersan   (2003-04-10 13:21:00) [13]


> AlexSerp © (10.04.03 13:06)
> Выбрось из вставки ID

Ну сделал, попробовал - все равно фигня (извиняюсь), т.е. та же ошибка. Не в ID дело, как мне кажется, а в том, что, возможно, Interbase неправильно воспринимает заполнение поля типа DATE и/или NUMERIC. Может, с ними надо что-то сделать? Если да, то на что обратить внимание? Елки-палки, неужели только у меня такое дело встретилось? Если у кого получалось заполнение полей типа DATE и/или NUMERIC, опишите соединение компонентов, плиз, и их настройку, тоже плиз. Желательно, если будут только стандартные Дельфовские компоненты, можно из Rx Library. Если нужны какие еще, то подскажите, где взять ( для Delphi 5) и кряки к ним(плиз сто раз). А то, может, вышлите на supersanpovt@mail.ru? Ну господа, вторые сутки бьемся над энтим делом, нешто столь времени нужно на простое (по идее) дело? И большая просьба: может перед подачей совета прочитаете историю переговоров? Там уже много советовали...


AlexSerp   (2003-04-10 13:06:00) [14]

Выбрось из вставки ID.


supersan   (2003-04-10 12:23:00) [15]


> Соловьев © (10.04.03 11:38)
> Оттестируй свой запрос на изменение в IBConcol, там и найдешь
> свою ошибку.

Извините, не совсем понял, что имеется в виду. Если имеется в виду TDBGrid, то непонятно, как там тестировать. Если имеется в виду правильность составления SQL, то, повторяю, в WISQL подобный запрос проходит бех проблем
Пример. В WISQL запрос
insert into spminpens (MONEY, DATE_MP) values (100,"01.01.2001")
Результат:
select * from spminpens

ID MONEY DATE_MP DELETED
=========== =========== =========== =======

1 100.00 1-JAN-2001 0

В Delphi
IBDataset.InsertSQL:
INSERT INTO SPMINPENS (ID,MONEY,DATE_MP) VALUES (:ID,:MONEY,:DATE_MP)
В TGrid вывожу поля MONEY и DATE_MP, заполняю при добавлении значениями 100 и 01.01.2001 соответственно. Выдается ошибка.
Что не так делаю?


Соловьев   (2003-04-10 11:38:00) [16]

Оттестируй свой запрос на изменение в IBConcol, там и найдешь свою ошибку.


supersan   (2003-04-10 11:34:00) [17]


> Оно есть например в Object Inspector.

Ну нет его в Object Inspector. Есть что-то похожее, property AutoGenerateValue, его можно установить, в частности, в arAutoInc. Ну это шут с ним. Как насчет ошибки ( > supersan (10.04.03 11:17))?


Соловьев   (2003-04-10 11:26:00) [18]


> при <Ctrl>+<Space> его не показывает

при это много чего не показывает, например FieldByName? поэтому же не стоит судить что этого свойства нет. Оно есть например в Object Inspector.


supersan   (2003-04-10 11:22:00) [19]


> Соловьев © (10.04.03 11:06)
> property GeneratorField: TIBGeneratorField;

Это где ж такое свойство? В IBDataset нет, по крайней мере, при <Ctrl>+<Space> его не показывает. Да я нашел, что есть аналогичное (т.е. Required) св-во, его тоже в False - и все ОК. Так что с этим справился. Только остается ошибка (см. пред.)


supersan   (2003-04-10 11:17:00) [20]

Товарищи мои дорогие!
Пожалуйста, кто знает, что такое "Dynamic SQL Error SQL error code = -804 Incorect values within SQLDA structure", возникает при попытке добавления/изменение таблицы SPMINPENS (описание см. выше) > supersan (09.04.03 18:26), а, главное, как от него избавиться и заполнить-таки таблицу эту!!!
На www.ibase.ru я что-то такое не нашел...
PS Пытаюсь, переведя IBDataset в режим Insert, ввести следующие значения: в поля MONEY и DATE_MP соответственно 200 и 01.01.2001


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо