Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/10: Рейтинг темы: голосов - 10, средняя оценка - 4.50
Kamero
12 / 10 / 7
Регистрация: 08.02.2013
Сообщений: 254
1

Локальная сеть

10.06.2013, 03:59. Просмотров 1767. Ответов 12
Метки нет (Все метки)

В общем работаю с БД FireBird и Delphi 2010. И тут встал вопрос как сделать приложение по локальной сети?
Ну вообще можно к ней подключиться и тд и тп. Но обновление данных не происходит.
То есть если с 1 компьютера добавить запись в БД, то остальные её не увидят пока сам не добавит запись тем самым обновив данные. Ставить кнопки с обновлением не логично и хотелось бы чтобы сервер(БД) понимал что при каком либо действии ему надо обновить данные у всех пользователей. В роли Сервера у меня выступает БД. Подключение происходит путём IP:Путь к бд(192.168.2.8: D:\Project\BD.FDB).
Читал в интернете сказали что нужно через IBEvent работать, но ни чего полезного в инете по нему не нашёл. Может кто работал и может подсказать что нужно дописать и где. Какие процедуры к нему нужны?

В общем подскажите кто то бо диплом скоро защищать)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 03:59
Ответы с готовыми решениями:

Локальная сеть
Как в Delphi работать с локальной сетью, например чтобы передать картинку из...

Локальная сеть
Кто просвятит новичка и дохотчиво прочтет лекцию ? Вопрос в следующем на...

локальная сеть и интернет
Я подключен к районной локальной сети и имею выход в интернет через VPN. В...

Delphi и локальная сеть
Мне необходимо разработать программу, через которую я могу управлять процессами...

Локальная сеть, программа клиент-сервер
есть два компьютера связаны сетью вай фай.Хочу сделать программу клиент-сервер...

12
Dr_Quake
Заблокирован
10.06.2013, 04:37 2
Ты через что подключаешься? Компоненты? BDE? В Query и почти во всех производных надо делать Query.Commit; после апдейта - это дефолт такой. Да и не только, впрочем, это дефолт и файрбёрда. Ну а если уж не дай б-г через dbnavigator - так там вообще до хрена надо ручками коммитить...

И это таки в БД, а не в сети надо писать было.
0
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
10.06.2013, 09:01 3
Цитата Сообщение от Kamero Посмотреть сообщение
Ставить кнопки с обновлением не логично
В подавляющем большинстве известных бизнес-приложений это вполне логично и именно так и сделано, а у тебя, видите ли, не логично).. Где логика ?

Цитата Сообщение от Kamero Посмотреть сообщение
чтобы сервер(БД) понимал что при каком либо действии ему надо обновить данные у всех пользователей
Он это и делает на своей стороне.
А то что клиентские приложения молчат и не запрашивают на свои стороны самые свежие актуальные для каждого из них данные - это не его забота. Сервер-то работатет по запросам клиентов)
Нет запроса - нет данных. Есть запрос - получите данные.
0
Kamero
12 / 10 / 7
Регистрация: 08.02.2013
Сообщений: 254
11.06.2013, 01:27  [ТС] 4
Цитата Сообщение от Dr_Quake Посмотреть сообщение
Ты через что подключаешься? Компоненты? BDE? В Query и почти во всех производных надо делать Query.Commit; после апдейта - это дефолт такой. Да и не только, впрочем, это дефолт и файрбёрда. Ну а если уж не дай б-г через dbnavigator - так там вообще до хрена надо ручками коммитить...

И это таки в БД, а не в сети надо писать было.
Да у меня на всех стоит запросах стоит Query.Commit;. Подключаюсь как обычно IBDatabase, IBQury и каждому квери свою IBTransaction.
Так ДБНавигатор вроде не работает с Query, его же только к Тable можно прицепить. Ну в общем у меня все на запросах.

Я знаю что надо в БД хранимые процедуры написать на Update но я плохо знаю ФБ. А потом их через IBEvent регистрировать или что то там. Не помню в общем то что. Мне код какой нибудь.
0
Dr_Quake
Заблокирован
11.06.2013, 01:30 5
Дёргай руками просто раз в n минут, а на деле для этого делается таблица на сервере в которой единственная переменная для этого - updatetime. И её постоянно проверяют клиенты.
0
Kamero
12 / 10 / 7
Регистрация: 08.02.2013
Сообщений: 254
11.06.2013, 01:37  [ТС] 6
Цитата Сообщение от mss Посмотреть сообщение
В подавляющем большинстве известных бизнес-приложений это вполне логично и именно так и сделано, а у тебя, видите ли, не логично).. Где логика ?



Он это и делает на своей стороне.
А то что клиентские приложения молчат и не запрашивают на свои стороны самые свежие актуальные для каждого из них данные - это не его забота. Сервер-то работатет по запросам клиентов)
Нет запроса - нет данных. Есть запрос - получите данные.
В подавляющем) А я хочу научиться делать так. И потом там не написано ОБНОВИТЬ. Просто в коде например того же редактирования или удаления дописано переподключение и все.

Я знаю как работает бд)) Вы лучше помогите мне как можно обойтись без этих кнопок. Очень хочется на это посмотреть как это работает.

Добавлено через 2 минуты
Пример можешь какой то показать?)) Кусок кода или статью в инете. Ну очень надо для защиты диплома.

Добавлено через 14 секунд
А защита не загорами....
0
xNeKiToSx
330 / 83 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
11.06.2013, 04:05 7
а сервер не может держать параллельно соединения на сокетах, с помощью которых можно оповещать клиентов о неактуальности их данных?
0
Dr_Quake
Заблокирован
11.06.2013, 04:18 8
Может, ЗАЧЕМ??? Я же сказал про ОДНУ строку в БД в которой будешь хранить время последнего обновления. А их ещё можно несколько делать и по частям грузить, всё от твоего и только твоего кода зависит и взаимодействия с БД.
0
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
11.06.2013, 08:46 9
Цитата Сообщение от Kamero Посмотреть сообщение
я плохо знаю ФБ
Идешь на ibase.ru и изучаешь соотв.материалы - будешь знать хорошо.
0
xNeKiToSx
330 / 83 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
11.06.2013, 17:30 10
Dr_Quake, да как зачем? держать таблицу, лишние запросы, нагрузка и отсутствие гибкости с БД. Постоянно дергать БД чтобы узнать актуальность не лучший вариант. А вариант по сокетам и реализовывается легко, расширяем, гибок, да много плюсов)
0
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
11.06.2013, 19:11 11
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
А вариант по сокетам
Бесполезная и бездумная идея.
Фактическое изменение данных происходит при успешном коммите транзакции.
Ядро ФБ, насколько мне известно, кроме post_event (срабатывающего как раз не раньше чем после успешного коммита) не предоставляет документированного API для организации альтернативного оповещения клиентов о событиях подтверждения транзакций.
Оповещение же своими силами средствами UDF лишено смысла, так как они работают ДО коммитов и роллбэков, т.е. в контекстах стартованных (но еще не подтвержденных и не откаченных) транзакций.

Добавлено через 2 минуты
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
Постоянно дергать БД чтобы узнать актуальность
А не надо постоянно "дергать".
Дергать нужно тогда, когда в результате попытки подтверждения ТА клиент получил исключение, явно указывающее на конфликт затребованных им изменений с изменениями, произошедшими в других ТА.
0
Kamero
12 / 10 / 7
Регистрация: 08.02.2013
Сообщений: 254
12.06.2013, 04:15  [ТС] 12
Вот мои запросы. Я писал их как ты и говоришь. Правда я там ещё использовал и виртуальные таблицы но они то же с Коммит и ролбеком.
Вот как легче всего сделать сеть??? Потому что если ставить сокеты то это геморою больше будет и прийдётся все переписывать как я понимаю.


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm6.Button1Click(Sender: TObject);
begin
  if Trim(Edit1.Text) = '' then
    Exit;
  DM.Q1.Close;
  if not DM.Q1.Transaction.Active then
    DM.Q1.Transaction.StartTransaction;
  try
    DM.Q1.SQL.Clear;
    DM.Q1.SQL.Add('Insert into RAION (NAME_RAION) VALUES (:pNAME_RAION);');
    DM.Q1.Prepare;
    DM.Q1.parambyname('pNAME_RAION').value := Edit1.Text;
    DM.Q1.ExecSQL;
    DM.Q1.Transaction.Commit;
    Application.MessageBox(PWideChar('Район "' + Edit1.Text + '" добавлен!'),
      'Добавление выполнено');
    Edit1.Text := '';
  except
    DM.Q1.Transaction.Rollback;
    Application.MessageBox('Ошибка при добавлении района!', 'Ошибка');
  end;
  DM.QR.Transaction.Active := false;
  DM.QR.Open;
end;
1
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
12.06.2013, 10:54 13
Цитата Сообщение от Kamero Посмотреть сообщение
сли ставить сокеты то это геморою больше будет и прийдётся все переписывать как я понимаю
Переписывать - да, придется изрядно.
Но это уже бужет концептуально иная система - 3-хзвенное распределенное СУБД-приложение состоящее из:
1. "Тонкий" клиент.
2. Сервер приложений (appserver), проксирующий взаимодействие между тонким клиентом и SQL-сервером и сосредотачивающий львиную долю бизнес-логики, той что с наст.момент сосредоточена в толстом клиенте.
3. Собственно SQL СУБД-сервер.

Именно на стороне звена 2 - аппсервера - как раз и можно при необходимости реализовать подсистему нотификаций клиентов, хоть на сокетах хоть на шмокетах)
0
12.06.2013, 10:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 10:54

Локальная директория
Здрасте, мне нужна помощь. Моя программа соединяется по FTP с сервером. Мне...

Локальная связь
Всем привет! В общем такая проблема: всё та же связка TClientSocket и...

Интернет сеть
Здраствуйте, в общем такой вот вопрос. Можно ли обеспечить связь нескольких...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru