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

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
KG
Сообщения: 6
Зарегистрирован: 06 дек 2005, 18:32

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

Сообщение KG » 06 дек 2005, 18:49

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 дек 2005, 18:55

www.ibase.ru/devinfo/ibx.htm

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

KG
Сообщения: 6
Зарегистрирован: 06 дек 2005, 18:32

Сообщение KG » 07 дек 2005, 14:51

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 07 дек 2005, 15:54

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

KG
Сообщения: 6
Зарегистрирован: 06 дек 2005, 18:32

Сообщение KG » 07 дек 2005, 16:17

собственно, какие там примеры? берешь и используешь.

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 07 дек 2005, 16:27

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

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

KG
Сообщения: 6
Зарегистрирован: 06 дек 2005, 18:32

Сообщение KG » 08 дек 2005, 10:50

ты пример кода приведи, чего делаешь
Рассказываю с самого начала:
В 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?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 08 дек 2005, 12:56

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

потом

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 08 дек 2005, 13:21

полная фигня.
во-первых, твоя процедура НЕ РАБОТАЕТ, и вообще смысл запроса внутри нее неясен.
Ты ее хоть запускать пробовал, из 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, и смотришь справку по нему.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 08 дек 2005, 13:23

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

KG
Сообщения: 6
Зарегистрирован: 06 дек 2005, 18:32

Сообщение KG » 08 дек 2005, 16:06

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 08 дек 2005, 16:15

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

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 09 дек 2005, 08:18

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 09 дек 2005, 09:07

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

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 09 дек 2005, 10:08

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

KG
Сообщения: 6
Зарегистрирован: 06 дек 2005, 18:32

Сообщение KG » 09 дек 2005, 11:10

Уважаемые! А вот есть ли какие-нить форумы где можно было бы посоветоваться насчёт проектирования баз данных?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 09 дек 2005, 12:38

сходи на www.sql.ru например

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 09 дек 2005, 13:49

по поводу проектирования лучше купить умную книжку, и прочитать ее 2-3 раза.

Ответить