Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Открыть новую тему     Написать ответ в эту тему

q2q2q2q2q2



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Очень интересная информация, особенно по поводу триггеров.

Всего записей: 6 | Зарегистр. 10-01-2007 | Отправлено: 19:53 20-09-2007
jemiko

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите если можете примерчиком,
 
нужно вставить в таблицу несколько записей, а потом ИЛИ сохранить эти записи ИЛИ нет.
что нужно при этом сделать. FibPlus, FireBird.
 
Добавлено:
Извините за флуд,
кажется разобрался.
 
   pFIBTransaction1.StartTransaction;
 
        вставка записей
 
   pFIBTransaction1.Commit;
   pFIBDataSet1.Open;
 
если нет  
 
   pFIBTransaction1.Rollback;
   pFIBDataSet1.Open;

Всего записей: 250 | Зарегистр. 16-04-2007 | Отправлено: 15:18 21-09-2007
savnick



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте!
 
Firebird 1.5.4, delphi7, FIBPlus, EhLib
Есть следующие таблицы:  
 
ОТДЕЛЫ
id
наименование
 
 
КАТЕГОРИИ_ТОВАРОВ
id
наименование
 
и таблица, показывающая какие категории есть в каждом из отделов  
(отдельная таблица нужна, так как одна категория может встречаться в нескольких отделах)
таблица состоит из двух полей:
id_отдела
id_категории
объединенных в уникальный ключ
 
В приложении-клиенте есть форма на которой два dbgrideh - один отображает данные из  
dataset отделов, другой из dataset категорий, между ними настроена связь master-detail.
В грид с категориями выбираются только категории соответсвующего отдела с помощью запроса к нескольким таблицам.
 
Вопрос следующий:
При добавлении в грид категорий новой записи она добавляется в таблицу категорий.
Как в этот момент организовать добавление записи в таблицу, связывающую отделы и категории???
 

Всего записей: 5 | Зарегистр. 22-08-2006 | Отправлено: 09:56 25-10-2007
ymg2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
savnick
Если просто при добавлении в табл. Категорий новой категории, то никак, т.к. у тебя в этот момент ни в одном из отделов еще нет этой этой категории. Добавление записи в эту таб. нужно организовать при привязке категории к отделу, т.е. нарпимер, по Drag&Drop из классификатора Категорий в табл. Отделов.
Второй вариант, завести Отдел что-то типа склада на случай, когда-еще неизвестно, к каким отделам данная категория должна принадлежать. В этом случае формирование записи можно посадить на триггер AfterInsert для Категорий с привязкой новой категории к отделу-складу.

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 13:00 25-10-2007
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
savnick, посмотри в сторону CachedUpdates и связки master-detail. На devrace.com есть хорошие статьи по этой теме.

----------
Чем больше узнаю людей, тем больше люблю компьютеры.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 03:08 26-10-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
savnick

Цитата:
При добавлении в грид категорий новой записи она добавляется в таблицу категорий.  
Как в этот момент организовать добавление записи в таблицу, связывающую отделы и категории???  

никак.  
Потому что вставка записи в справочник категорий это одна независимая операция, а привязка категории к отделу это другая независимая операция.
И в общем случае может делаться разными людьми по правам доступа.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 13:16 26-10-2007
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jemiko
лучше любые вставки делать через хранимки....
перекладывать все на сервер и снимать всё с клиента...

Код:
 
   pFIBTransaction1.StartTransaction; //вот этого не надо делать, будет ошибка
                                                      //при открыти TDatabase, транзакция стартует автоматически
  spIns_New_Kvit.ParamByName('NOMER_KVIT_ID').AsInteger := dm.IMain.FieldByName('ID').AsInteger;//номер квитанции
  spIns_New_Kvit.ParamByName('SUM_PROPIS').AsString := lblSumProp.Caption;
 
   try
     spIns_New_Kvit.ExecProc; //выполняем хранимку
     spIns_New_Kvit.Transaction.CommitRetaining; //если все хорошо, подтверждаем транзакцию
   except //исключение
    on E:Exception do
       begin
         ch:= PChar(e.Message); //показываем ошибку, чтобы не чесать репу о том что сказала нам СУБД
        if Application.MessageBox(PChar(ch),'АРМ',MB_OK + MB_ICONERROR) = IDOK then
          spIns_New_Kvit.Transaction.RollbackRetaining;
       end;
   end;


Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 06:35 30-10-2007 | Исправлено: DroN_S, 06:36 30-10-2007
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DroN_S

Цитата:
 при открыти TDatabase, транзакция стартует автоматически

Чего-чего??? spIns_New_Kvit.Options.goStartTransaction сбрось в False и посмотри...  
или spIns_New_Kvit.Transaction = dm.IMain.Transaction?

Цитата:
 
  spIns_New_Kvit.Transaction.CommitRetaining
   ...
  spIns_New_Kvit.Transaction.RollbackRetaining;
 

Не надо учить людей плохому и сам больше так не делай.
 

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 11:07 30-10-2007
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
spIns_New_Kvit.Options.goStartTransaction сбрось в False и посмотри...

если стоит в фальшь то да, но goStartTransaction := True стоит по умолчанию...
двойной старт транзакции приведёт в фатальной ошибке...

Цитата:
Не надо учить людей плохому и сам больше так не делай.

распиши что не так?

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 14:47 30-10-2007
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
если стоит в фальшь то да, но goStartTransaction := True стоит по умолчанию...

Вот и я о том, что pFIBDatabase1 никакого отношения к старту pFIBTransaction1 не имеет.

Цитата:
распиши что не так?

Ну лучше Кузьменко я все равно не распишу, поэтому
Транзакции в InterBase
и дальше по списку в конце статьи.
Хотя странно, судя по дате старта темы, вопросов по OIT, OAT, сборке мусора и т.д. и т.п. у тебя уже не должно быть

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 16:02 30-10-2007
eap

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые специалисты! Помогите простому админу. Есть программа контроля доступа, которая в interbase ведет учет сотрудников и время их прохода через турникеты. Понадобилось ввести новый Facility Cod карточек через Конфигуратор - Программу настройки системы. Получаю сообщение, что база данных заблокирована другим экземпляром Конфигуратора в июле месяце, возможен только доступ в режиме просмотра. То есть, в июле был сбой питания на сервере, при этом был включен конфигуратор. При всех выключенных программах Контроля доступа в Консоли interbase есть 3 подключения. При этом программа для ввода пропусков исправно работает - возможна одновременная работа с нескольких рабочих мест - и висящие сессии не влияют на ее работу. Методом научного тыка через консоль я не смог ничего добиться. Версия IB - 7.1.
Подскажите, как отключить зависшие сессии доступа к БД или где об этом написано. У меня есть документация по работе с программой контроля доступа, но не с БД.

Всего записей: 2837 | Зарегистр. 23-11-2006 | Отправлено: 19:23 12-11-2007 | Исправлено: eap, 06:00 13-11-2007
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Подскажите, как отключить зависшие сессии доступа к БД или где об этом написано

Написано об этом в документации на IB, которая поставляется вместе с дистрибутивом IB К сожалению моя дружба с InterBase закончилась еще на версии 5.6, но насколько я помню в семерке появились временные системные таблицы, попробуй поиграться с TMP$STATE в TMP$ATTACHMENTS, только резервную копию базы сделать не забудь.
P.S. Программа - APACS или WinPak?

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 11:19 13-11-2007
eap

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Программа APAKS, как оказалось, имеет ключ UNLOCK, не прописанный в документации. Так что спасибо, все уже хорошо! Проблема снята.

Всего записей: 2837 | Зарегистр. 23-11-2006 | Отправлено: 14:31 13-11-2007
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток всем!  
У меня вот такая проблема (может кто-нить встречался).  
Решил поставить на сервер MS Windows 2003 Server R2 (два двухядерных проца, 2Gb) FireBird 2.1.0 (предварительно оттестировав производительность и существующие базы на Workstation).  
Всё вроде-бы ничего, рабтает (на сервере), но ТАААК медленно -- просто жуть. Запросы на сервере В ДЕСЯТКИ раз медленнее отрабатывают, чем на обычной машине (по обоим протоколам: локальному и TCP). Загрузка ядер на сервере -- минимальная (просто кошмар -- как будто он и не работает вовсе!).  
Что можно сделать (может у кого-нить есть опыт в решении этой проблемы).
 
априори: ставил Classic, из настроек Firebird -- только разрешения к папке хранения баз данных, сеть имеет доменную структуру.
 
P.S. На одном из форумов читал, что

Цитата:
У нас был случай когда WIN 2000 Server отобрал память у сервера Firebird в пользу системного кеша, куда пытался "затолкать" разрошийся файл базы данных. Выличилось насторйкой в системном реестре, которая отвечает за распеределение физической памяти между файловым кешем операционной системы и приложениями. Как называется ключ реестра, к сожалению забыл...
 
Может из вас кто-нибудь помнит? Или можно как-нибудь по-другому это дело вылечить?

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 14:56 05-02-2008
LeaF_AVF



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZalivkoDenis

Цитата:
из настроек Firebird -- только разрешения к папке хранения баз данных

это - вообще не нужно, доступ к файлу базы должен иметь только аккаунт SYSTEM (от его имени и работает сервер Firebird)
 
сам со 2-й версией пока плотно не работал. Устраивает пока 1.53 (на Win2k)
Если есть возможность попробуй с ней
 
P.S. на 2003 есть восстановление системы?

Всего записей: 275 | Зарегистр. 01-01-2007 | Отправлено: 17:22 05-02-2008
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZalivkoDenis, отключи двухядерность для Firebird'a: Hyperthreading & SMP + InterBase, Firebird, Yaffil

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 02:36 06-02-2008
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Tantos
За совет -- спасибо! Но, этот HT отключается, я так понял, для всего сервера (физического)? Это правильно? (Извиняюсь за ламерский вопрос, но совсем недавно получил в эксплуатацию эту машинку, -- не скажется ли это на производительности других приложений (серверов). Ещё раз прошу прощения, если спросил чушь.)

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 09:26 06-02-2008
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZalivkoDenis, в принципе, да. Но где-то видел программу, которая это делает для отдельных приложений.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 03:42 07-02-2008
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Путём долгих, продолжительных мучений, экспериментально -- заработал Firebird-2.1.0.17735_0 RC1 Superserver.
А вот Classic на любой машине на великом-великом ручнике (ОООЧЕНЬ сильно тормозит и от НТ это совсем не зависит ) Скорее всего это происходит из-за RC1
Вывод:  
 для версии Firebird-2.1.0.17735_0 RC1 использовать ВСЕГДА Superserver!
 
P.S. ДОждёмся релиза. Может там всё будет ОК. (потерял почти неделю -- это, видимо, и есть плата за бесплатность )
 
Всем СПАСИБО за помощь!

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 17:07 07-02-2008
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго всем времени суток!
Так кто-нить работал с FB 2.1? Есть вопрос...

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 14:42 06-03-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru