Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/46: Рейтинг темы: голосов - 46, средняя оценка - 4.98
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28

Firebird, как реализовать обновление таблицы у клиента при её изменении на сервере

27.05.2012, 13:07. Показов 9860. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый время суток!
Подскажите кто-нибудь работал с событиями firebird? Точнее интересует следующее:
Visual studio C# + FirebirdSql.Data.FirebirdClient.dll + FireBird
Как реализовать обновление таблицы у клиента при её изменении на сервере?

Спасибо вери мач!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.05.2012, 13:07
Ответы с готовыми решениями:

Как можно реализовать уведомление в приложение, при изменении базы данных на сервере?
Нужно чтобы при обновлении определенной таблицы в базе, приходило уведомление о новой записи. Я не знаю как и с помощью чего это возможно...

Firebird 2.5 Автоматическое обновление содержимого DataGridView при изменении данных
Всем доброго времени суток подскажите как обновлять автоматически Datagridview при добавлении, изминение и удалении данных? Работаю в...

Обновление веб страницы, при изменении на сервере (ajax)
Здравствуйте. Как реализовать механизм обновления элемента странички, без перезагрузки всей страницы, при изменении состояния объекта....

13
39 / 38 / 2
Регистрация: 03.06.2010
Сообщений: 170
27.05.2012, 13:10
Заново вытащить данные.
0
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28
27.05.2012, 13:50  [ТС]
Вопрос в том "КОГДА?". Для этого нужно знать когда на сервере была изменена таблица. Либо обновлять по таймеру.

Добавлено через 27 минут
Не совсем согласен с переименованием темы. Потому что ключевое слово СОБЫТИЯ или EVENTS, реализованные в FireBird. Может поэтому я и не мог найти поиском подобные темы
0
 Аватар для XIST
1960 / 1061 / 148
Регистрация: 01.10.2009
Сообщений: 3,589
Записей в блоге: 1
27.05.2012, 15:00
Тут и фаурберд не причем, при работе с любой базой, пока данные заново не вытащишь, изменений у клиента не получишь.
Когда? При старте апликацион...
0
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28
27.05.2012, 17:22  [ТС]
Блин, кто вообще начал про "вытащить данные"???? Ясное дело, что чтобы обновить таблицу, нужно данные загрузить. Спасибо!
Вопрос совершенно в другом!
В FireBird (в отличие, например от MySQL и некоторых других SQL) есть возможность подписаться на СОБЫТИЯ (!!!), происходящие на сервере.
Пример: несколько человек работают в с базой, кто-то добавляет запись в таблицу, остальные получают событие "таблица обновлена" и по этому событию как раз "вытаскивают" данные заново.
Естественно обновление при старте не подходит.
Есть даже код с одного сайта, но я пока с ним разобраться не могу:
C#
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
static void Main(string[] args)
{
FbConnectionStringBuilder cs = new FbConnectionStringBuilder();
 cs.DataSource = "localhost";
 cs.Database = "employee.fdb";
 cs.UserID = "SYSDBA";
 cs.Password = "masterkey";
 cs.Charset = "NONE";
 cs.Pooling = false;
 
 FbConnection connection = new FbConnection(cs.ToString());
 connection.Open();
 
FbRemoteEvent revent = new FbRemoteEvent(connection);
 revent.AddEvents(new string[] { "new_order" });
 
 // Add callback to the Firebird events
 revent.RemoteEventCounts += new FbRemoteEventEventHandler(EventCounts);
 
 // Queue events
 revent.QueueEvents();
 
 string sql = "INSERT INTO SALES (PO_NUMBER, CUST_NO, SALES_REP, ORDER_STATUS, " +
"ORDER_DATE, SHIP_DATE, DATE_NEEDED, PAID, QTY_ORDERED, TOTAL_VALUE, " +
 "DISCOUNT, ITEM_TYPE) VALUES (@po_number, 1004, 11, 'new', " +
 "'1991-03-04 00:00:00', '1991-03-05 00:00:00', NULL, 'y', 10, 5000, " +
 "0.100000001490116, 'hardware');";
 
FbCommand command = new FbCommand(sql, connection);
command.Parameters.Add("@po_number", FbDbType.Char, 8);
 
 for (int i = 360; i < 365; i++)
 {
command.Parameters[0].Value = "V91E0" + i.ToString();
 command.ExecuteNonQuery();
}
 
System.Threading.Thread.Sleep(2000);
 connection.Close();
}
 
static void EventCounts(object sender, FbRemoteEventEventArgs args)
{
 Console.WriteLine("Event {0} has {1} counts.", args.Name, args.Counts);
}
Что-то нужно написать еще на стороне самой базе. Но пока не могу найти что.
0
39 / 38 / 2
Регистрация: 03.06.2010
Сообщений: 170
27.05.2012, 17:34
Нужно триггер сделать
SQL
1
2
3
4
5
6
CREATE TRIGGER tr1 FOR employee
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
POST_EVENT 'new_employee';
END
0
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28
27.05.2012, 17:40  [ТС]
О! Вот это спасибо! Вот это по делу!
Я так понимаю в строку
C#
1
2
FbRemoteEvent revent = new FbRemoteEvent(connection);
 revent.AddEvents(new string[] { "new_order" });
Нужно вставить строку определенную POST_EVENT ('new_employee'), например.
А сможете мне объяснить зачем в приведенном мною коде везде встречаются Counts? Это какой-то счетчик? И ведь наверняка можно с помощью этого триггера передавать аргументы?
0
39 / 38 / 2
Регистрация: 03.06.2010
Сообщений: 170
27.05.2012, 17:42
EventCounts - это колбэк на событие. Т.е. этот метод будет вызываться когда событие произойдет. В нем вам и нужно вытягивать данные.
1
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28
27.05.2012, 17:44  [ТС]
Ладно, спасибо! Буду пробовать!
0
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28
30.05.2012, 22:58  [ТС]
Короче, попытка не увенчалась успехом. Добавляю в свой класс "FBDB" следующее:
C#
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
public delegate void remoteEventD();
static private FbRemoteEvent revent;
static Hashtable eventHandlers = new Hashtable();
 
static public FbConnection createConnection(String user, String password, String database)
        {
            ...
            revent = new FbRemoteEvent(connection);
            ...
        }
 
 
static public void addEventListener(string eventName, remoteEventD eventHandler)
        {
            
            revent.AddEvents(new string[] { eventName });
            eventHandlers.Add(eventName, eventHandler);
            
            revent.RemoteEventCounts += new FbRemoteEventEventHandler(EventCounts);
        }
 
        static void EventCounts(object sender, FbRemoteEventEventArgs args)
        {
            MessageBox.Show("Event "+args.Name+" has "+args.Counts+" counts." );
            remoteEventD eventHandler = (remoteEventD)eventHandlers[args.Name];
            eventHandler();
        }
В MainForm следующее:
C#
1
2
3
4
5
6
7
8
...
//после подключения
 FBDB.addEventListener("patients_changed", updateDataTable);
...
private void updateDataTable()
        {
            //что-нибудь         
        }
В базу данных:
SQL
1
2
3
4
5
6
7
CREATE TRIGGER PATIENTS_EVNT FOR PATIENTS
ACTIVE AFTER INSERT OR UPDATE OR DELETE
POSITION 0
AS
BEGIN
  POST_EVENT 'patients_changed';
END;
После добавления/изменения записи в данной таблице - ничего не происходит
0
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28
06.06.2012, 16:47  [ТС]
Неужели никто не подскажет??
0
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28
11.06.2012, 08:43  [ТС]
Неужели никто не знает?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
11.06.2012, 11:12
Посмотри это https://www.cyberforum.ru/ado-... 28363.html может пригодится чего-нибудь
0
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 28
13.06.2012, 23:27  [ТС]
Спасибо, но похоже это не то. Там обновление по таймеру.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.06.2012, 23:27
Помогаю со студенческими работами здесь

Как можно реализовать без setInterval обновление html у пользователя при изменении значения в бд?
Здравствуйте. Подскажите, пожалуйста, как можно грамотно реализовать без setInterval обновление html у пользователя при изменении значения...

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

Запрос на обновление одной таблицы при изменении другой
Уважаемые, доброго времени суток. Имеется субд парадокс и 3 таблицы: накладная, товары в накладной и товары на складе. Нужно чтобы при...

Как отредактировать системные файлы на сервере при любом изменении txt файла на сайте?
У меня есть такая задача. На сайте в корне лежит txt файл fail.txt, в который иногда добавляется информация php скриптами. Надо, чтобы при...

Ошибка при изменении записи в Firebird
Работаю в C# с базой Firebird. Есть таблица с полем типа varchar, кодировкой Win1251 и установленной длинной 2000. При изменении именно в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru