|
|
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Ситуация такая. Есть приложение, которое работает с БД типа dBASE через BDE (средствами Table, Query, DataSource, DBGrid). Никаких серверных технологий не применяется. Работа с удаленной или локальной БД происходит просто через смену алиаса. Так вот, если 2 клиента работают с данными со своих терминалов, а БД находится "на 3-й машине", то проблем с совместным доступом не наблюдается. Но стоит перенести БД на одну из машин клиента, то при совместном доступе , редактированные данные сохраняются только у клиента с локальной базой. Тот кто работает с удаленной базой работает с кэшированными данными (хотя кэширование я не включаю) и не одна строка изменений реально в базу не записывается (напомню при совместном доступе). Есть ли какое-то решение такой ситуации, не прибегая к коренной смене кода, т.е. не переходя на другую технологию ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 14:02 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
не могу утверждать =), но может проканает: а) все изменения вносить руками, i.e.: программно генерить query и его исполнить. б) попробовать пошагово посмотреть весь путь записи изменений в бд: может быть, что локальный клиент lock'ит бд, и сетевой просто натыкается на исключение, к-рое прога обрабатывает, не ставя тебе в известность об оном. в) ну и на всякий случай: alias какой? "\\%servername%\%path%" или "%networkdrive%\%path%"??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 14:19 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
а) alias у локального "d:\test" у удаленного " \\user1\d\test" б) Мне кажется, что BDE у клиента, работающего в локале, видит что база локальная и не беспокоется за остальные соединения. Поэтому при сохранении и пишет только свои данные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 15:00 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
а, таки, если ч/з breakpoint'ы глфнуть на работу удаленного клиента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 15:06 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Может стоит попробовать БД Paradox, в нем реализованна совместная работа по сети, для BDE - это наиболее удобный формат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 15:18 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Paradox это хорошо, но сейчас этот вариант не расматривается. Сижу на ПК "локального" клиента и смотрю чего делает удаленный. Запускаю приложение и ничего не делаю, кроме того, что открыл тестируемую таблицу. Ни одного изменения, что сделал "удаленный" я не вижу (не в приложении, не через DataBase Desktop). Однако все изменения удаленного клиента я вижу через real-time просмотрщик WinDBFview. Дальше развитие событий следующе: - если я выхожу, не делая Post, то все изменения удаленного клиента будут реалбно внесены в таблицу. - если я делаю Post, то в таблицу будут добавлены только мои записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:16 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
мне кажется (и только кажется =) ), что тоут все аналогично vc++ ,net: данные сперва вносятся в отсоединенные данные (читай, кэшированные), а потом уже в бд. потому-то все изменения удаленного клиента я вижу через real-time просмотрщик WinDBFview ибо это изменения в кэшированных данных. плз, скажи, что делает post? ибо я давно не сижу в bcb. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:29 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Своим Post-ом (сохранением данных после редактирования или добавления записи) я перебиваю всю работу удаленного клиента. Потому как мне кажется мои новые данные "матрицей" накладываются на таблицу, где новых записей от удаленного клиента нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:40 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
погодь, локальный и удаленный клиенты создают свои копии connect'а к бд, так? не может ли быть так, что локальный клиент lock'ит бд, тем самым просто не давая удаленному что бы то ни было записать в бд? т.е., реализует транзакцию. =/// ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:56 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
т.е., что если перед post'ом локальным вызывать принудительно post на удаленном клиенте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:57 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
13th_apostleпогодь, локальный и удаленный клиенты создают свои копии connect'а к бд, так? не может ли быть так, что локальный клиент lock'ит бд, тем самым просто не давая удаленному что бы то ни было записать в бд? т.е., реализует транзакцию. =/// в какой-то степени я с этим согласен 13th_apostleт.е., что если перед post'ом локальным вызывать принудительно post на удаленном клиенте? а это мысль, только как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 19:23 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
мне кажется, что у тебя connection открыт на протяжении всей работы проги, так? если да, то в этом и проблема, imho: попробуй открывать connection только при окончательной записи измененных кэшированных данных в бд. и делать это транзакциями: тогда, когда удаленный клиент откроет соединение, он сам залочит бд. что касается принудительного вызова post'а... не знаю... =( /*n.b.: все, что я грю, может оказаться чистым флеймом; мне это не проверить сейчас, и я грю наобум =)*/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:45 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
13th_apostleмне кажется, что у тебя connection открыт на протяжении всей работы проги, так? Да конечно. Попробую твой совет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 13:31 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Нашел одну статейку правда для БД Paradox, а не dBASE: Использование баз данных Paradox в локальной сети "Knowledge itself is power" F.Bacon Использование баз данных Paradox в локальной сети Раздел Hello, World!Автор Егоров Алексей, дата публикации 30 апреля 2002г. Хотелось бы поделиться опытом использования баз данных Paradox в локальной сети. По большому счету, принципы распределенного и локального доступа к таблицам Paradox ничем не отличаются. Исключения составляют некоторые правила и рекомендации, которые изложены ниже... В последнее время в сторону BDE раздается много замечаний и нареканий по поводу ограниченности и ненадежности при организации сетевого доступа к файлам БД. Существует множество решений и хитростей, призваных облегчить жизнь разработчику, работающему с BDE. Как показывает опыт, такие эксперименты чаще всего приводят к частичной и полной потере данных в файловых таблицах... Отсюда правило первое : если вы хотите использовать Paradox в сети, установите BDE в полном объеме на каждой клиентской машине, включая ту, где находятся файлы базы данных. Обязательны следующие установки в конфигурации на каждой машине : Это предотвратит Sharing Violation : BDE->Configuration->System->Init : LOCAL SHARE = TRUE BDE->{Самое важное} Это предотвратит неразбериху в местоположении данных. BDE не работает с базами данных напрямую, как например \\head\C\Database. Диск с данными необходимо подключить как сетевой. Еще лучше, если буквы сетевого диска будут одинаковыми на всех машинах... BDE->Configuration->Drivers->Native->Paradox : NETDIR = F:\Databse, BDE->где F = \\head\c\ Возникает резонный вопрос : а что если баз данных несколько? Тогда в качестве NETDIR необходимо указать корневой каталог, в нашем случае F. Если вы работаете с файловыми базами данных, то вам необходимо воспринимать BDE как некоторый сервис, как скажем, interbase. Сравнение конечно не из лучших, однако нормально работающий BDE - залог сохранности и надежности ваших данных. К вопросу о Refresh. Если вы работаете локально, то никаких проблем с обновлением набора данных у вас не возникает. При изменении данных, вы сразу видите результат на экране. В сети ситуация несколько иная : пользователи на других компьютерах не видят тех изменений, которые происходят без их участия. Конечно, ничто не мешает нам через определенные интервалы времени обновлять элементы управления с помощью Refresh, однако не очень приятно наблюдать за тем, как ваша программа превращается в новогоднюю елку, постоянно мерцая элементами управления. Проблема решается с помощью BDE Callback Functions : // Объявления... Код: plaintext 1. 2. 3. 4. 5. 6. // Реализация... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. // На событие OnCreate в Data Module подключаем наши функции к TTable... Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Сохранность данных в сети. Для того чтобы быть уверенным в сохранности данных, необходимо на событие AfterPost Компонета TTable назначить следующее : dbiSaveChanges(TTable(DataSet).Handle); Блокировки. Существует два подхода к разделенному изменению данных : оптимистический и писсимистический. В первом случае речь идет о клиент-сервере и транзакциях. Иначе говоря, сколько угодно пользователей могут одновременно изменять одни и те же данные. В нашем случае такой возможности просто не существует. Необходимо самим предусмотреть ситуацию, когда пользователи, например, попытаются одновременно редактировать одну и ту же запись. Ничего страшного, кроме сообщения "record locked by another user", не произойдет. Однако желательно самим обработать данную ситуацию. Вот пример функции, которая проверяет, заблокирована запись или нет : Код: plaintext 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. использования http://www.priv.bus.at/graf/quell/delphiarchives/bdehlp32/contentpage.htm Егоров Алексей апрель 2002г. © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. ========================================================== Описано не плохо только я не силен в BCB, а в Delphi ещё хуже. Может мне кто-нибудь переложить коды этих ф-й и процедур на Builder? Буду очень признателен! ========================================================== ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 15:33 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Решился перейти на Paradox? Наиболее критичны два первых совета (они есть в любом приличном руководстве по local BDE), которые про local share и net dir, остальное - только улучшения, в принципе будет работать и так. Для dBase - это все не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 08:24 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
_SaniaРешился перейти на Paradox? Наиболее критичны два первых совета (они есть в любом приличном руководстве по local BDE), которые про local share и net dir, остальное - только улучшения, в принципе будет работать и так. Для dBase - это все не работает. Ой не знаю. Проблема скорее всего не решится, если база будет размещена у одного из клиентов и к ней будет осуществляться совместный доступ. Право главного или "последнего" остается у клиента у которого непосредственно расположены базы. Жалко нет денег на отдельную машину... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 10:39 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Не совсем так, BDE пишет в свой спец. файл - PDOXUSRS.NET информацию о доступе клиентов и все нормальные клиенты BDE пользуются этой информацией и не мешают друг-другу. Для реализации этого и служит параметр net dir - что бы все клиенты использовали один файл доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 11:18 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Но NET DIR нет в dBASE, эта фишка только в PARADOX ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 11:39 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
_Sania Решился перейти на Paradox? Наиболее критичны два первых совета (они есть в любом приличном руководстве по local BDE), которые про local share и net dir, остальное - только улучшения, в принципе будет работать и так. Для dBase - это все не работает. dBase - не сетевая БД, это вобще не БД, а файлы ОС специального формата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 14:28 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
[/quot] dBase - не сетевая БД, это вобще не БД, а файлы ОС специального формата.[/quot] Ха-ха-ха ... Раньше я использовал технологию DataBase-Table-DataSource-DBGrid , а сейчас Session-DataBase-Table-DataSource-DBGrid . После ручной настройки Session всё заработало, как и положено. Есть только одна проблема это autorefresh данных у других клиентов не происходит. Приходится по таймеру обновлять таблицу. Может есть другой способ "обновить" данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 17:18 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
с локальной (где база сидит) посылай месагу остальным ;) вот и рефрешится будеть .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 17:31 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
Нашел спеца по месегам. Ты имеешь ввиду что-то типа авторPostMessage(Handle, WM_UPDATETABLE, 0, 0) возможно я и ошибаюсь. Короче как это сделать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 17:54 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
имею на виду компоненты NMMSGServ и NMMsg первый сервер принятия мессаг и второе клиент для принятия ;) но можно еще и по другим способам передавать команду .. тебе же намек там (даже можно один символ ;)) передавать надо .. но если в будушем намерен передавать не мало команд .. желательно юзай эти .. на них в хелпе и экз. примеры есть .. (но свои неудобства будуть это точно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 07:53 |
|
||
|
BDE и локальное размещение БД
|
|||
|---|---|---|---|
|
#18+
1. Обновление данных я сделал по таймеру - так проще: Код: plaintext LOCAL SHARE=TRUE Все кто говорили об этом были правы! Не нужно добавлять к проекту ни TDataBase ни TSession - эти проблемы решает BDE. А вот LOCAL SHARE=TRUE действительно снимает все вопросы при совместном доступе к БД. Тема закрыта! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 12:12 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2033788]: |
0ms |
get settings: |
10ms |
get forum list: |
23ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
91ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 456ms |

| 0 / 0 |
