синхронизация базы данных - Доступ MS

Это - самый простой способ получить время Unix:

use Time::Local;
timelocal($second,$minute,$hour,$day,$month-1,$year);

Примечание обратный порядок аргументов и в том январе месяц 0. Для значительно большего количества опций посмотрите модуль DateTime от CPAN.

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

, Если Вы, оказывается, знаете что-то о формате даты/времен, что Вы будете анализировать тогда простое регулярное выражение, может быть достаточным, но Вы - вероятно, более обеспеченное использование соответствующего модуля CPAN. Например, если Вы знаете, что даты всегда будут в порядке YMDHMS, использовать модуль CPAN DateTime:: Формат:: ISO8601.

Для моей собственной ссылки, если ничто иное, ниже не является функцией, я использую для приложения, где я знаю, что даты всегда будут в порядке YMDHMS со всеми или частью "на службе ее величества вооруженных сил Великобритании" дополнительной части. Это принимает любые разделители (например, "2009-02-15" или "2009.02.15"). Это возвращает соответствующее время Unix (секунды с тех пор 01.01.1970 0:00:00 GMT) или-1, если это не могло бы проанализировать его (что означает Вас лучше быть уверенным, что Вы никогда не должны будете законно анализировать дату 31.12.1969 23:59:59). Это также предполагает двухразрядные годы XX, до "69" относятся к "20XX", иначе "19XX" (например, "50-02-15" означает 15.02.2050, но "75-02-15" означает 15.02.1975).

use Time::Local;

sub parsedate { 
  my($s) = @_;
  my($year, $month, $day, $hour, $minute, $second);

  if($s =~ m{^\s*(\d{1,4})\W*0*(\d{1,2})\W*0*(\d{1,2})\W*0*
                 (\d{0,2})\W*0*(\d{0,2})\W*0*(\d{0,2})}x) {
    $year = $1;  $month = $2;   $day = $3;
    $hour = $4;  $minute = $5;  $second = $6;
    $hour |= 0;  $minute |= 0;  $second |= 0;  # defaults.
    $year = ($year<100 ? ($year<70 ? 2000+$year : 1900+$year) : $year);
    return timelocal($second,$minute,$hour,$day,$month-1,$year);  
  }
  return -1;
}

8
задан Jonas 19 December 2011 в 03:32
поделиться

6 ответов

Можно использовать репликацию Jet, встроенную в Access, но предупреждаю, он довольно ненадежный. Он также испортит ваш PK в любых таблицах, в которых вы это делаете, потому что он выбирает случайные целые числа со знаком, чтобы попытаться избежать конфликтов ключей, поэтому вы можете в конечном итоге использовать -1243482392912 в качестве следующего PK для данной записи. Это PITA, который нужно ввести, если вы выполняете какой-либо поиск по нему (например, идентификатор клиента, номер заказа и т. Д.). Вы можете ' • автоматизировать синхронизацию доступа (возможно, вы сможете подделать что-то подобное с помощью VBA. но все же это будет запускаться только при открытии базы данных).

Я бы рекомендовал использовать SQL Server 2005/2008 на вашем компьютере. центральную »базу данных и используйте SQL Server Express Editions в качестве серверной части« удаленных »баз данных, затем используйте связанные таблицы в Access для подключения к этим базам данных SSEE и репликацию для их синхронизации. Настройте репликацию слиянием или репликацию моментальных снимков с вашей «центральной» базой данных в качестве издателя и базами данных SSEE в качестве подписчиков. В отличие от репликации Access Jet, вы можете контролировать нумерацию PK, но для вас это не будет проблемой, поскольку ваши подписчики не будут продвигать изменения.

Помимо масштабируемости, которую может обеспечить сервер SQL, вы также можете автоматизировать это с помощью диспетчера синхронизации Windows (если у вас есть синхронизированные папки, это раздражающее маленькое окно, которое всплывает и синхронизирует их при входе в систему / выходе из системы) и настроить его так, чтобы он синхронизировался с заданным интервалом при запуске , выключение, или в определенное время суток, и / или когда компьютер простаивает, или синхронизируется только по запросу. Даже если Access не запускается в течение месяца, его набор данных может обновляться каждый раз, когда ваши пользователи подключаются к сети. Очень классная штука.

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

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

6
ответ дан 5 December 2019 в 12:59
поделиться

Ответы в этой ветке наполнены дезинформацией о Jet Replication от людей, которые явно не знают они не использовали его и просто повторяют услышанное или приписывают проблемы Jet Replication, которые на самом деле отражают ошибки разработки приложения.

Можно использовать Jet репликация встроена в Access, но я предупредит вас, это довольно ненадежно.

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

Это также испортит ваш ПК на на каких бы столах вы это ни делали, потому что он выбирает случайные целые числа со знаком, чтобы попробовать и избегайте столкновений клавиш, чтобы в итоге получится -1243482392912 в качестве вашего следующий ПК на данной записи. Это PITA для ввода, если вы что-то делаете поиск по нему (например, клиент ID, номер заказа и т. Д.)

PK суррогатного автонумера никогда не должны быть открыты пользователям. Это бессмысленные числа, используемые для объединения записей за кулисами, и если вы открываете их пользователям, ЭТО ОШИБКА В ДИЗАЙНЕ ВАШЕГО ПРИЛОЖЕНИЯ.

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

Другой альтернативой было бы использование составного PK, где один столбец указывает исходную реплику.

Но это не какой-то недостаток в реализации репликации Jet - это проблема для любого сценария репликации, требующего значимого порядковые номера.

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

Это явно неверно. Если вы установите синхронизатор Jet, вы можете запланировать синхронизацию (прямую, косвенную или Интернет-синхронизацию). Даже без него вы можете запланировать периодический запуск VBScript и синхронизацию. Это всего лишь два метода выполнения автоматической синхронизации Jet без необходимости открывать приложение Access.

Цитата из документации MS:

Использование Jet и объекты репликации

JRO - действительно не лучший способ управлять репликацией Jet. Во-первых, в нем есть только одна функция, которой не хватает самому DAO, то есть возможность инициировать косвенную синхронизацию в коде. Но если вы собираетесь добавить зависимость к своему приложению (для JRO требуется ссылка или его можно использовать с помощью позднего связывания), вы также можете добавить зависимость от действительно полезной библиотеки для управления репликацией Jet, и это: s TSI Synchronizer , созданный Майклом Капланом, когда-то ведущим мировым экспертом по репликации Jet (который с тех пор перешел на интернационализацию как область своей концентрации). Это дает вам полный программный контроль почти над всеми функциями репликации, которые предоставляет Jet, включая планирование синхронизации, запуск всех видов синхронизации и столь необходимую команду MoveReplica (единственный законный способ переместить или переименовать реплику без нарушения репликации).

JRO - один из уродливых приемных детей прерванной кампании Microsoft ADO-Everywhere. Его цель - предоставить специфические для Jet функциональные возможности в дополнение к тому, что поддерживается в самом ADO. Если вы не используете ADO (и вы не должны находиться в приложении Access с серверной частью Jet), тогда вы действительно не хотите использовать JRO. Как я сказал выше, он добавляет только одну функцию, которая еще не доступна в DAO (т. е. запуск косвенной синхронизации). Я не могу не думать, что Microsoft была злобной, создав автономную библиотеку для специфичных для Jet функций, а затем целенаправленно исключила все невероятно полезные функции, которые они могли бы поддерживать, если бы выбрали.

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

Поскольку у вас есть инфраструктура только для добавления, сделайте то, что рекомендует @Remou, и настройте что-нибудь, чтобы вручную отправлять новые записи, где бы они ни были. И он прав в том, что вам все равно придется решать проблему PK, как если бы вы использовали Jet Replication. Это связано с тем, что это необходимо из-за необходимости добавлять новые записи в нескольких местах, и является общим для всех приложений репликации / синхронизации.

Но одно предостережение: если в будущем сценарий только надстройки изменится, вам придется начинать с нуля или писать много сложного кода для управления удалениями и обновлениями (это непросто - доверяйте я сделал это!). Одно из преимуществ простого использования Jet Replication (даже если оно наиболее ценно для двусторонней синхронизации, т. Е. Редактирования в нескольких местах) состоит в том, что он без проблем справится со сценарием только с добавлением, а затем легко справится с полной репликацией слиянием, если она станет это требование в будущем.

Наконец, хорошее место для начала работы с Jet Replication - это Jet Replication Wiki . Страницы "Ресурсы", "Лучшие практики" и "Не верить", вероятно, лучшее место для начала.

если в будущем сценарий только надстройки изменится, вам придется начинать с нуля или писать много проблемного кода для управления удалениями и обновлениями (это непросто - поверьте мне, я сделал это !). Одно из преимуществ простого использования Jet Replication (даже если оно наиболее ценно для двусторонней синхронизации, т. Е. Редактирования в нескольких местах) состоит в том, что он без проблем справится со сценарием только для добавления, а затем легко справится с полной репликацией слиянием, если она станет требование в будущем.

Наконец, хорошее место для начала работы с Jet Replication - это Jet Replication Wiki . Страницы "Ресурсы", "Лучшие практики" и "Не верить", вероятно, лучшее место для начала.

если в будущем сценарий только надстройки изменится, вам придется начинать с нуля или писать много проблемного кода для управления удалениями и обновлениями (это непросто - поверьте мне, я сделал это !). Одно из преимуществ простого использования Jet Replication (даже если оно наиболее ценно для двусторонней синхронизации, т. Е. Редактирования в нескольких местах) состоит в том, что он без проблем справится со сценарием только для добавления, а затем легко справится с полной репликацией слиянием, если она станет это требование в будущем.

Наконец, хорошее место для начала работы с Jet Replication - это Jet Replication Wiki . Страницы "Ресурсы", "Лучшие практики" и "Не верить", вероятно, лучшее место для начала.

Мне придется начинать с нуля или писать много сложного кода для управления удалениями и обновлениями (это непросто - поверьте мне, я сделал это!). Одно из преимуществ простого использования Jet Replication (даже если оно наиболее ценно для двусторонней синхронизации, т. Е. Редактирования в нескольких местах) состоит в том, что он без проблем справится со сценарием только с добавлением, а затем легко справится с полной репликацией слиянием, если она станет это требование в будущем.

Наконец, хорошее место для начала работы с Jet Replication - это Jet Replication Wiki . Страницы "Ресурсы", "Лучшие практики" и "Не верить", вероятно, лучшее место для начала.

мне придется начинать с нуля или писать много сложного кода для управления удалениями и обновлениями (это непросто - поверьте мне, я сделал это!). Одно из преимуществ простого использования Jet Replication (даже если оно наиболее ценно для двусторонней синхронизации, т. Е. Редактирования в нескольких местах) состоит в том, что он без проблем справится со сценарием только для добавления, а затем легко справится с полной репликацией слиянием, если она станет это требование в будущем.

Наконец, хорошее место для начала работы с Jet Replication - это Jet Replication Wiki . Страницы "Ресурсы", "Лучшие практики" и "Не верить", вероятно, лучшее место для начала.

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

Последний В общем, хорошее место для начала работы с Jet Replication - это Jet Replication Wiki . Страницы "Ресурсы", "Лучшие практики" и "Не верить", вероятно, лучшее место для начала.

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

Последний в общем, хорошее место для начала работы с Jet Replication - это Jet Replication Wiki . Страницы "Ресурсы", "Лучшие практики" и "Не верить", вероятно, лучшее место для начала.

4
ответ дан 5 December 2019 в 12:59
поделиться

Вы должны прочитать в Access Database Replication , поскольку там есть некоторая информация.

Но я думаю, что для правильной работы с вашим приложением вам нужно будет развернуть индивидуальное решение, используя для этого методы и свойства .

Используйте Jet и Объекты репликации (JRO), если вам требуется программный контроль над обменом данными и информацией о конструкции между членами набора реплик в базах данных Microsoft Access (только файлы .mdb). Например, вы можете использовать JRO для написания процедуры, которая автоматически синхронизирует реплику пользователя с остальной частью набора, когда пользователь открывает базу данных. Для программной репликации базы данных необходимо закрыть базу данных.

Если ваша база данных была создана с помощью Microsoft Access 97 или более ранней версии, вы должны использовать объекты доступа к данным (DAO) для программной репликации и синхронизации.

Вы можете создать и поддерживать реплицированную базу данных в предыдущих версиях Microsoft Access, используя Методы и свойства DAO. Используйте DAO, если вам требуется программный контроль над обменом данными и информацией о конструкции между членами набора реплик. Например, вы можете использовать DAO для написания процедуры, которая автоматически синхронизирует реплику пользователя с остальной частью набора, когда пользователь открывает базу данных.

Вы можете использовать следующие методы и свойства для создания и поддержки реплицированной базы данных:

1
ответ дан 5 December 2019 в 12:59
поделиться

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

Вам нужно будет рассмотреть первичные ключи. Лучше всего включить в ключ имя пользователя или портативного компьютера, чтобы обеспечить правильную связь между записями.

6
ответ дан 5 December 2019 в 12:59
поделиться

Вы можете написать собственное программное обеспечение для синхронизации, которое подключается к портативному компьютеру, выбирает разницу из своей базы данных и вставляет ее в мастер. Насколько простой будет эта операция, зависит от вашей схемы данных. (если у вас много таблиц с FK ... вам нужно будет делать это с умом). Я думаю, что это будет наиболее эффективно, если вы напишете это самостоятельно.

Автоматизация такого типа поведения называется репликацией, и Accesss поддерживает это, очевидно, но я никогда не видел, чтобы это было реализовано.

Как я полагаю, большую часть времени ноутбук не подключен к основной БД, это все равно не лучшая идея (для репликации данных).

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

-2
ответ дан 5 December 2019 в 12:59
поделиться

FWIW:

  1. Autonumbers. Я согласен с Дэвидом - их никогда не следует разоблачать. Чтобы избавиться от этого соблазна, я использую случайный автонумератор.
  2. Репликация. Я широко использовал это несколько лет назад, с запланированной синхронизацией и с использованием GUID в качестве ПК. Я неоднократно обнаруживал, что любые сбои в сети приводили к повреждению реплик, в результате чего мне приходилось спасать данные и повторно выпускать реплики. Ужасно!
-2
ответ дан 5 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: