![]() |
|
![]() ![]() ![]() |
|
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Доброго времени суток.
Есть ли у кого материалы по сабжу? ![]() 1) В чем лучше (визуальное средство) проектировать, изменять БД Firebird? 2) Как работать с Firebird'ом в Delphi через dbExpress (может есть примеры)? Заранее спасибо. |
|||
|
||||
Deniz |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Материалы ibase.ru
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Использую их. БД в формате UTF8 постоянно имею проблемы с преобразованием типов строк. Все они безусловно решаются положительно, но писать такой код неудобно, чуть забыл написать преобразование и выползли кракозяблы. Смотрел код FIBPlus. Они заметно лучше, но стоят денег. Так что это вопрос нужно оно вам настолько что вы готовы за это платить. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
ReptileDB |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 24.11.2007 Репутация: нет Всего: нет |
Сейчас пишу софт с использованием Delphi 2010 & Firebird 2.1, но из dbExpress использую только SQLConnection, а вот от остальных компонент отказался по причине того, что тупо не отлавливает Exceptions которые я специально генерирую в хранимых процедурах.
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
А в стандартной поставке примеров нет? Добавлено через 1 минуту и 25 секунд А в параметрах соединение ставишь UTF-8 и всё равно кракозябры? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
А с чего вдруг у меня должны быть не кракозяблы если результат всегда приходит в UTF8, а компоненты не позволяют получать результат AsUTF8String ? Результат приходит совершенно правильный. Есть 2 варианта AsWideString и AsAnsiString. И то и другое не соответствует нативному типу. Сам движок не знает что тип строки это UTF8 обернутый в AnsiString. Скажем так, в байтовом представлении приходит верный результат, если бы он сам знал что в варианте у него фактически UTF8, то все строковые преобразования работали по присваиванию. Но исходники IBX таковы что установка режима UTF8 ничего внутри него не меняет кроме состояния поля объекта. Т.е. можно прочитать поле объекта и узнать что тип соединения UTF8, но сам IBX проинтерпретирует полученную строку как AnsiString. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Keeper89, давай ещё цепочку продолжим тремя-четырьмя компонентами, а? А то что-то короткая цепочка
![]() |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Akella, дальше некуда )
|
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Расположил на форме все вышеуказанное + пару DBEdit'ов и DBNavigator.
После добавления записи с помощью последнего, на форме запись имеется, но в самой базе ее нет. Что я делаю не так? ![]() |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Я с DBNavigator не работал, поэтому за него не скажу, но замечу, что при добавлении записей надо не забывать подтверждать транзакцию:
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Не ну понятное дело, что нужно делать
но вот в какой момент... ![]() |
|||
|
||||
VahaC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
||||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
VahaC,
А что нужно? И почему навигатор не может сделать это сам? |
|||
|
||||
VahaC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
Для сохранения изменений в таблице бд нужно сделать ClientDataSet1.ApplyUpdates или ClientDataSet1.Post
и потом закрыть транзакцию (IBTransaction1.CommitRetaining();) в контексте которой вносились изменения. Как это сделать с помощью ДБНавигатора к сожалению не знаю, так как в своих проектах его не использую |
|||
|
||||
former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 7 Всего: 17 |
DBNavigator тут не причем. Подтверждать транзакцию нужно в ClientDataSet, в триггере AfterPost. Ну и, соответственно, выполнять откат при ошибке (OnPostError и т.п.). -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
VahaC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
||||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
||||
|
||||
former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 7 Всего: 17 |
-------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
А что есть IBTransaction1?
![]() + другой маленький вопрос (не буду делать отдельную тему). Имеется триггер (и соотв. генератор) на BeforeInsert для ID-поля. При вставке новой записи в IBExpert'е автоматически добавляется новый ID как и положено, однако при попытке добавления записи в Delphi такого не происходит. В чем может быть дело? |
|||
|
||||
former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 7 Всего: 17 |
Так ты используешь dbExpress. А я так понял, что после сообщения Данкинг-а IBX. ![]() Вот статья. Тело триггера в студию. -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
А, ну да, я про IBX, разумеется. Там без IBTransaction работать и не будет. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Очень она пессимистичная ![]() В моем случае никак? ![]()
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
||||
|
||||
Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
А что ты передаёшь серверу, NULL? Согласно условий ты должен передать NULL в запросе для этого поля. А лучше вообще не передавать это поле:
Добавлено @ 15:56 Или если НЕ передаёшь NULL, то должен передать конкретное значение:
Это сообщение отредактировал(а) Akella - 12.4.2010, 15:57 |
||||||
|
|||||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Ничего не передаю. У меня есть ClientDataSet, для добавления я делаю ClientDataSet.Insert, заполняю только нужные поля (через DBEdit'ы), и дальше ClientDataSet.Post. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Хорошо. А что значит "ничего не происходит"? Что ты под этим подразумеваешь? Что ты ожидаешь? Что должно произойти? |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Я подразумеваю, что при Post'е незаполненные поля (которые по идее передаются как NULL) заполнятся автоматически на основании триггеров. А выдается ошибка, что поле должно быть заполнено. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Наверное, это связано с внутренней реализацией компонент. Поэтому два выхода.
1. В клиентской части приложения берём значение генератора и передаём в запросе, как и все остальные поля. 2. Поле ID вообще не должно участвовать в запросе. Зачем ты его туда пхаешь? |
|||
|
||||
former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 7 Всего: 17 |
Keeper89, выложи пример того, что ты делаешь. Тяжело гадать на кофейной гуще.
-------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
1. Кто "он"? И куда добавляет? В SQL запрос?
2. вот же пример
вставь его в кверю и выполни... как видишь, здесь нет поля ID |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
ClientDataSet через Insert и Post. попробую |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Ну, он нужен для работы согласно этому видео. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
не знаю... я бы на твоём месте не использовал dbExpress, есть другие замечательные компоненты
|
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Ну хотябы... хотя есть другие: anyDAC, FreeDAC, FibPlus, ZEOS, InterBase Objects (IBO), UnifiedIB (UIB), IBDac, FBLib, вот ещё http://www.ibase.ru/components.htm 1. Я не говорю, что плох. 2. Я не понимаю, зачем такую большую цепочку использовать? Ведь это сказывается на производительности, отладке и простоте разработки. 3. "Родные" компоненты прямого доступа всё же лучше, чем какое-то универсальное решение. Добавлено через 1 минуту и 12 секунд Лучше 1 раз купить фибы и потом горя не знать, ПМСМ. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |