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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2009, 15:42   #1
danswin
Пользователь
 
Регистрация: 27.09.2007
Сообщений: 18
По умолчанию Вопрос про транзакции и не только.

Всем привет, вот решил по эксперемнтировать да и просто набраться опыта.
Вопроса 2 первый из них )
Есть база *.gdb есть таблицы но это не важно, суть программа используется на 3 компьютерах через сеть просматривают базу добавляют значения в базу (добавление организации), после добавляемая строчка должна обновиться у всех у кого открыта программа, я предполагаю что значения обновиться после открытия новой формы я думаю это логично, но как добиться так чтобы запись обновилась у всех сразу (а приходилось закрывать программу и открывать снова тогда позиция появляется), значит пребывал DataModule2.IBTransaction1.CommitRe taining; но чет не так 100% делаю нужно делать DataModule2.IBTransaction1.Commit; но при этом у меня программа отключается то есть таблицы закрываются нужно сделать чтобы не закрывались а всегда были октивны, вот все что моно уже изучил что мне так и не чего не дошло ))) подскажите плиз)
Вопрос №2
Нужно при DBGrid1DblClick открывается окно Form там DBEdit ы всякие таблицы нужно сделать чтобы при повторном DBGrid1DblClick не изменялась (при этом открыта и старое окно и новое) информация в старом окне и информация в новом окне
Пример открытия:
var a: string;
begin
a:=Form3.DBEdit1.Text;
Form16.IBDataSet1.SelectSQL.Clear;
Form16.IBDataSet1.SelectSQL.Add('se lect * from ORGANIZ where id = '+a+'');
Form16.IBDataSet1.Open;
Form16.Show;
Form16.Caption:=’’;
danswin вне форума Ответить с цитированием
Старый 14.01.2009, 07:46   #2
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

Цитата:
Сообщение от danswin Посмотреть сообщение
Всем привет, вот решил по эксперемнтировать да и просто набраться опыта.
Вопроса 2 первый из них )
Есть база *.gdb есть таблицы но это не важно, суть программа используется на 3 компьютерах через сеть просматривают базу добавляют значения в базу (добавление организации), после добавляемая строчка должна обновиться у всех у кого открыта программа, я предполагаю что значения обновиться после открытия новой формы я думаю это логично, но как добиться так чтобы запись обновилась у всех сразу (а приходилось закрывать программу и открывать снова тогда позиция появляется), значит пребывал DataModule2.IBTransaction1.CommitRe taining; но чет не так 100% делаю нужно делать DataModule2.IBTransaction1.Commit; но при этом у меня программа отключается то есть таблицы закрываются нужно сделать чтобы не закрывались а всегда были октивны, вот все что моно уже изучил что мне так и не чего не дошло ))) подскажите плиз)
Чтобы при изменении данных в таблицах на сервере, обновлялись данные на стороне клиентов, используйте Уведомления о событиях. Для этого, обновления данных, запросы INSERT, UPDATE, DELETE вынесите в хранимые процедуры. В конце процедуры отправте уведомление клиентам.
Пример:
CREATE PROCEDURE MYTABLE_INS(
......
Список парамтров
......
)
AS
BEGIN
INSERT INTO MYTABLE
(
Список полей
)
VALUSE
(
Список значений
)

POST_EVENT 'MYTABLE_UPDATE';
END

На стороне клиента используйте TIBEvents. В нем вы регистрируете событие MYTABLE_UPDATE, и когда оно происходит в обработчике события TIBEvents.OnEventAlert прописываете код который будет рефрешить нужные наборы данных.
Цитата:
Сообщение от danswin Посмотреть сообщение
Вопрос №2
Нужно при DBGrid1DblClick открывается окно Form там DBEdit ы всякие таблицы нужно сделать чтобы при повторном DBGrid1DblClick не изменялась (при этом открыта и старое окно и новое) информация в старом окне и информация в новом окне
Пример открытия:
var a: string;
begin
a:=Form3.DBEdit1.Text;
Form16.IBDataSet1.SelectSQL.Clear;
Form16.IBDataSet1.SelectSQL.Add('se lect * from ORGANIZ where id = '+a+'');
Form16.IBDataSet1.Open;
Form16.Show;
Form16.Caption:=’’;
Если Элементы управления данными в форме связаны с одним и тем же набором данных, они всегда будут отображать одну и туже информацию, редактируете данные в одном окне, изменяется содержимое другого окна, связанного с этим-же набором. Я понял так, что вы хотите, чтобы управление данными ф разных формах шло независимо друг от друга.
Поместите наборы данных, с которыми связаны элементы управления данными формы, на саму форму. Они будут создаваться вместе с экземпляром формы и не будут зависеть друг от друга.
Rik вне форума Ответить с цитированием
Старый 14.01.2009, 09:12   #3
danswin
Пользователь
 
Регистрация: 27.09.2007
Сообщений: 18
По умолчанию

Возможно сделать без процедур? и я тут статьи читаю в них указано что можно блакировать данные что хоть после использовния comit данные все рвоно не изчезают. Возможно ли это сдлеать?
danswin вне форума Ответить с цитированием
Старый 14.01.2009, 10:56   #4
danswin
Пользователь
 
Регистрация: 27.09.2007
Сообщений: 18
По умолчанию

а как блокировать записи тоетсь открыл форму и нужно заблакировать данные которые находятся на форме?

Последний раз редактировалось danswin; 14.01.2009 в 10:59.
danswin вне форума Ответить с цитированием
Старый 14.01.2009, 11:02   #5
danswin
Пользователь
 
Регистрация: 27.09.2007
Сообщений: 18
По умолчанию

С транзакциями разобрался)
danswin вне форума Ответить с цитированием
Старый 14.01.2009, 16:46   #6
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

Цитата:
Сообщение от danswin Посмотреть сообщение
Возможно сделать без процедур? и я тут статьи читаю в них указано что можно блакировать данные что хоть после использовния comit данные все рвоно не изчезают. Возможно ли это сдлеать?
Без процедур не обойтись, все равно придется использовать или процедуры или триггеры, POST_EVENT можно поместить в триггеры которые срабатывают после вставки, обновления или удаления данных, в этом случае запрос на обновление данных находится на стороне клиента, а из триггера посылается только уведомление, что произошло событие и нужно обновить данные на стороне клиента.
Как данные после comit исчезают? Поясните подробнее не понял вопроса...
Rik вне форума Ответить с цитированием
Старый 14.01.2009, 16:58   #7
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

Цитата:
Сообщение от danswin Посмотреть сообщение
а как блокировать записи тоетсь открыл форму и нужно заблакировать данные которые находятся на форме?
Во первых, данные можно блокировать на стороне клиента, либо на стороне сервера с помощью транзакций, например, пока пользователь совершает какие либо манипуляции с записями, у других пользователей, эти записи для изменения не доступны. Блокирование отдельных записей создаёт большую нагрузку на сервер.... Если же в определенных случаях у пользователя просто нужно отключить возможность редактирования данных на стороне клиента, тут уж сами подумайте, как временно заблокировать редактирование, вариантов много....
Rik вне форума Ответить с цитированием
Старый 14.01.2009, 20:02   #8
danswin
Пользователь
 
Регистрация: 27.09.2007
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Rik Посмотреть сообщение
Поясните подробнее не понял вопроса...
Я с этим разобрался у меня проблемы былив Транзакшене нужно было поставить ReComit и при каждом сохранение в базу дописывать не Transaction1.Comit а Transaction1.ComitRecovel так помоему )

Цитата:
Сообщение от Rik Посмотреть сообщение
тут уж сами подумайте, как временно заблокировать редактирование, вариантов много
По сути я знаю как оставить данные на форме просто суть немного в другом, Дапустим есть таблица (со стороны клиента) о человека (фио дата рожде дата регестрации и т.п.) вот нужно в реальном времени смотреть и анализировать то 2 -х а может и 10-и человек тоетсь Дабыл клие на DBGrid выводится новое окно с даннами человека и таких форм может быть много и нужно их всех анализировать (если изменять данные то там мне все понятно открытие нофой вормы сравнивается поля дапустим по ID и сохраняется там все гут) вот тут как раз мне не понятно как ты говариш мол транзакциями моно по сути можно в принцепе в теорие понимаю, но на практике тут не риализовать тут нужно что то вроде: запрос в датасет выод на дбгрид (сделать чтото вроде копировать данные из датасета в дбгрид и данные в DBEdit DBMemo ,,, Должны остаться не изменными при открытие повторной формы а получается так что открыта форма там DBEDit подлючена к датасету и она же постоянно обновляется вот как тут сделать если дата сет находится на одной форме и я ж опрашиваю много раз форму и много раз датасет обновляется
ВО )))) думай поймеш о чем я просто чуствую что немного не понимаеш о чем я ))
danswin вне форума Ответить с цитированием
Старый 17.01.2009, 12:20   #9
danswin
Пользователь
 
Регистрация: 27.09.2007
Сообщений: 18
По умолчанию

Все доброго, мне седня ночью преснилось ))) как нужно сделать чтобы показывалось то что надо ))))) Извеняюсь перед всеми мог и сам догодаться, да и может кому понадобиться тож самое А вдруг ))) вообщем вот код для того чтобы показывалось в одной ворме разные записи )
------------------------------
procedure TForm14.DBGrid1DblClick(Sender: TObject);
var b: String;
begin
Form13:=TForm13.Create(self); // Что мне нужно было сделать)
Form13.Show;
b:=IBDataSet1.FieldByName('ID').AsS tring;
Form13.IBDataSet1.SelectSQL.Clear;
Form13.IBDataSet1.SelectSQL.Add('se lect * from OS_TABLE where ID = '+b+'');
Form13.IBDataSet1.Open;

-----------------------------
Думаю комунибудь то помогу )
danswin вне форума Ответить с цитированием
Старый 17.01.2009, 18:35   #10
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

На самом деле мы это знаем, и я вам об этом и писал... В вашем случае, набор данных IBDataSet1 находится на самой форме, он создается с экземпляром формы, поэтому не зависит от других своих собратьев и вы можете изменять его как вам угодно...
Rik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по БД в Delphi и не только... 12345678 Помощь студентам 2 23.11.2008 13:46
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос про IP ЧИЖ Работа с сетью в Delphi 1 23.06.2008 13:53
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24
Транзакции + ADO azat БД в Delphi 3 14.01.2008 11:47