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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 08:48   #1
Alkatras
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 24
По умолчанию Работа с БД по сети

Доброго времени суток коллеги.
Помогите разобраться с такой проблемой: с 2х машин подключался к одной БД. Параллельно вносил изменения в таблицы, при этом отображались изменения сделаные только на этой машине. Изменения происходят посредством SQL запроса. Как сделать чтобы после каждого действия (удаление записи, изменение, добавление), данные сразу сохранялись в таблицы и отображались на 2й машине? Заранее спасибо...
Alkatras вне форума Ответить с цитированием
Старый 27.05.2010, 09:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так стоп...
Давай разделим понятия "данные сразу сохранялись в таблицы" и "отображались на 2й машине".
Насчет первого ну смотря чем ты пользуешь, если есть транзакция то команда COMMIT сбросит ее на диск.
Насчет второго, ну прикрепи к прокграмме механизм передачи сообщений через сокеты, и при фиксировании транзакции на одном клиенте всем остальным посылай сообщение переобновится, и пусть перечитываю БД (Или всем пошли строку, которую ты закоммитил в БД, тогда не придется напрягать сервер.)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2010, 12:49   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вопрос уже поднимался не раз. Самое простое решение: периодически перезапрашивать данные из СУБД. Так же некоторые СУБД поддерживают механизм событий и можно сделать, что сама СУБД будет всем рассылать информацию об изменениях.
Самый правильный вариант в общем случае: сделать кнопочку "обновить" по которой перезапрашивать данные из БД. Представьте, что один пользователь активно добавляет названия улиц в справочник. А в это же время другой пользователь пытается добавить нового клиента и не может добавить его адрес, т.к. никак не попадет в нужную улицу (строки же скачут из-за появления новых записей).
pu4koff вне форума Ответить с цитированием
Старый 27.05.2010, 12:53   #4
Alkatras
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Самый правильный вариант в общем случае: сделать кнопочку "обновить" по которой перезапрашивать данные из БД.
Перезапрос закодил перед каждым событием путем (SELECT * FROM Table), к сожалению не помогает(
Может подскажите альтернативные пути решения, или кусок кода на перезапрос?
Alkatras вне форума Ответить с цитированием
Старый 27.05.2010, 13:25   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
перед каждым событием
Этого не достаточно. Это так подвесит работу твоей проги что ей никто пользоваться не захочет.
Яж тее сказал - перешли всем пользователям сообщение, например через IDUDP компонент методом Broadcast, А в этом сообщении строку изменений.
Цитата:
т.к. никак не попадет в нужную улицу
Этого можно избежать если добавлять в конец таблицы - тут уж автору стоит об том позаботится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2010, 19:47   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Этого можно избежать если добавлять в конец таблицы - тут уж автору стоит об том позаботится.
1. Вряд ли это получится, т.к. данные обычно показывают упорядоченно по какому-то полю. Странно будет выглядеть табличка, в которой 100 записей в начале упорядочены, а в конце идут в разнобой;
2. В этом случае "скакать" табличка будет при активном удалении или изменении.
3. Редко кому это нужно в реальной жизни. Если кому-то нужно видеть данные из БД в реальном времени, то вряд ли таблица - удачный вариант представления информации. В общем, этим как правило решается не та проблема и не теми средствами. Это скорее латание дыр проекттирования программы или излишек, который никому не нужен.
pu4koff вне форума Ответить с цитированием
Старый 28.05.2010, 07:08   #7
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
....
3. Редко кому это нужно в реальной жизни. Если кому-то нужно видеть данные из БД в реальном времени, то вряд ли таблица - удачный вариант представления информации. В общем, этим как правило решается не та проблема и не теми средствами. Это скорее латание дыр проекттирования программы или излишек, который никому не нужен.
Золотые слова!

Я не понимаю, зачем пользователю на втором компьютере во время редактирования тупо пялиться на таблицу и смотреть изменились где-то записи или нет. Он редактирует конкретную запись. Ее и надо проверять (если это действительно надо) перед тем как сохранить изменения и решать, сохранять их или нет. Что делается в это время с остальными записями пользователя волновать не должно.

Закончил редактирование - обновил таблицу. Работаешь дальше с обновленным вариантом таблицы. Выбираешь другую запись для редактирования.

PS: Если бы мне нужно было отслеживать измененные записи за определенный период времени, я бы ввел в таблицу поле типа TDateTime в котором автоматически проставлял бы время изменения записи, а потом делал бы выборку по этому полю.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа программы в сети нью Фриланс 1 09.02.2010 02:09
Администрирование сети. Работа со свичами. Stilet Общие вопросы по программированию, компьютерный форум 11 09.04.2009 08:03
Работа программы в сети Irsis Microsoft Office Excel 4 21.10.2008 08:38
Работа пользователей в сети Mike_B Софт 1 17.08.2007 16:34