Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 17:20   #11
Ivan174
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
проект собраный на бегу)
сильно не заморачивался, поэтому привязка везде жестко к каталогам.
Архив распаковываем на диск D (полный путь до проекта = D:\Новая папка\).
1я кнопка делает рез. копию с именем 1.fbk в свой же каталог.
2я кнопка восстанавливает архив в файл 1.fdb с заменой файла.
вроде ничего лишнего.
компонент FIBDatabase там только для наглядности) (участия он не принимает)
Спасибо. По сути у меня сделано аналогично, но все же ошибка вылетает о том, что к базе данных есть подключение... Хотя программа еще не дописана до конца и я запускаю ее от имени админа, но в начале выполнения восстановления произвожу отключение... Не пойму что-то((

Можно ли как то проверить наличие подключений к базе? желательно с указанием ролей

Последний раз редактировалось Ivan174; 15.05.2013 в 17:23.
Ivan174 вне форума Ответить с цитированием
Старый 15.05.2013, 17:37   #12
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

IBExpert - Службы - DatabaseMonitoring ... тут глянешь активные подключения к БД
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 19:28   #13
Ivan174
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 51
По умолчанию

Спасибо. Нашел ошибку сразу. как я мог только так((( вкратце, при запуске программы выбирается один из 4 отделов. каждый из них коннектится к этой базе, но выполняет разные действия. Так вот, подключение к базе, в каждом из этих отделов я прописал в FormCreate((((
И возникла иная проблема. перекинул подключение в FormShow. Коннектится, НО. у меня стоит таймер, на 15 секунд. каждые 15 секунд dataset закрывается и открывается вновь. Но теперь при открытии dataset вылетает окно, с введенным именем пользователя, ролью. и необходимо в нем ввести пароль. Это можно как-то исправить?
Ivan174 вне форума Ответить с цитированием
Старый 15.05.2013, 20:00   #14
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
у меня стоит таймер, на 15 секунд. каждые 15 секунд dataset закрывается и открывается вновь.
О_о и в чём же таинство этого деяния?
Цитата:
Это можно как-то исправить?
DataSet при открытии, видя что Database закрыт, пытается его открыть, а если в Database.LoginPromt стоит True - то и будет запрашиваться логин\пароль. Необходимо ВЫКЛ эту опцию
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 20:41   #15
Ivan174
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 51
По умолчанию

Таинство в том, что на форме лежит TcxGrid, завязанный к таблице. А эта таблица может быть изменена другими пользователями. Чтобы увидеть эти изменения, использую таймер.
Код:
procedure TForm4.tmr2Timer(Sender: TObject);
var st_num: Integer;
begin
  if PageControl1.ActivePageIndex=0 then
  begin
    st_num:= pfbdtst1.RecNo;           //Запоминание номера выделенной строки
    pfbdtst1.Close;
    pfbdtst1.Open;
    pfbdtst1.RecNo:=st_num;
  end
  else begin
    st_num:= pfbdtst2.RecNo;           //Запоминание номера выделенной строки
    pfbdtst2.Close;
    pfbdtst2.Open;
    pfbdtst2.RecNo:=st_num;
  end;
end;
Как видно из кода, я не трогаю database, только dataset. Да и в свойствах FIBDatabase свойство UseLoginPrompt установлено в False.
Ivan174 вне форума Ответить с цитированием
Старый 15.05.2013, 22:07   #16
Ivan174
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 51
По умолчанию

Итак, скрины сообщения с просьбой ввода пароля. Причем имя базы почему то пустое. И независимо от того, какой пароль там ввести или вообще нажать отмену, вылетает ошибка. Скрин предоставлен.
pfbtrnsctn1 - транзакция
Изображения
Тип файла: png Безымянный.png (13.7 Кб, 55 просмотров)
Тип файла: png Безымянный1.png (19.6 Кб, 57 просмотров)

Последний раз редактировалось Ivan174; 15.05.2013 в 22:23.
Ivan174 вне форума Ответить с цитированием
Старый 16.05.2013, 10:18   #17
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а не цепляется ли этот ДатаСет у тебя еще к какому-то соединению?
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 16.05.2013, 12:21   #18
Ivan174
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
а не цепляется ли этот ДатаСет у тебя еще к какому-то соединению?
ты по сути прав))) Найдена проблема всех моих мучений. Попытаюсь объяснить. При запуске программы у меня создаются все формы. на некоторых из них имеются таймеры. соответственно при создании формы они начинают работать. А они, как я уже писал выше, осуществляют closeopen у dataset. Вот и причина ошибки.
Решил использовать тэги программы. В зависимости от тэга создаю только нужные формы
Ivan174 вне форума Ответить с цитированием
Старый 16.05.2013, 13:42   #19
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

А может не стоит закрывать и открывать всё соединение к БД, а достаточно будет обновить запрос к нужной таблице?
superedward вне форума Ответить с цитированием
Старый 16.05.2013, 15:34   #20
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Ivan174, к теме о переоткрытии ДатаСета ... не хорошо это.
как вариант решения могу предложить такой вариант:
создать отдельную таблицу to_refresh вида:
id|table_name|recordid|userid| где id - ключ, table_name - имя таблицы к которой относится запись, recordid - № записи в указанной таблице, userid - пользователь.
и при добавлении\изменении какойто записи писать в эту таблицу соотв данные для ВСЕХ пользователей системы, а остальные пусть по таймеру проверяют наличие данных для конкретной таблицы по своему userid. если найдет что-то - пусть делает DataSet.Refresh по указаному recordid и потом удаляет эту строку с таблицы to_refresh, и т.д.
это будет гораздо рациональнее чем бессмысленно переоткрывать каждые 15 секунд огромный набор данных
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие базы по сети FireBird Lokos БД в Delphi 7 25.01.2011 05:47
Программное создание базы данных FireBird Lokos БД в Delphi 1 28.09.2010 10:32
firebird регистрация базы? Domanoff БД в Delphi 1 05.06.2010 17:05
Проблема с Резервированием и восстановлением базы InterBase\FireBird ХАнК Помощь студентам 3 11.03.2010 16:49
EMS InterBase & FireBird Manager 3 ошибка создания Базы данных Gilio БД в Delphi 2 08.05.2009 15:59