Форум - Ответы     (  К темам )
 ?  Lusha: Работа с IBase в Билдере с автоинкрементным полем (29-04-2003 16:25:49)
Суть проблемы вот в чем:
По всем правилам создается автоинкрементное поле (использовала IBExpert).
Перехожу к работе с Билдером и получаю кучу проблем.Для того что-бы хоть как-то заработало устанавливаю свойства
AutoGenerateValue = true
FieldKind = fkInternalCalc
на первый взгляд все работает, как-бы не так...
Для работы мне это поле требуется после того как добавлена новая запись
Я делаю Append,Post,Commit
И пытаюсь получить значение моего поля примерно так
int i = IBaseAutoInc->AsInteger;
i всегда равно 0
Что происходит и кто виноват?
А самое главно как мне быть? Подскажите


После создания записи автоинкрементное поле равно 0!?
 Владимир (29-04-2003 20:09:43) http://cbuilder.ru
>>По всем правилам создается автоинкрементное поле (использовала IBExpert).
1/.
А что значит - по всем правилам ?
Автоинкрементных полей в InterBase нет, они эмулируются с помощью
генераторов и триггреров(или хранимых процедур)

Как именно создали поле в IBExpert, подробнее ?


>>Перехожу к работе с Билдером и получаю кучу проблем
2/.
Какими компонентами пользуетесь для доступа к БД InterBase из C++Builder ?

Это важно, но главное в первом вопросе, в зависимости от того как
создаете поле и будет зависить, каким способом изменять его
значение.
 Lusha (30-04-2003 10:11:59)
Говоря, по всем правилам, я имела в виду эмуляцию автоинкрементных полей с помощью генераторов и триггеров. Они замечательно генерируются - по этому поводу у меня вопросов нет.
Какими компонентами пользуюсь?
Вот этим - IBDatabase, IBTransaction, IBTable, DataSourse
Может действительно загвоздка в подборе компонентов...
Мне это не приходиов голову, однако в моей компании не приветствуют использования компонентов не из стандартного пакета.
 Anry (30-04-2003 11:54:37)
У любого компонента набора данных из состава IBExpress есть свойство GeneratorField. Дальше думаю разберешся сама. Кстати компонент IBTable при работе с IBase лучше не использовать. Всего хорошего.
 Lusha (30-04-2003 12:09:23)
Я использую компоненты с закладки InterBase. Подобного свойства у этого набора нет.
Проверила:-)
 Lusha (30-04-2003 12:14:41)
Я использую компоненты с закладки InterBase. Подобного свойства у этого набора нет.
Проверила:-)
 Anry (30-04-2003 12:28:37)
Извиняюсь, совсем забыл. Если ты используешь C++Builder5 и у тебя не обновленные компоненты IBExpress, то данного свойства там нет. Советую тебе обновить их.(http://www.ibase.ru/v6/ibx605bcb6.zip) Всего тебе наилучшего.
 Lusha (30-04-2003 12:39:51)
Будь любезен, расскажи что это за чудо обновление. Билдер переставлять не прийдется?
 Anry (30-04-2003 13:30:36)
Это обновление IBExpress-компонентов под C++Builder6 (обычный установочный пакет IBXBCB605.EXE в zip-архиве). Никогда проблем с установкой этой версии компонентов у меня не было. Если у тебя С++Builder5, то скачивай обновление по ссылке http://www.ibase.ru/v6/ibx504bcb.zip. Когда я работал в пятом Builder'e, то работал с этой версией - проблем с установкой также не было. Пока.
 Lusha (30-04-2003 13:39:10)
Ну неужели эту маленькую проблемку нельзя решить не устанавливая дополнительных средств. Дело скорее всего в моих ручках ..:(
 Anry (30-04-2003 14:36:05)
Не понимаю, почему ты видишь в установке обновленной версии компонентов проблему. Не спорю, что можно решить твою проблему без обновления (возможно даже знаю как), но эта лишняя ручная работа. Если я правильно понял, то тебе нужно после сохранения записи получить текущее значение генератора. Это можно сделать с помощью запроса вида "SELECT GEN_ID(ИМЯ_ГЕНЕРАТОРА, 0) FROM RDB$DATABASE" или с помощью хранимой процедуры :

CREATE PROCEDURE GETNEWCLIENT
RETURNS (NID INTEGER)
AS
  BEGIN
    NID = GEN_ID(ИМЯ_ГЕНЕРАТОРА, 1);
  END

Можешь поместить компонент TIBStoredProc на форму, подсоединить его к данной
процедуре, и например в методе таблицы OnNewRecord написать следующее

 StoredProc1->ExecProc();
 ClientTable->FieldByName("CLIENT_ID")->AsInteger =
     StoredProc1->ParamByName("NID")->AsInteger;

Если я тебя неправилино понял, то объясни подробней. Пока.
 Владимир (03-05-2003 11:44:29) http://cbuilder.ru
А еще лучше, чтоб совсем не мучится - перейти на компоненты FIBPlus,
в которых это все реализовано очень удобно, как и многое другое
 Anry (03-05-2003 13:04:56)
Я конечно с тобой полностью согласен, но только где их взять-то халявные, да переделывать под них программу что-то не очень вставляет.
 Lusha (05-05-2003 12:34:21)
Anry, огромное спасибо за помощь. Все сраслось и замечаельно работает.
Присоеденяюсь к твом словам о FIBPlus. Еще не известно есть ли у них все необходимые лицензии, сертификаты и тп допуски для работы на атомных станциях?
 Владимир (05-05-2003 13:59:54)
А что, разве у Windows может быть такая лицензия ?
Очень сомневаюсь...
А если есть, то такую атомную станцию очень жаль, надеюсь она очень далеко от Москвы,
или на ней только в игрушки играют, да в Интернете развлекаются.

Ну ладно, если бы Unix


----

Что касается FIBPlus:

Можно, конечно и на Парадоксе писать и на Accesse
И работать опять на ДВК-2М или Электронике-85 и СМ-4 или ЕС ЭВМ
Но на современных компьютерах лучше !

Так и здесь ! Эти компоненты специально и сделаны
для максимально удобной работы с БД InterBase (FireBird)
Переходите на FIBPLus - это УДОБНЕЕ и ЛУЧШЕ
 Anry (06-05-2003 10:40:11)
Нет, ты конечно Владимир все правильно говоришь. У компонентов FIBPlus много преимуществ по сравнению с IBExpress-компонентами. Я сам пробовал их установить, но знаешь что-то не нашел крякнутых (наверное потому, что я всегда гонюсь за самой свежей версией). Плюнул я на это дело и стал дальше писать под IBExpress. В принципе, для проекта над которым я сейчас работаю вполне хватает функциональности этих компонентов, да и слишком много уже надо переделывать, если переходить на FIBPlus. Буду очень признателен, если ты мне дашь ссылку на рабочую версию этих компонентов (без проблем с лицензией). Всего наилучшего.
 Serg Vostrikov (16-05-2003 09:50:20) http://www.devrace.com
Относительно допусков для работы на атомных станциях :). Смешное требование, конечно, но таких сертификатов у FIBPlus нет и не будет. Поскольку как минимум нет таких сертификатов и вряд ли будут у InterBase/Firebird/Yaffil/Delphi/C++ Builder и Kylix. Кстати, IBX это тоже касается. Если кто-то считает, что раз они входят в поставку, то Borland что-то гарантирует по этому поводу, то он жестоко ошибается. Рекомендую почитать лицензионное соглашение, которое идет с Delphi/C++ Builder.

Теперь по поводу крякнутых. Ребята, неужели даже наши _специальные_ цены для exUSSR настолько высоки, что имеет смысл искать ломанные компоненты? Для наших FIBPlus стоит 500 рублей. Мы все знаем, что это те деньги, которые обычно уходят на то, чтобы попить пивка в компании. Так почему бы не вложить эти деньги в продукт, который сэкономит ваш же труд и время, сделает за вас тучу работы (начиная с автоинкрементных полей и заканчивая упаковкой блобов налету) и при этом вы еще в течение года за эти 500 рублей будете получать нахаляву все апдейты и новые версии? Вы на интернет больше потратите, чтобы искать варезные версии в течение года :)

В общем, я в некотором недоумении. То есть, я хорошо понимаю, что платить за софт у нас пока еще не очень принято, хотя, смею вас уверить, ситуация меняется - люди начинают проявлять самоуважение, тем паче, что в случае с FIBPlus это проявление очень дешево. Ведь если вы сами не покупаете стороннее ПО, то почему считаете, что завтра сумеете продать свое за реальные деньги?

Вот такие мысли по этому поводу. Всего наилучшего.
 Владимир (20-05-2003 10:08:10) http://cbuilder.ru
Полностью с Вами согласен.

Поэтому эти компоненты есть, например, у меня лично и моих знакомых,
(и не только эти - и FastReport2.47 и многие другие),
но на сайте для скачивания они не будут никогда выложены,
пока они платные и нет разрешения автора.

---

Вызывает только огорчение - это Help к ним
К FastReport есть полное описание и help на русском языке
Тоже самое было и к компонентам RXLib

Книга книгой("Мир InterBase."),
а help (удобно встаиваемый в C++Builder) на русском все же нужен

А вот к сожалению к FIBPlus - английский Help и все
Я понимаю что ТАМ за FIBPlus платят больше, но все равно жаль отсутствие Help-a на русском языке
И автор FIBPlus тоже должен уважить покупателей из exUSSR и сделать
такой help на русском.


support@cbuilder.ru