|
|
|
| Здравствуйте!
Все время откладывал решение этой проблемы. Но больше не получится, так как поставлены конкрентые сроки.
Имеется БД с 17 таблицами. 16 таблиц связаны с таблицей Клиенты по полю Код отношением "один-к-одному", поле Код ключевое.
Дело в том, что одна и таже БД стоит в 13 филиалах. Естественно, в каждом филиале вводят свои данные. Необходимо написать процедуру импорта, которая копировала бы данные из таблиц этих 13 БД в какую-нибудь одну БД. Как это можно сделать. Стандартную возможность Аксес "Репликацию" просьба не предлагать. Не справился я с ней.
Хочу написать свою процедуру импорта.
Киньте примеры на hr_wiseman@yahoo.com или дайте ссылки, где об этом можно прочитать.
Заранее благодарен! | |
|
| |
|
|
|
| насчет "накидайте примеров" - это вы лишку хватили.
подсказка:
в основной, консолидирующей базе, у вас должно быть поле - признак базы, из которой вы импортировали данные, будь то справочник товаров или справочник клиентов.
дальше все просто - каждому филиалу присваиваете свой код. можете даже создать таблицу
tblTuneReplicaBD
idMain - счетчик
idFilial - long
sFNam - название филиала
затем в БД филиалов в глобальных переменных или еще где (например таблице опять же настроечной) укажите код филиала, присвоенный из Главной БД) чтобы впоследствии передавать этот код в файле даных для приема в главной БД
в главноей базе при приеме, например справочника клиентов, в дополнительном поле указывайте этот код филиала.
а дальше - как по маслу :) | |
|
| |
|
|
|
| что-то мне свербит, что они не в сети - или не все из 13-ти филиалов в сети (иначе - какой смысл делать 13 баз, если можно сделать 13 (эксес as variant) клиентов на 1 скуль (as variant) сервер)
в принципе возможна синхронизация удаленных баз по и-мэйл | |
|
| |
|
|
|
| дык... я дальше тему не стал развивать :) убегал на вызов к благодарным пользователям гггг
а вообще, часть того, что я описал - работало в варианте - удаленных рабочих мест в виде магазинов и главного офиса :) и файлы (реально mdbшники) передавалсиь по e-mail или ftp между подразделениями....
или есть какие то уще другие варианты? :) более логичные | |
|
| |
|
|
|
| аналогично, только файлы были TXT... или прямо в мессидж бади
поскольку все справочники велись централизованно, объем данных на обменен не очень велик - в файле только коды из справочников и основные атрибуты операций - скидка/наценка + количество | |
|
| |
|
|
|
| так само.
по поводу всего остального, а не TXT :) | |
|
| |
|
|
|
| Привет!
Базы не в сети. Что можно делать, так это zip-овать базы и присылать их по email, например.
Про сохранение информации о том, откуда (из какого филиала) появилась запись я не думал. Теперь подумаю. Спасибо!
Возникли два более конкретных вопроса
а) Как сделать так, чтобы можно было определить дату последнего изменения записи. На этом форуме об этом как-то говорили, но не нашел я тему. Помню, что надо добавить поле mdate, но как в него записывать дату последнего изменения?
б) Поле Код в таблице Клиенты - ключевое и счетчик, а в остальных таблицах, которые связаны с т.Клиенты отношением "один к одному" поле Код - ключевое и числовое (целое)! Будет ли работать следующий алгоримт?
Для каждого филиала:
1. Скопировать данные из таблицы Клиенты филиала в таблицу Клиенты головного (запрос INSERT INTO).
2. Затем скопировать данные из таблицы №2 филиала в таблицу №2 головного (запрос INSERT INTO).
...
17. Затем скопировать данные из таблицы №16 филиала в таблицу №16 головного (запрос INSERT INTO).
Не перемешается ли все? | |
|
| |
|
|
|
| a) если бы это был MS SQL, то поле timestamp
иначе придется вам программно как-то исхитряться... у меня нет готового решения для этого случая.
б) уже перемешалось. нужна всего ОДНА таблица Клиенты. и в главной базе и в филиалах - по одной!
но в главной еще и поле - КОД БАЗЫ ФИЛИАЛА, Код Клиента - ключевое и счетчик при условии, что филилалы не могут заводить клиентов, в протвином же случае Вам нужно будет дополнительное поле КОД КЛИЕНТА В ФИЛИАЛЕ и ключевые-счетчики в таблице Клиенты в филиале. андестенд?
по хорошему если, то таблица Клиентов в главной базе и в филиале должна выглядеть одинаково, т.е. с основные поля+ КОД ФИЛИАЛА(или ГЛАВНОГО ОФИСА) и КОД КЛИЕНТА В БАЗЕ ФИЛИЛАЛА(или ГЛАВНГО ОФИСА). в моих разрабоках код главонго офиса всегда был равен 0 :) | |
|
| |
|
|
|
| Нет мужики! Таблиц будет сколько есть... Извините. Но дополнительное поле - Код филиала будет.
Куда делся старый форум?
Хочу поискать в старых сообщениях о сохранении даты последнего изменения. В ответе на вопрос это далалось программно, кажется. Но не помню как. | |
|
| |
|
|
автор: Andrew (09.11.2006 в 10:23) |
|
| Вот примерно как я собирался (не собрася потому как текучка заела) делать тоже самое:
0. В каждой таблице есть поле ИД- базы,и ИД объекта- в базе источнике
1. Оперирую я объектами - сотрудниками, товарами, документами , Подразделениями и.т.д, -
2. объекты эти (точнее их коды ) хранятся в таблицах. Каждый объект - описан в каком поле и в какой таблице он хранится.
3. Когда я решаю скопировать объект в другую базу - я беру список таблиц в которой хранится объект. Создаю эти таблицы - в промежуточной базе - и вставляю записи с этим объектом
4. далее - смотрю какой еще из объектов хранится в этой таблице - и уже беру его тоже (т.е. если я копирую документ - то я должен сохранить и элементы справочника - которые используются в этом документе). А если сам элемент справочника - зависит от других объектов то беру и их - т.е. пока не возмутся все базовые объекты. т.е. документ будет скопирован со все иерархией
6. Далее копирую эти промежуточные таблицы В базу приемник - с присвоением нового ИД -объектам - и сохранением ИД базы источника и ИД - объекта в базе источнике
7. ИД - объекта в базе источнике - нужен для того чтобы повторно не вставлять уже имеющиеся элементы. | |
|
| |
|
|
|
| та делайте, вам же потом сопровождать | |
|
| |
|
|
|
| процедура:
архивируем базы данных и
на оленях
курьером
по электр. почте (выберите нужный вариант )
привозим на один комп
сваливаем в одну папку
делаем на компе базу, куда тыкаем связанные тбл из привезенных баз
куча запросов на добавление
для полной автоматизации -пишем кода который запускает по очереди все запросы
имя базы данных (имя связанной тбл)может содержать признак филиала-хотят неспортивно, но быстро и просто | |
|
| |
|
|
|
| либо
кодом vba перебираем все файлы в папке
ишем mdb
связываемся с ними по очереди
запросами импортируем
проверям целостность и прочую лабуду
наслаждаемся полученым результатом..........
вариант с переброской txt csv файлов -техничнее | |
|
| |
|
|
|
| Хочется предупредить что будут "конфликты записей", т.к. ихмогут исправить в двух трёх филиалах одновременно.
Програмно не всегда можно "сообразить" какую оставить. | |
|
| |
|
|
|
| итак нужно
1) Поле уникальный [ИД,] лучше всего (guid)
его берут из таблицы, где одно поле задано в свойствах как код репликации, а второе поле просто текстовое (SLOVO ).
Public Function GENERACIA()
Set rst = CurrentDb.OpenRecordset("GUIDI", dbOpenDynaset)
With rst
.AddNew
!SLOVO = "S"
.Update
End With
GENERACIA = Mid(StringFromGUID(rst!GEN_GUID), 8, 36)
'IDENT = Mid(StringFromGUID(rst!GEN_GUID), 8, 36)
rst.Delete
rst.Close
End Function
2) Поле [дата записи],
3) Поле [название офиса].(в таблице местный офис)
Private Sub Form_BeforeUpdate(Cancel As Integer) ------ в форме
Me!Ofis = KAKOJofis
Me!Data_Zapisi = Date
End Sub | |
|
| |
|
|
|
| Далее:
Отсылать кажный офис будет тока свои записи отбирая запросом по полю [Ofis].
Все периферийные шлют в центральный он поглащает и шлёт им в зад всю базу, что у него есть.
Периферийные получают если в их записях у конкретной записи офисы совпадают, то просто принимают новую запись на место прежней, если же нет то тута и будет "конфликт записи" и нужно спрсить принимающего , а какую запись оставить .
И этот мудрейший опираясь на дату записи, на звонок другу, помощь зала делает выбор....
И така кажный день.
НЕ забывая делать архив перед синхронизацией на всяк случай | |
|
| |