Ну, во-первых, вам ВСЕ ЕЩЕ нужно развернуть часть приложения, называемую внешним интерфейсом (FE), на каждой рабочей станции.
Итак, после того, как вы перенесете данные в MySQL, вы, конечно же, будете использовать диспетчер связанных таблиц доступа, а теперь свяжете таблицы с MySQL. Как это работает, очень похоже на то, что вы делаете сейчас. Единственное отличие состоит в том, что связанные таблицы теперь указывают на сервер базы данных (MySQL). С точки зрения приложения он должен работать как прежде.
Нравятся все приложения, будь то Outlook, Excel, бухгалтерские пакеты? Вы ВСЕ ЕЩЕ развертываете часть приложения на каждой рабочей станции. Таким образом, только потому, что ВЫ сейчас разрабатываете и пишете программное обеспечение с помощью Access, не означает, что вы сейчас по какой-то странной причине ПРЕКРАТИТЕ развертывание FE-части на каждой рабочей станции. На самом деле вы должны развертывать скомпилированную версию вашего приложения (accDE).
Еще несколько советов: КОГДА вы связываете FE, УБЕДИТЕСЬ, что вы используете ФАЙЛ dsn. Причина этого в том, что Access преобразует для вас ссылки в DSN-less. Это означает, что как только вы свяжете таблицы, вы сможете развернуть FE на каждой рабочей станции, и он сохранит информацию о связанной таблице БЕЗ необходимости устанавливать DSN-соединение на каждой рабочей станции. Вам также, конечно, придется развернуть драйвер MySQL ODBC на каждой рабочей станции, поскольку он не является частью Access и не является частью вашего приложения.
Таким образом, только то, что вы сейчас разрабатываете программное обеспечение, не означает и не освобождает вас от необходимости развертывания этого приложения на каждой рабочей станции. Таким образом, ваша установка, которая у вас есть сейчас с FE на каждой рабочей станции, НЕ меняется ни на один бит.
По большей части, после переноса данных в MySQL, а затем, вероятно, настройки ваших отношений (скажем, с MySQL workbench), вам нужно помнить о нескольких других вещах.
Всем таблицам теперь нужен первичный ключ. Вероятно, у вас есть это, но Access с серверной частью доступа работал и мог работать с таблицами без PK. Однако для SQL-сервера/MySQL и т. д. всем таблицам нужен этот PK.
Далее: если у вас есть какие-либо столбцы true/false, вы ДОЛЖНЫ установить значение по умолчанию для этого столбца. Если такие столбцы true/false имеют значение по умолчанию или допускают нулевое значение, это приведет к путанице при доступе, поэтому убедитесь, что столбцы true/false не могут иметь пустые значения и иметь настройку по умолчанию (обычно 0) на стороне сервера.
Добавьте столбец "rowversion". Это не следует путать со столбцом даты и времени. В SQL-сервере этот столбец rowversion имеет тип данных timestamp (плохое имя, поскольку столбец не имеет отношения ко времени — это просто столбец, который «версирует» строку. Это также устранит многие ошибки. Я не знаю как этот тип столбца называется в MySQL, но все таблицы должны иметь этот столбец (нет необходимости видеть/использовать/просматривать этот столбец в ваших формах, но он должен быть частью таблицы.
Все ваши формы, отчеты и код должны работать как прежде. Для кода набора записей VBA вам нужно следующее:
dim rst DAO.Recordset
dim strSQL as string
strSQL = "SELECT * from tblHotels"
set rst = currentdb.OpenRecordSet(strSQL).
Вероятно, в прошлом у вас было много кода, как указано выше.
Теперь вам нужно:
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)
Как правило, вы можете выполнить поиск и замену (найти каждый .OpenRecordSet и добавить dbOpen и dbSee к каждой найденной строке кода. (Я поместил dbOpenDynaset, dbSeeChanges в свой буфер вставки. максимум несколько минут, чтобы найти все .openRecordSets
На данный момент 99% вашего кода, формы и все остальное должно работать.
ОДИН получил тебя? В доступе ли это в форме или в коде набора записей VBA? Когда вы создаете новую строку или начинаете печатать в форме? Доступ с серверной частью доступа будет генерировать PK в этот момент. Не было необходимости сохранять запись, чтобы получить значение PK. Такая необходимость возникает редко, и в большом приложении у меня было всего 2 или 3 места, где это происходило.
Итак, если у вас есть такой код:
dim rstRecords as RecordSet
dim lngPK as Long ' get PK value of new record
Set rstRecords = CurrentDb.OpenRecordset("tblHotels")
rstRecords.AddNew
' code here sets/ add data/ set values
rstRecords!HotelName = "Mount top Hotel"
rstRecords!City = "Jasper"
' get PK of this new record
lngPK = rstRecods!ID ' get PK
rstRecords.Update
Итак, в приведенном выше коде я получаю значение PK. Но с серверными системами вы НЕ можете получить значение PK до тех пор, пока запись не будет сохранена. Итак, вы должны изменить выше на
rstRecords.Update
rstRecords.Bookmark = rstRecords.LastModified
' get PK of this new record
lngPK = rstRecods!ID ' get PK
Обратите внимание, как мы берем ПК ПОСЛЕ сохранения. Закладка выше просто переустанавливает указатель записи на новую запись. Это «причуда» DAO, и ПРИ добавлении новых записей команда .Update перемещает указатель записи, и, таким образом, вы перемещаете его обратно с помощью приведенного выше .LastModified. Вам нужен ТОЛЬКО трюк .LastMOdifed для НОВЫХ записей. Для существующего у вас уже есть ПК - так что это не имеет значения.
Этот тип кода довольно редок, но иногда в форме (а не в коде reocdset VBA), некоторый код формы, который мы могли бы использовать/нужно/получить/схватить значение PK. В форме вы можете сделать это:
если me.dirty = true, то me.dirty = false ' сохранить перекод
lngPK = me.ID 'получить ПК
Итак, еще раз, в приведенном выше коде формы я сначала удостоверяюсь, что запись сохранена, а ЗАТЕМ я получаю значение PK, как указано выше. Конечно, это относится ТОЛЬКО к НОВЫМ записям. (и вам не нужно использовать трюк с закладками - это только для наборов записей - не связанных форм.
Итак, просто имейте в виду, что в тех немногих случаях, когда вам нужно значение PK для НОВОЙ записи, вы должны сделать это ПОСЛЕ того, как вы сохранили набор записей (обновление) или, в случае формы, после принудительного сохранения записи формы. Это требование относится только к новым записям и ТАКЖЕ только тогда, когда вашему коду необходимо получить/получить новое значение PK.
Кроме вышеупомянутых двух проблем? Весь остальной ваш существующий код и формы должны работать как прежде.
person
Albert D. Kallal
schedule
18.04.2020