IBase
Пожалуйста подскажите как ограничить число подключений под одним username к интербейсовской базе. Программа пишется на D7.
Я не в курсе, что для этого можно сделать в БД, но на уровне приложения можно ограничить кол-во запущенных копий этого приложения на одной машинке.
Если так, то могу слить код, который может помочь в этом нелегком деле. (Есть такая бука - "Советы программистов" - очень полезная вещь, хоть и с опечатками и устаревшими советами)
(Еще есть такая маза, что если InterBase не зарегенный, то больше пяти подключений не поддердивает или это только для версии 5.0)
Я не в курсе, что для этого можно сделать в БД, но на уровне приложения можно ограничить кол-во запущенных копий этого приложения на одной машинке.
Если так, то могу слить код, который может помочь в этом нелегком деле. (Есть такая бука - "Советы программистов" - очень полезная вещь, хоть и с опечатками и устаревшими советами)
(Еще есть такая маза, что если InterBase не зарегенный, то больше пяти подключений не поддердивает или это только для версии 5.0)
Что же, спасибо за совет, но проблема в том, что приложение сетевое, и на одной машине будет запущена тока одна копия программы (хотя исходники не помешают, заранее спасибо).
PS: И на счёт IBase и его регистрации. Та же проблема, ограничение на 5 подключний (IBase v6.0.1.6), случаем не знаешь где можно взять IB_license.dat шоб был минимум на 50 пользователей, а то что-то нигде надыбать не могу (конечно на халявку).
Что же, спасибо за совет, но проблема в том, что приложение сетевое, и на одной машине будет запущена тока одна копия программы (хотя исходники не помешают, заранее спасибо).
На будущее - RTFM! книга, про которую я выше писал тебе поможет в разных мелочах, а некоторые выдержки из нее выложены на сайтах - поисковик тебе в зубы!
Просто добавь в модуле твоего сурса (вызывается Project->View Source, если забыл ;-)))
MemFileName='name_you_proga_mogno_bez_rasshirenija_exe';
var MemHnd: HWND;
{$R *.RES}
begin
MemHnd:=CreateFileMapping(HWND($FFFFFFFF), nil, PAGE_READWRITE,0, MemFileSize, MemFileName);
if GetLastError<>ERROR_ALREADY_EXISTS
then
begin
Application.Initialize;
with TInitialForm.Create(nil) do
TRY
InitialForm:=TInitialForm.Create(Application);
{здесь Create всех своих форм, что нужны-
найдешь их все - они запсианы сразу после главной твоей формы}
FINALLY
free;
END;
Application.Run;
end
else
Application.MessageBox('Прога уже запущена!','Ошибка!',MB_OK);
CloseHandle(MemHnd);
end.
Если что-то не получается - проверь что ты не так указал, может быть при загрузке ты менял порядок показа форм и т.д. и т.п.
Этот кусок кода я сам использую, поэтому пургу не гоню.
А какая, собственно говоря, разница - сетевая твоя прога или нет? у юзеров она запускается как копия!так что этот код тебе поможет!
начсет файла dat - я сам юзаю пока 5-ю версию ИБейза и нашел только для него(советую поискать в инете - можешь смело потом просить у начальства денег на покупку этой самой лицензии, естественно сумму выбирай в разумных пределах;))).
А вот гемороиться с обращением к БД или там на уровне БД(уже в самой БД создавать таблицу юзеров, в нее записывать кол-во коннектов, из проги потом это делать обрубать... в общем идея где-то такая) - не советую!тяжко это все и много лишнего кода!
Я тут писал поскорому, может и не залогинился на форуме8)
Привет от Soleil.
Успехов!
На будущее - RTFM! книга, про которую я выше писал тебе поможет в разных мелочах, а некоторые выдержки из нее выложены на сайтах - поисковик тебе в зубы!
Просто добавь в модуле твоего сурса (вызывается Project->View Source, если забыл ;-)))
Если что-то не получается - проверь что ты не так указал, может быть при загрузке ты менял порядок показа форм и т.д. и т.п.
Этот кусок кода я сам использую, поэтому пургу не гоню.
А какая, собственно говоря, разница - сетевая твоя прога или нет? у юзеров она запускается как копия!так что этот код тебе поможет!
начсет файла dat - я сам юзаю пока 5-ю версию ИБейза и нашел только для него(советую поискать в инете - можешь смело потом просить у начальства денег на покупку этой самой лицензии, естественно сумму выбирай в разумных пределах;))).
А вот гемороиться с обращением к БД или там на уровне БД(уже в самой БД создавать таблицу юзеров, в нее записывать кол-во коннектов, из проги потом это делать обрубать... в общем идея где-то такая) - не советую!тяжко это все и много лишнего кода!
Я тут писал поскорому, может и не залогинился на форуме8)
Привет от Soleil.
Успехов!
Ладушки, книжку поисчим.:)
На счёт копий, енто я просто не так выразился, каюсь :{ , не прога запускается по сети, а просто БД не локальная а сетевая, так что оптимальный вариант пока это таблица с подключенными юзерами.
Этот вариант мне нравится больше чем издевательства над isc4.gdb с настройкой логов и их обработкой (нашёл статейку по этому поводу).
За исходничек пасибы, опробую как нить попозже, сроки поджимают :( вот и мучаюсь, рюшечки потом наведу, пока тестить народ будет первую версию.
Да и завязывать надо с IB и переходить на FireBird
но увы, обязательное условие начальства - первая версия на IB, а там как пойдет.
Ладушки, книжку поисчим.:)
На счёт копий, енто я просто не так выразился, каюсь :{ , не прога запускается по сети, а просто БД не локальная а сетевая, так что оптимальный вариант пока это таблица с подключенными юзерами.
Может я чего не дочитал где и т.п., но вроде как и БД (хоть она и сетевая) запускается в своей копии(в случае внесения изменений одновременно несколькими юзверями в одних и тех же данных - соответственно как настроишь транзакции, так и будет работать - может взглюкнуть, а может долго молчать и убить базу, а может и прокатит...)
Почитай еще такую буку (в любом издании, хоть 1-м, хоть 2-м):А.Н.Ковязин, С.М.Востриков "Архитектура, администрирование и разработка приложений баз данных в IB, FB,Y" Мир InterBase
Все-таки ограничить коннекты на уровне приложения проще!
Хотя, смотря как написана прога - можно, конечно, на каждую выборку устраивать коннект-дисконнект и т.д. 8)))
Хозяин-барин!!!
Удачи!
!!!Дополнение к примеру: обязательно добавь в uses модуль Windows!!!
Может я чего не дочитал где и т.п., но вроде как и БД (хоть она и сетевая) запускается в своей копии(в случае внесения изменений одновременно несколькими юзверями в одних и тех же данных - соответственно как настроишь транзакции, так и будет работать - может взглюкнуть, а может долго молчать и убить базу, а может и прокатит...)
Почитай еще такую буку (в любом издании, хоть 1-м, хоть 2-м):А.Н.Ковязин, С.М.Востриков "Архитектура, администрирование и разработка приложений баз данных в IB, FB,Y" Мир InterBase
Все-таки ограничить коннекты на уровне приложения проще!
Хотя, смотря как написана прога - можно, конечно, на каждую выборку устраивать коннект-дисконнект и т.д. 8)))
Хозяин-барин!!!
Удачи!
!!!Дополнение к примеру: обязательно добавь в uses модуль Windows!!!
Эх, читать не перечитать умных мне буков. :)
Но благодоря спецификации базы мне с этм проще, в основном из базы идёт только выборка и добавления, а редактирование - явление крайне редкое. :) Да и колличество пользователей не велико. Кстта если есть буки в электронном виде - буд рад помощи. ;)
Кстта если есть буки в электронном виде - буд рад помощи. ;)
Советую полазить на сайтах "любимых исполнителей" - типа interbase.ru и все с ними связанное (можно почитать советы разные - тоже очень помогает)!
У меня, например, в офисе - главный исполнитель по проекту сделал главную лажу, которую только можно было - получение номера добавляемой записи через Select MAX(ID), а нужен-то генератор!!!
Успехов!
RTFM forever!
Советую полазить на сайтах "любимых исполнителей" - типа interbase.ru и все с ними связанное (можно почитать советы разные - тоже очень помогает)!
У меня, например, в офисе - главный исполнитель по проекту сделал главную лажу, которую только можно было - получение номера добавляемой записи через Select MAX(ID), а нужен-то генератор!!!
Успехов!
RTFM forever!
Этого я уже набрал, но вруг есть особенные, которые сам собирал или что-то вроде того. :)
Select MAX(ID) - УПС! :o
Я видел эти советы, у меня это тоже так реализовано в "дочерних таблицах". Интенсивность работы с базой позволяет использовать данный вариант, а мне необходим не максимальный в базе, а максимальный для данного проекта (что-то типа проект - 1, объекты 1,2,3.., проект - 2, Объекты - 1,2,3) а уникальность отслеживается по двум полям сразу. :)
PS: Заказал книгу по Архитектуре БД, которую ты советовал, так что посмотрм, что прийдёт. ;)
Select MAX(ID) - УПС! :o
Интенсивность работы с базой позволяет использовать данный вариант, а мне необходим не максимальный в базе...
Это я скажу - бабушка на двое сказала8))
до тех пор пока не опредедлили, что за глюк такой накрывал приложение и БД, пришлось угробить кучу времени на поиск по коду(ведь написано-то вроде все правильно), а вся трабла-то в том, что и не надо даже никакого немеренного флуда юзеров на твой сервак вместе с БД(это первая побочная причина), а нужно иметь всего-то два компа, один из которых имеет побольше оперативы и проц покруче и тогда даже не одновременно выполняемые запросы, связанные с твоим Select Max(ID) приведут на одном из компов к глюку(это вторая побочная причина), а последствия уж сам узнаешь. А теперь третья побочная причина - а не запаришься ли ты потом (типа через годик, когда на тебя начальство повесит еще пару-тройку проектов)вспоминать: а что я тут накодил, мля...=()
И главная причина - если уж народ такие вещи вывешивает уже на сайты и всем уши прожужжал, то не надо быть таким самонадеянным, чтобы подтвердить русскую поговорку о учебе на своих ошибках - советую использовать чужой опыт! да и генератор затиснуть в БД и написать его вызов не так уж сложно.
а максимальный для данного проекта (что-то типа проект - 1, объекты 1,2,3.., проект - 2, Объекты - 1,2,3) а уникальность отслеживается по двум полям сразу. :)
вот тут я не догнал?! у тебя к одной БД обращается несколько приложений, заточенных под какие-то свои цели что ли? а БД у них одна?
Это я скажу - бабушка на двое сказала8))
до тех пор пока не опредедлили, что за глюк такой накрывал приложение и БД, пришлось угробить кучу времени на поиск по коду(ведь написано-то вроде все правильно), а вся трабла-то в том, что и не надо даже никакого немеренного флуда юзеров на твой сервак вместе с БД(это первая побочная причина), а нужно иметь всего-то два компа, один из которых имеет побольше оперативы и проц покруче и тогда даже не одновременно выполняемые запросы, связанные с твоим Select Max(ID) приведут на одном из компов к глюку(это вторая побочная причина), а последствия уж сам узнаешь. А теперь третья побочная причина - а не запаришься ли ты потом (типа через годик, когда на тебя начальство повесит еще пару-тройку проектов)вспоминать: а что я тут накодил, мля...=()
И главная причина - если уж народ такие вещи вывешивает уже на сайты и всем уши прожужжал, то не надо быть таким самонадеянным, чтобы подтвердить русскую поговорку о учебе на своих ошибках - советую использовать чужой опыт! да и генератор затиснуть в БД и написать его вызов не так уж сложно.
Учту. :) Да и наверняка переделаю потом всю базу (во второй версии программ), первая нужна пока, чтобы приучить людей к порядку и подготовить к работе с моей базой. В итоге БД изменится (с учётом всех советов). программа
вот тут я не догнал?! у тебя к одной БД обращается несколько приложений, заточенных под какие-то свои цели что ли? а БД у них одна?
Нет. Есть таблица проектов, в которой лежат проекты, а есть таблица объектов в которой лежат объекты. Один проект может содержать несколько обектов. Я пришёл на уже готовую базу данных, надо было только программу написать. Ща прогу заканчиваю (первый вариан) - она пойдет на тестирования, а я начну кардинально переделывать структуру БД.
Учту. :) Да и наверняка переделаю потом всю базу (во второй версии программ), первая нужна пока, чтобы приучить людей к порядку и подготовить к работе с моей базой. В итоге БД изменится (с учётом всех советов). программа
Это - здорово! Главное - не затягивать! А то получится как всегда8)) (я где-то читал типа хюмор - про то как программисты строили дом) - начинается строительство дополнительного двухэтажного здания, чтобы поставить на него кран, который сможет достроить недостающие два этажа высотки=() (вот так и в БД начинают пихать всякую дрянь для латания дыр, возникших на стадии проектирования БД).
Раз уж пишите на Delphi7 и IB у вас явно не 5.5 (а лучше 6.5), то советую попробовать компоненты FIBPlus - очень занятная вещь - обновляемые запросы, удобные механизмы управления транзакциями, гарантированное снижение глюков8)(если и будет просить денежку, то для русских - россиян - скидки).
Успехов!
Раз уж пишите на Delphi7 и IB у вас явно не 5.5 (а лучше 6.5), то советую попробовать компоненты FIBPlus - очень занятная вещь - обновляемые запросы, удобные механизмы управления транзакциями, гарантированное снижение глюков8)(если и будет просить денежку, то для русских - россиян - скидки).
На данный момент стоит IB 6.0.1.6, но в виду платности и возможных глюков (поговаривают с блобами IB не всегда в ладах, а это основное в базе), планируется переход на FireBird. Компоненты FIBPlus тоже планируется использовать (опять же как финансы позволят, а то покупать FastReport, FIBPlus, да уже заказал пару книг по проектированию сетевых баз данных - начальство может не понять :).
Ну а за советы ОГРОМНОЕ спасибо.:D