Обновление данных, используя проверку

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Обновление данных, используя проверку

Сообщение SergT » 16.06.2006 (Пт) 8:58

Здравствуйте All.
Заранее прошу не бить больно за следующий вопрос ...
Есть Access БД - лежит на сервере. Пользователь имеет аналогичную БД у себя на компе. Как грамотно и быстро обновлять данные в БД на сервере по таблицам БД пользователя?.
Пробовал схему " Delete * from t1" ,"Insert ..". Т.е очищал таблицу на сервере и сливал туда данные БД пользователя. Другой пользователь с другого компа - по аналогичной схеме обновляет свои таблицы, только с сервера
Оказалось - очень плохая схема!!!. Несколько раз, при обрыве связи с сервером, данные просто терялись. Удаляться успевали, а заполнение не происходило. Плюс - БД распухает (необходимо ежедневно сжимать). Записей в таблице около 100000. БД весит около 100 Мб.

Итак, нужно позволить пользователям работать атономно и, при внесении изменений - обновлять данные на сервере, если можно, с
проверкой. Пытался разобраться с репликацией - не понял...
Очень прошу, не отправлять сразу в поиск, я только что от туда.. И главное не очень понимаю, что искать :roll:
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2006 (Пт) 9:08

Правильная репликация -- дело сложное, долгое и муторное. Лучше используй готовые механизмы, не изобретая велосипеда.

Если же очень хочется, то напиши критерии уникальности записей и критерии обновлений (как определить, где более свежая запись).
Lasciate ogni speranza, voi ch'entrate.

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 16.06.2006 (Пт) 9:18

А нет ли в Accesse готовых решений? Т.е. выполнить запрос на добавление-обновление всех данных из одной таблицы в другую (одинаковой структуры) , но с ключом,типа "заменять данные, только если они отличаются"? Я так коряво задал вопрос :oops: Но вы меня понимаете?..
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2006 (Пт) 9:36

А вот объясни мне, как ты определишь для отличающихся записей, которая из них актуальна?
Lasciate ogni speranza, voi ch'entrate.

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 16.06.2006 (Пт) 10:58

... проблемммммы с интернетом

Я бы считал актуальной любую строку в таблице, в которой одноименные поля отличаются и приимущество имела бы последняя операция! Т.е. "кто первый встал - того и тапки".
Подобную операцию можно было бы проделать перебором записей и проверкой даже не всех полей записи (из 20 полей хотя бы 5 ). В случае несовпадения - замена. Но время... :shock: По сети такие операции занимают массу времени. Вообще-то я просто запутался. Может есть решение на поверхности, а я не вижу? Чем больше знаешь - тем тяжелее жить :D

Задача, если подумать, сводится к следующему:
Нужно позволить пользователям работать атономно (при выключенном сервере) и, в тоже время, обновлять данные через сервер, если он включен. При включении сервера, неибежен вопрос, чьи записи последнии. В моем случае - вопрос решаем (допустим в одном из полей строки прописано время создания записи)
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.06.2006 (Пт) 11:01

И что, часы всех компьютеров строго синхронизированы?
И никто никогда не сможет перевести время на год вперёд? Обеспечив таким образом неубиваемость своей версии данных?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Re: Обновление данных, используя проверку

Сообщение Nicky » 16.06.2006 (Пт) 11:03

SergT писал(а):Здравствуйте All
...
Пробовал схему " Delete * from t1" ,"Insert .."

Чем не подошел Update по измененным записям?

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Re: Обновление данных, используя проверку

Сообщение SergT » 16.06.2006 (Пт) 11:13

Nicky писал(а):Чем не подошел Update по измененным записям?

А вот как это - по измененным записям?
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 16.06.2006 (Пт) 11:14

Дык! Добавить поле "ПризнакИзменения"

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 16.06.2006 (Пт) 11:17

GSerg писал(а):И что, часы всех компьютеров строго синхронизированы?
И никто никогда не сможет перевести время на год вперёд? Обеспечив таким образом неубиваемость своей версии данных?

Не переведет. А если переведет - будет наказан! Но дату я для примера привел. Не хочу влезать в подробности. Пусть даже тот, кто последний подключился , тот и имеет преимущество ... Потом можно все поставить на места.. Однако это мои, возможно дурацкие, мысли. А что Вы можете посоветовать?
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 16.06.2006 (Пт) 11:21

Nicky писал(а):Дык! Добавить поле "ПризнакИзменения"

:oops: Спасибо! Ну да, я и говорю - чем больше узнаешь, тем больше забываешь о простых вещах! Update по условию...

Но может есть еще глобально_другие_простые_красивые решения?
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 16.06.2006 (Пт) 11:24

SergT писал(а):Спасибо! Ну да, я и говорю - чем больше узнаешь, тем больше забываешь о простых вещах! Update по условию...

Если бы! Update не умеет брать данные из других таблиц. Так что, я бы сказал так: в цикле по записям из выборки по условию

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.06.2006 (Пт) 11:27

Как вариант - переслать заархивированную MDB-шку (хоть письмом!) с нужными данными, а на месте ее распаковать и просто считать нужные таблицы?

Сколько такая весит в RAR-овском архиве?

А вообще - можно и почитать про репликацию. Как я понимаю она у тебя должна быть лишь в одну сторону, а это уже проще. У Access-a вроде есть подобные возможности, но точно утверждать не буду, ибо пользую его лишь изредка для примитивов...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 16.06.2006 (Пт) 11:42

Andrey Fedorov писал(а):Как вариант - переслать заархивированную MDB-шку (хоть письмом!) с нужными данными, а на месте ее распаковать и просто считать нужные таблицы?

Сколько такая весит в RAR-овском архиве?

А вообще - можно и почитать про репликацию. Как я понимаю она у тебя должна быть лишь в одну сторону, а это уже проще. У Access-a вроде есть подобные возможности, но точно утверждать не буду, ибо пользую его лишь изредка для примитивов...


Думал и делал копирование. Но в RAR -в общей сложности 120 Mb
По сети... Там не одна БД. Но основных таблиц, в которых проходят оперативные изменения - около 10.
Про репликацию я накачал всякого - буду читать. Время жаль убивать. Хотелось бы выбрать надежное готовое решение_схему и по ней делать дальше. А так,эксперементирование уже замучило. И чем больше ковыряешь код - тем более вероятны случайные ошибки!

Но копирование по сети - все равно больная тема! А вот как скопировать быстро около 200 Мб ? Я пробовал разные способы.
И даже через Compact ( через Compact было быстрее всего :shock: )
Последний раз редактировалось SergT 16.06.2006 (Пт) 11:46, всего редактировалось 1 раз.
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.06.2006 (Пт) 11:45

SergT писал(а):Но в RAR -в общей сложности 120 Mb


При базах таких размеров я бы подумал о SQL-сервере.
Хотя бы из-за надежности...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 16.06.2006 (Пт) 11:59

Andrey Fedorov писал(а):При базах таких размеров я бы подумал о SQL-сервере.
Хотя бы из-за надежности...


Подумаю ... А нет ли толковой статейки про SQL, Для начинающих?
А вот еще пишут о Клиент-Сервер (на VB). Приемлимо ли такое решение? Может соскачить с Access? Пользоваться только таблицами..
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 16.06.2006 (Пт) 12:44

Однажды решал подобную задачу - механизм работы распределенного приложения при условии наличия отсутствия сети :)

Есть организация с системой документооборота и куча представительств по России, кое-где инет есть только на диалапе. Центральная база на sql сервере, клиенты диалапщиков - на аксессовской почти такой же структуры. Измененные данные отсылаются по почте в экспортном файле еще более простой структуры. Период между экспортами считается сессией и с ней связываются ключи измененных объектов верхнего уровня. При экспорте в файл сливаются записи по этим ключам, включая подчиненные согласно структуре базы и приложения. При импорте в основную базу происходит обратная операция. Во временные таблицы вносятся все эти ключи, по ним происходит выборка из основных таблиц. Записи существующих ключей обновляются, несуществующих добавляются. Соответственно в основной базе хранятся ключи баз диалапщиков. Правда передо мной не стояла задача предоставить диалапщикам остальные данные из основной базы, они их просто не касаются. Они работают в одностороннем порядке - клиент -> сервер. Аналогичный механизм сервер -> клиент используется только для обновления справочников.

Процедура импорта происходит в транзакции и тоже связывается с сессией. В случае ошибок в файле, транзакция отменится. Если критических ошибок в файле нет, а есть какие-то косяки, связанные с человеческим фактором, то измененные записи можно разом удалить, а представительство пришлет исправленный файл.

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

PS. Скоро выложу в проекты библиотечку ADOHTTP. Будучи установленной на клиенте и сервере с iis, она способна делать и обрабатывать sql-запросы непосредственно через интернет. Возможно, она тебе как-то поможет. Однако не рассчитывай на поддержку транзакций :wink:
Лучший способ понять что-то самому — объяснить это другому.

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 28.10.2007 (Вс) 14:45

Приветствую всех!
Прошу совета.
Имеется: три базы данных (mdb): Педагогика, социальная педагогика, военная педагогика (темы диссертаций). Их структура совершенно идентичная. Понимаю, что это не оптимально, но такое условие изначально.
Необходимо связать эти три базы данных так, чтобы при внесении изменения в любую из них, эти же изменения вносились во все другие, если совпадает ТЕМА (поле title). Если в одной из баз такой темы нет, то изменения и не вносятся.
Подскажите, пожалуйста, как это сделать в VB?
Спасибо всем, кто отзовется!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 29.10.2007 (Пн) 9:18

может их прилинковать друг к другу, и до апдейта проверять наличие?
I Have Nine Lives You Have One Only
THINK!

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 03.11.2007 (Сб) 11:25

HandKot
Неужели этот способ единственный???

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 21.11.2007 (Ср) 21:13

не друг к дуругу, а к ещё одной четвёртой, которая и сравнивает таблицы на наличие идентичной темы во всех базах. одним запросом вообще можно сделать. при этом структуру исходных баз и не затронешь..
VBA, MSA97


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 175

    TopList