Страница 1 из 1

Подскажите: что лучще?

Добавлено: 06 дек 2005, 18:49
KG
Нужно сделать небольшую клиент-серверную БД. Решил связаться с FireBird. Клиентские проги пишутся на C++ Builder. Вроде бы всё понятно и легко. Что, однако, вызывает подозрение. :)
Так вот хотелось бы узнать какие подводные камни могут меня ожидать? Я имею ввиду фирменные глюки и узкие места. Что лучще всё таки использовать: InterBase или FireBird? И каких версий?
И ещё такой вопрос: где бы по-подробнее почитать про компоненты для работы с IB? Ато сколько по инету не шарился, что-то ничего толкового не нашёл. :(

Добавлено: 06 дек 2005, 18:55
kdv
www.ibase.ru/devinfo/ibx.htm

и далее по стайту. сайт это и есть ответ на все твои вопросы.

Добавлено: 07 дек 2005, 14:51
KG
Спасибо. Всё более-менее понятно. Только вот с компонентом IBSQL не всё ясно. Примеры его использования где-нить можно найти?
И ещё такой вопрос. Прочитав статью "Этот загадочный TIBStoredProc" и узнав о глюках данного компонента, сильно перепугался и убрал все IBStoredProc. :) Я прав в своих страхах? Теперь пытаюсь использовать хранимые процедуры через другие компоненты, но ничего не получается. Не расскажите как их заюзать, например, через IBQuery?

Добавлено: 07 дек 2005, 15:54
kdv
Только вот с компонентом IBSQL не всё ясно. Примеры его использования где-нить можно найти?
www.ibase.ru/devinfo/ibx.htm
собственно, какие там примеры? берешь и используешь.
Я прав в своих страхах?
в отношении ibx - да.
Теперь пытаюсь использовать хранимые процедуры через другие компоненты, но ничего не получается. Не расскажите как их заюзать, например, через IBQuery?
??? мсье не в курсе execute procedure или select * from proc? Что значит "не получается"?

Добавлено: 07 дек 2005, 16:17
KG
собственно, какие там примеры? берешь и используешь.

Значит щас глупость спрошу: откуда вычитанные данные брать? Т.е., например, в IBStoredProc входные/выходные данные сидят в параметрах. А тут-то как/что? Не понимаю основ... :(
в отношении ibx - да.
Спрошу глупость №2: чем ещё кроме IBX хорошо пользоваться?
??? мсье не в курсе execute procedure или select * from proc? Что значит "не получается"?
В курсе. Так и делаю. Однако выдаётся сообщение: "XSQLDA index out of range". Видимо где-то что-то не то выставляю... :-/ Нельзя ли разжевать для меня тупоголового?

Извиняюсь за мою тупизну и темноту. Надеюсь на Вашу помощь. :)

Добавлено: 07 дек 2005, 16:27
kdv
ты пример кода приведи, чего делаешь. А то это сообщение об ошибке слишком универсальное.
Если у тебя процедура возвращает параметры, и ты ее выполняешь по execute procedure, то надо добавлять returning_values (см. синтаксис exec ute procedure). Возвращаемые данные - в Current. И т.п.

Вместо IBX можно пользоваться FIBPlus. в той статье он упоминается. Он платный, более качественный и функциональный, но, собственно, не стоит думать, что перескочив на него тебе сразу будет полное "щастье".

Добавлено: 08 дек 2005, 10:50
KG
ты пример кода приведи, чего делаешь
Рассказываю с самого начала:
В IBExpert создал БД с такой таблицей:

Код: Выделить всё

NUMBER	FAMILY	NAME	DOLZHNOST
1234	Чуйко	Николай	Начальник бюро
3421	Болдин	Геннадий	инженер-программист	
3486	Андреева 	Надежда 	инженер
Слепил хранимую процедуру:

Код: Выделить всё

CREATE PROCEDURE VIEW_DOLZHN (
    PFAM CHAR(20))
RETURNS (
    PDOLZHN CHAR(50))
AS
begin
    select dolzhnost from new_table
    where family=:pfam
    into pdolzhn;
end
Разместил на форме компонент IBQuery. В его SQL-редакторе пишу:
EXECUTE PROCEDURE view_dolzhn(:pfam) returning_values :pdolzhn
В свойстве Params указываю для pfam и pdolzhn тип String и входное/выходное соостветственно.
При попытке сделать Execute SQL пишется:
Dinamic SQL error
SQL error code = -104
Token unknown - line 1, char 34
returning_value.
Т.е. не опознаётся returning_value... :( Странно... Что бы это значило?
Возвращаемые данные - в Current.
Нельзя ли показать всю цепочку доставания данных из IBSQL?

Добавлено: 08 дек 2005, 12:56
Ivan_Pisarevsky
быстро дочитать доку до слова "suspend", пока KDV топик совсем не грохнул :)

потом

select * from VIEW_DOLZHN ('Чуйко')

Читаем доку только тогда, когда совсем ничего не получается :lol:

Добавлено: 08 дек 2005, 13:21
kdv
полная фигня.
во-первых, твоя процедура НЕ РАБОТАЕТ, и вообще смысл запроса внутри нее неясен.
Ты ее хоть запускать пробовал, из ibexpert например?

Дальше. С IBSQL и IBQuery все проще простого. Допустим, IBSQL (Q)

Код: Выделить всё

  Q.SQL.Add('execute procedure get_emp_proj (:a)');
  Q.ParamByName('a').AsInteger:=8;
  Q.ExecQuery;
  b:=Q.Current[0].AsString;
// или Q.Current.ByName('PROJ_ID').asString;
  Q.Close;
или, если процедура может возвращать много записей (селективная процедура, то все обычным способом, как с запросом:

Код: Выделить всё

  Q.SQL.Add('select * from get_emp_proj (:a)');
  Q.ParamByName('a').AsInteger:=8;
  Q.ExecQuery;
  while not Q.Eof do
    begin
      b:=Q.Current.ByName('proj_id').AsString;
      Q.Next;
    end;
  Q.Close;
и где тут что непонятно?
Ты в каких дельфях работаешь? После имени объекта жмешь точку, и смотришь список его свойств и методов. Или жмешь на компоненте F1, и смотришь справку по нему.

Добавлено: 08 дек 2005, 13:23
kdv
да, кроме того. Если указанная таблица пример - то сойдет. А вот если ты так собираешься разрабатывать БД, то тебе срочно надо почитать что-нибудь по проектированию БД.

Добавлено: 08 дек 2005, 16:06
KG
Я уже осознал, что эта процедура написана не правильно. Однако она работает через IBStoredProc. Почему-то. :)
Работаю я не в Дельфях, а в 5-м Билдере. Там получилось несколько по-другому. Ну да не суть важно. Вроде разобрался. Спасибо за помощь. :)
Это конечно же пример БД, который я набрал от балды. Сейчас изучаю Грубера(Грабера). Стоит ли закупать книжку Х. Борри по FireBird?

Добавлено: 08 дек 2005, 16:15
kdv
стоит. Грабер это sql вообще, а книжка Хелен - практически полная документация по конкретному серверу (FB 1.5).

Добавлено: 09 дек 2005, 08:18
Ivan_Pisarevsky
Дмитрий, а на какой контингент эта свежая книжка расчитана? Будет что интересного почитать, если, скажем, я с иб/фб с 98 года работаю...

Добавлено: 09 дек 2005, 09:07
kdv
"работаю с IB с 1998 года" может означать как все так и ничего. Если ты прикладник, то у вас с этим обычно бывает так, что чуть прыгни в сторону, и по знаниям полный провал. Я не имею в виду никого персонально, но насмотрелся всякого.
Эта книга - фактически та самая "отсутствующая документация" по Firebird. Мне она досталась от издателя, потом, я ее редактил, так что мое мнение по поводу покупки экземпляра весьма субъективно :-)

Добавлено: 09 дек 2005, 10:08
Ivan_Pisarevsky
Ну не то чтоб совсем полный провал со знаниями... :oops:
Вобчем уговорил, после нового года прикуплю, почитаю. :)

Добавлено: 09 дек 2005, 11:10
KG
Уважаемые! А вот есть ли какие-нить форумы где можно было бы посоветоваться насчёт проектирования баз данных?

Добавлено: 09 дек 2005, 12:38
Ivan_Pisarevsky
сходи на www.sql.ru например

Добавлено: 09 дек 2005, 13:49
kdv
по поводу проектирования лучше купить умную книжку, и прочитать ее 2-3 раза.