Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Синхронизация локальных БД / 20 сообщений из 20, страница 1 из 1
24.02.2006, 13:21
    #33563699
Ust-Isha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Я правдо только начинаю разбираться с FoxPro так что не посчитайте мой вопрос очень тупым.
Как в Fox'е можно синхронизировать две копии одной БД т.е. мы работаем с локальной БД, нам приносят эту же базу (допустим на сменном ностителе) и нам нужно их синхронизовать. Для объединения компов сеть нет возможности из-за неразвитости средств коммуникации.
Заранее спасибо.
...
Рейтинг: 0 / 0
24.02.2006, 18:07
    #33564115
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Такая операция называется "репликация".

В общем случае - это достаточно сложный и не однозначный процесс. Сделай поиск по этому форуму по ключевому слову "репликация".
...
Рейтинг: 0 / 0
02.03.2006, 15:55
    #33577450
M0r0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Не так все просто тут. Тема конечно обсуждалась, но не столь подробна, как хотелось бы. Как минимум надо будет заводить составной ключ для идентификации записи в пределах всех баз данных. У меня напрмер это dbid и recid, еще генерация по поддиапазонам для значений, которые должны быть уникальны в таблицах (например коды) и прочее, прочее. Как было сказано проблема нетривиальная.
...
Рейтинг: 0 / 0
03.03.2006, 10:06
    #33578968
MaestroEv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
О репликации... У меня во всех офисах можно исправлять все документы и чужие и свои в любых днях - открытых, закрытых и.т.п. и справочники и все все... и все это отражается во всех других офисах... Соответственно... задачка еще та...
Мне необходимо пообщаться с единомышленниками... ибо есть в такой технологии много вопросов... Пока запрещал половину... было намного легче ...
Есть кто? (VFP 9.0)
...
Рейтинг: 0 / 0
03.03.2006, 10:40
    #33579118
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
MaestroEvО репликации... У меня во всех офисах можно исправлять все документы и чужие и свои в любых днях - открытых, закрытых и.т.п. и справочники и все все... и все это отражается во всех других офисах... Соответственно... задачка еще та...
Мне необходимо пообщаться с единомышленниками... ибо есть в такой технологии много вопросов... Пока запрещал половину... было намного легче ...
Есть кто? (VFP 9.0)
Мы эту тему тут обсуждали, делились опытом. В частности, я приводил схематичное описание алгоритма одного моего проекта по отгрузке с разных складов компании продукции... Мною применялась простая технология на основе Web Services, данные хранятся в одном месте, но в зависимости от того, откуда идет отгрузка - данные туда передаются с помощью "демонов" маленькой программы на сервере, которая отвечает за обмен с центральной базой, передавая изменения (replication) в обе стороны... В принципе ничего сложного, просто нужна усидчивость и аккуратность Моя проблема усугублялась тем, что основная программа все еще на FPW2.6 а там плоские таблицы, в которых нельзя включить транзакции (но удалось выкрутиться) и система успешно пережила несколько сбоев электроэнергии и падения кластера без восстановления резервных копий...

Сейчас подобная функция появилась и в MS SQL Server 2005 - мгновенная replication - то есть изменения можно передавать сразу после совершения изменения, но на практике пока не пробовал (насколько это быстро и надежно) - надо закончить пару-тройку других проектов (семью надо чем-то кормить)...

Так что есть смысл поднять по поиску архив и может быть там для тебя будут интересные идеи...
...
Рейтинг: 0 / 0
03.03.2006, 16:07
    #33580689
M0r0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
2 Sergey Ch

Т.е. у вас была сетка, как я понял. А если сети нет и базы находяться например одна в офисе, а другая на буке или нескольких буках. И там и там вводят новые записи и редактируют, и где-то в конце недели все это нужно синхронизировать.
...
Рейтинг: 0 / 0
03.03.2006, 16:15
    #33580727
M0r0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Сам решал эту задачку. Пришлось вводить специальный журнал изменений, составные ключи в синхронизируемые таблицы, триггеры, которые регистрировали события, разводить по диапазонам уже существующие ключи в таблицах, и еще на Basic'е писать проги по экспорту и импорту (тогда он мне ближе был, т.к. о существовании Fox Pro только узнал, что есть такое на свете )) ) Кстати обмен производится посредством файлов в XML формате. Это вкрадце. Зато вроде пашет на локальных машинах, но что будет, если электричество отключат не знаю ))) Пока это мой пилотный проект, правда времени много потратил, зато Fox изучил более менее.
...
Рейтинг: 0 / 0
03.03.2006, 16:22
    #33580763
M0r0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Да и еще. Дали эту задачку, а при этом, как уже я сказал выше, в Fox Pro вообще не рубил. Во мытарства-то были из одной крайности в другую бросало. Шышек набил 8))) При этом, чтобы можно было бы в короткие сроки любую базу изменить под задачу репликации, т.е. нажал пару кнопок и вуаля, не изменяя кода уже существующих клиентов на Fox Pro (правда это не получилось, небольшие изменения все же нужны). Вот так люди и учатся, прямо в окопах.
...
Рейтинг: 0 / 0
03.03.2006, 16:33
    #33580810
M0r0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Извините, что наплодил тут ответов. Просто еще одна мысль пришла в голову. Суперски было бы, если был бы драйвер-фильтр на файловую систему. Его настраиваешь на определенный каталог, в котором находяться файлы, за которыми необходимо следить и им же перехватываешь обращения к ним, анализируешь и записываешь в какой-нибудь журнал. После этого запускаешь другое приложение оно смотрит этот журнал, и выуживает информацию из таблиц. Далее полученный файл выгрузки передается на другую машину с такой же базой данных. На этот раз уже запускаем другую прогу и загружаем данные. Что-то типа этого.

Примечание:
Так, наример, сделаны многие шифраторы данных на лету и многие другие фишки.
...
Рейтинг: 0 / 0
05.03.2006, 20:04
    #33582647
AbelKasum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
M0r0...Извините, что наплодил тут ответов. Просто еще одна мысль пришла в голову. Суперски было бы, если был бы драйвер-фильтр на файловую систему. ...

Слушай а у меня такая проблема, может подскажешь: нужно при изменении в БД, под foxpro 8, узнать какие изменения были сделаны. Тобишь иметь журнал, а еще точнее два журнала: 1-й до изменения 2-й после. А еще лучше журнал транзакций сделанных при изменении в БД.

Кааааак этоооо сделаааать?!
...
Рейтинг: 0 / 0
05.03.2006, 20:05
    #33582650
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Hi M0r0!

> если был бы драйвер-фильтр на файловую систему.

Это как раз не очень сложно - гораздо сложнее понять что же за изменение то
произошло - т.е. этот "фильтр" по сути должен содержать ядро СУБД - чтобы
для него происходящие в таблице изменения были не просто "заменой байтиков",
а реально "логическими единицами работы" - т.е. он должен из потока выделять
"записи", "поля" и т.п.
А с учётом того что обычно изменяется не 1 файл а несколько (не только
dbf+cdx - гораздо сложнее когда идёт согласованное изменение нескольких
таблиц) - и при этом отследить начало/завершение транзакции извне фокса (или
той программы/среды которая работает с данными)... В общем я очень
сомневаюсь что из этого может выйти хоть какой-то толк... Даже просто
"добавить триггера в базу не меняя саму программу" и то видимо будет
недостаточно для полноценной реализации системы репликации на фоксе.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
05.03.2006, 20:08
    #33582656
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
M0r0 Т.е. у вас была сетка, как я понял...
Не совсем - все склады сидят на выделенке, а обмен через Интернет посредством XML файлов (что замеляет работу, но ускоряет процесс разработки)...
...
Рейтинг: 0 / 0
05.03.2006, 20:12
    #33582658
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
AbelKasum...Кааааак этоооо сделаааать?!
Для богатых есть коммерческий продукт - там, нсколько я помню - указывается директорий где dbf файлы или имя контейнера - и вперед (программа сама меняет структуру файлов, чтобы поддерживать синхронизацию), но он стоит денег - что-то около 2000USD и не все в нем гладко как обещают разработчики... После изучения данного вопроса на UT я принял решение писать все самому, хотя на эту программу мне деньги бы выделили...
...
Рейтинг: 0 / 0
05.03.2006, 20:35
    #33582666
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Hi Sergey!

Эту программу (если ты про FoxAudit) стоит хотя-бы посмотреть начинающим
заниматься аудитом (или репликацией на основе ведения транзакционного
лога) - благо у неё есть демо-версия (по крайней мере когда-то была :) )

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.03.2006, 16:02
    #33584603
M0r0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Igor Korolyov
Даже просто "добавить триггера в базу не меняя саму программу" и то видимо будет недостаточно для полноценной реализации системы репликации на фоксе.

Да вы правы, простым добавлением триггеров проблему репликации не решить, без изменения программы. Но для простой базы данных, как на опытном образце, можно попробовать. Если более подробно, то у меня это реализовано так.
1. Исходные данные. Есть БД (в данном случае она небольшая, т.е. несколько таблиц), назовем ее к примеру "Склад", часть информации она берет из справочников (уже др. базы, расположенные отдельно), которые централизованно изменяються. Таким образом надо отслеживать изменения в БД "Склад", потому что она расположена на различных точках города, с которыми нет посути никаких коммуникационных связей (модем, выделенка, и т.д.), т.е. остается только дискета, CD-RW или flash. Как следствие возникает проблема синхронизации всех этих разрозненных баз данных.

2. Решение проблемы. Берется БД "Склад" (содержащая самые последние актуальные данные) и модифицируется следующим образом. У меня модификация производиться утилитой, которая эту операцию может провести для любой БД. Есть правда нюансы: в БД не должно быть триггеров, т.к. они будут переписаны (это конечно можно подправить), в синхронизируемых таблицах не должно быть полей dbid и recid. Во время работы утилиты мы выбираем таблицы, которые в будущем будут синхронизироваться, в них программа добавляет поля dbid и recid и инициализирует их значениями.

---[др.поля таблицы]---[dbid]---[recid]---
--- ... ... ... ... ... ... ---[ 0 ]---[ 1 ]---
--- ... ... ... ... ... ... ---[ 0 ]---[ 2 ]---
...
--- ... ... ... ... ... ... ---[ 0 ]---[2567]---

Далее необходимо заполнить таблицу tcenters.
[centerid] - идентификатор БД
[name] - просто поясняющая информация о БД
[visible] - признак, что БД явл. текущей
[maincenter] - признак, что БД явл. главной
[source] - вспомогательное поле
[npackage] - номер сформированного пакета, если БД текущая, для остальных номер полученного пакета.
[lolimit] - нижняя граница диапазона
[hilimit] - верхняя граница диапазона

В моей схеме обмена все осуществляется через центральную БД и связей УБД - УБД нет. В итоге таблица должна принять примерно следующий вид.

[centerid]-[name]-[visible]-[maincenter]-[source]-[npackage]-[ lolimit ]-[ hilimit ]
1 ЦБД .T. .T. .T. 0 1 1000000
2 УБД1 .F. .F. .T. 0 1000000 2000000
3 УБД2 .F. .F. .T. 0 2000000 3000000

Таким образом, наша БД готова для репликации, из таблицы tcenters следует, что она центральная и текущая (т.е. записи в журнале изменений будут формироваться исходя из того, что идентификатор БД=1)

Далее идет этап создания реплик БД, а именно УБД. В нашем случае их всего 2, т.к. мы завели в таблице tcenters ЦБД всего две записи для УБД. Создаються они простым копированием и модификацией таблицы tcenters. Так для УБД1 она выглядит так.

[centerid]-[name]-[visible]-[maincenter]-[source]-[npackage]-[ lolimit ]-[ hilimit ]
1 ЦБД .F. .T. .T. 0 1 1000000
2 УБД1 .T. .F. .T. 0 1000000 2000000
3 УБД2 .F. .F. .T. 0 2000000 3000000

Т.е. изменяеться только признак, что БД является текущей.

В итоге мы получили две реплики нашей ЦБД, с которыми можно будет работать например на notebook'ах. При работе с ними ведеться журнал изменений по которому в последствии происходит выборка данных и формирование XML файла, который впоследствии загружается в БД.

Цикл синхронизации происходит по следующемому алгоритму.
УБД1 -> ЦБД
УБД2 -> ЦБД
ЦБД -> УБД1
ЦБД -> УБД2

На этом пока все.

P.S.
Есть у меня желание написать более подробную статью, правда особого опыта в этом нет ). Зато можно все это дело покритиковать с вашей стороны, а я извлеку уроки. Как говориться: "Истина рождается в споре"
...
Рейтинг: 0 / 0
10.03.2006, 00:19
    #33591318
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Hi M0r0!

Каждое решение имеет свою сферу применения :) Так что я более чем уверен,
что для твоей задачи эта схема будет вполне работоспособной.

Что касается недостатков, или того чего нет вообще:
- синхронизация НСИ, если её могут корректировать "на местах" - или тех-же
записей "оперативных таблиц", если и их могут менять не только не одном
узле - говоря кратко - надо решать проблему сходную "конфликту обновлений"
при оптимистической буферизации - только уже гораздо позже собственно
момента внесения изменений.
- проблема неполноты - скажем из 10 узлов пришла информация а из одного
нет - пропускать по твоей схеме нельзя - значит ждём пока и этот "тормоз"
пришлёт пакет обновления.
- проблема удаления - в реплицируемых базах надо реализовывать
многоступенчатую схему удаления (ибо нельзя удалить без проверки на всех
узлах - вдруг там есть/т.е. появились ссылки на эту запись)
- проблема целостности транзакций - никак не прописано то, что обновления в
логе не атомарны/независимы, а обычно множественны, и должны окружаться
транзакцией - т.е. не просто по очереди выполнять запросы из лога, а
создавать "пакеты"...
Есть и много чего ещё - в целом проблема очень и очень непростая.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
10.03.2006, 10:01
    #33591740
M0r0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Igor Korolyov- синхронизация НСИ
Не очень понятно, что это за аббревиатура, хотя суть проблемы более или менее ясна. Т.е. изменение одной и той же записи в двух и более БД. Данная ситуация у меня контролируется, и при ее возникновении решение по изменению ложится на оператора (принимать или нет). Хотя надо еще это дело доделать, т.к. не выводиться подробная информация что изменяется и на что 8) При этом импорт из ЦБД в УБД в данных же обстоятельствах никаких сообщений не выведет, т.к. ЦБД у меня главная и на веру принимается, что информации поступающая от нее правильная. Таким образом, есть только один оператор принимающий решения по модификации конфликтных записей и он на стороне ЦБД.

Igor Korolyov- проблема неполноты
Тоже решена. Не имеет значения пришла ли информация от всех УБД или нет. ЦБД хранит состояния своих записей по отношению ко всем УБД, и пока от какой-либо УБД информация не пришла. Она будет формировать пакет, содержащий изменения для нее, пока не придет ответный пакет от УБД. Все это достигается с помощью нумерации пакетов и подтверждений об их получении. Схема тут такая - ЦБД формирует пакет, для него же генерируется номер (обычный инкремент), и посылает его (пакет) всем УБД. УБД получив данный пакет запоминает номер пакета от ЦБД и при формировании своего пакета (например через неделю) в его заголовке прописывает этот номер. ЦБД получив пакет от УБД смотрит на данный номер и обновляет записи в своем журнале для данной УБД, что записи синхронизированы и их не надо отправлять в следующий раз. Получается что-то типа некоторого протокола.

Igor Korolyov- проблема удаления
Тут надо еще подумать ))) Но в моей базе удаление очень редкая вещь. Тут вообще хотели реализовать каскадное обновление записей, когда какое-нибудь значение присутствует в нескольких базах и при его изменении надо поменять его во всех БД 8).


Igor Korolyov- проблема целостности транзакций
Весь импорт протекает в рамках транзакции, при этом ведется лог ошибок, если они возникают, то в конце выводиться этот лог и смотря какие ошибки возникли принимается решение об откате или принятии. Хотя лучше сделать все это более интерактивно, но как-то руки не доходят 8)


P.S.
Вот все думаю, что не верно выбрал формат журнала изменеий. Кажется, что лучше было бы что-то типа этого
[tablename] [bdid] [recid] [field] [oldvalue] [newvalue] [...фантазия...]

Кто-то скажет избыточно, ну и пусть, при нынешних гигабайтах потянет. Плюс делать временное разделение по месяцам например.
...
Рейтинг: 0 / 0
10.03.2006, 10:24
    #33591822
Burn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
>Не очень понятно, что это за аббревиатура, хотя суть проблемы более или менее ясна
НСИ - нормативно-справочная информация (в просторечье "справочники")
...
Рейтинг: 0 / 0
11.03.2006, 03:37
    #33594114
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
Hi M0r0!

> изменение одной и той же записи в двух и более БД

Именно так. Причём иногда нужно "по частям" принимать изменения - скажем в
атрибутах организации на одном узле исправили ФИО директора, на другом -
адрес на третьем ещё что-то... И в целом надо принять ВСЕ эти изменения - но
это весьма непросто...

А ещё проблема "совмещения дублей" - когда одного и того-же "гр. Иванова",
ну ли там "ООО Рога и Копыта" ввели в справочник сразу на нескольких узлах -
естественно "подвязав" к нему какие-то данные в других таблицах - при
слиянии, в центральном узле важно иметь инструмент "перекодирования" для
таких случаев.

> ЦБД у меня главная и на веру принимается, что информации поступающая от
> нее правильная.

Но это автоматически накладывает ограничиение - пока мы не получили от
центра "возвратный пакет" (т.е. пакетом репликации не пройдена вся цепочка
узел-центр-узел) мы не можем продолжать работу - т.к. мы тут чего-то
наработаем, а принятый из центра пакет поменяет те-же справочники - и будет
ой :(

> Тоже решена. Не имеет значения пришла ли информация от всех УБД или нет

Ты не про тот аспект беспокоишься :)
Дело не в объёме пакетов, а в самих данных - если в "том самом" потерянном
пакете была важная информация - ну например о том что единственный поставщик
товара А разорился, и поставок больше не будет - т.е. надо снимать некоторый
товар с продажи, или искать другого поставщика - а про это никто не знает и
продолжает бодро лупить заявки... пример конечно выдуманный, но идея думаю
ясна.

> нумерации пакетов и подтверждений об их получении

Ага, а заодно и "таймауты" или нечто типа "TimeToLive" - чтобы не
перегружать поток обмена "неактуальными" подтверждениями и бесконечными
пересылками...

>> - проблема удаления
> в моей базе удаление очень редкая вещь.

В приницпе есть такие системы ведения данных, где удаления и не требуются -
там ВСЕ изменения (и удаление в том числе) осуществляется при помощи вставки
новых записей - со служебными полями типа "запись удалена".

> Тут вообще хотели реализовать каскадное обновление записей, когда
> какое-нибудь значение присутствует в нескольких базах и при его изменении
> надо поменять его во всех БД 8).

Думаю что в схемах с репликацией вообще надо запрещать каскадные
обновления - единственное исключение - это описанное выше "совмещение
дубликатов". А во всех прочих случаях никакого каскада не требуется - просто
первичные ключи делаются суррогатными, и пресекаются попытки всяких
"умельцев" ручками связи попортить.

>> - проблема целостности транзакций
> Весь импорт протекает в рамках транзакции, при этом ведется лог ошибок,
> если они возникают, то в конце выводиться этот лог и смотря какие ошибки
> возникли принимается решение об откате или принятии. Хотя лучше сделать
> все это более интерактивно, но как-то руки не доходят 8)

Дело не в этом.
Просто по своей сути пакет обновления это не "бессвязный набор единичных
операций", но и не "одна большая транзакция"!!! Т.е. в пакете многие
изменения группируются в свои наборы - вот тут мы меняем/вводим документ (а
это 10-20 единичных операций), тут меняем только одну позицию (это всего
одна операция) - и в общем случае ЛЮБАЯ из этих транзакций может "не пройти"
на центральной базе! А это значит что в твоей схеме не пройдёт весь пакет -
а это нехорошо - ибо другие то транзакции не связаны никак с "проблемной", и
нет резона их отменять из-за одной неудачной...
Видимо ты просто не соблюдаешь строго ссылочную целостность - т.е.
позволяешь появляться в таблицах и "сиротам", и прочим аномалиям - только в
лог пишешь про них - и надеешься что оператор найдёт время на анализ лога и
решение проблемы ;)

> Вот все думаю, что не верно выбрал формат журнала изменеий.

В принципе журнал изменений (и пакет репликации во многом тоже) должнен быть
похож на XML апдейтаграмму :) Или даже ЯВЛЯТЬСЯ ею. Как он будет
"повёрнут" - это уже не очень важно - будет он "элементно-базированным",
описывающим каждое изменение поля, или "строко-базированным", описывающим
изменение всей записи (но тогда надо и статус GETFLDSTATE(-1) не потерять!
Чтоб видеть какие поля реально "трогали")...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
14.03.2006, 10:23
    #33598602
MaestroEv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация локальных БД
>Причём иногда нужно "по частям" принимать изменения - скажем в
атрибутах организации на одном узле исправили ФИО директора...это весьма непросто...

А не нужно синхрить всю запись - только ИЗМЕНИВШИЕСЯ поля.

>А ещё проблема "совмещения дублей"... в центральном узле инструмент "перекодирования"...

Инструмент? Да. В центральной? Нет. Инструменту говорим - это меняем на это... и синхрится не запись а инструмент!!! Который (ночью) делает всякие гадости...

Да . От подтверждений отказался. Достаточно контрольной суммы.
Если не так - стоп машина!

>В приницпе есть такие системы ведения данных, где удаления и не требуются...
А че нельзя синхрить удаленную запись? Удалена, но она же есть и живет полной жизнью в синхре!. Ну по крайней мере сегодняшний день, а ночью мы их убиваем.

>Думаю, что в схемах с репликацией вообще надо запрещать каскадные
обновления...
Ну не знаю.. Например изменение максимальной скидки на группе товаров.. можно каждую запись синхрить (тысячи), а можно синхрить команду, которая проведет это на местах...После получения всех пакетов, которые были до ее посыла.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Синхронизация локальных БД / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]