|
|
|
| | |
|
Переход от MDB к ADP
1. Подготовка таблиц и запросов к экспорту
Наличие первичного ключа
Просмотрите внимательно все имеющиеся таблицы и в случае отсутствия в них
первичного ключа обязательно создайте его. Если импорт / экспорт прошел криво -
и первичный ключ не был перенесен - создайте его вручную.
Таблицы без первичного ключа на MSSQL - необновляемые, т.е. вы не сможете ни
поместить туда данные, ни их редактировать в режиме таблицы из Аксесса +
множество других проблем (проблемы с синхронизацией данных)
Штамп Времени
После переноса таблиц добавьте во все таблицы поле с типом timestamp
Наличие этого поля и первичного ключа принципиально меняет методику обновления
данных объектами ADO (которые используются в.т.ч и аксессом) что решает
некоторые проблемы и существенно сокращает сетевой траффик команд обновления
данных.(однако в некоторых случаях наличие этого поля в источнике данных формы может
привести к сложностям типа "Конфликт версии данных" - данные изменены другим пользователем)
Пустые значения в полях недопускающих NULL
Проверьте что во всех таблицах где стоит это ограничение данные не содержат
пуcтых полей (в аксессе такое бывает) при экспорте будет ошибка - в зависимости
от выбранного инструмента экспорта либо строка таблицы не будет перенесена,
либо не будет экспортировано ограничение, либо программа не закончит перенос.
Это наиболее часто встречающаяся проблема
Размерность связанных полей
проверьте размер связанных полей - если связь по текстовому в одной таблице
размер 50 а в другой 100 то связь в MDB работает , но при экспорте будет
ошибка. По возможности следует избегать связей по текстовым полям так как это в
любом случае приводит к потере быстродействия, как правило, всегда можно
добавить в каждую из связанных таблиц числовое поле и сделать связь именно по
нему
Диапазон дат
Проверьте значения в полях таблиц имеющих тип дата. Дата не должна быть раньше
чем 1 января 1900 года.
Битовые / логические поля
Проверьте что если поле типа bit и допускает нулл в таблице должно
присутствовать поле таймштамп. Иначе при использовании связки сервера + MDB c
линкованными таблицами будут проблемы с обновлением данных.
Имена таблиц и запросов
нельзя, чтоб название таблицы или запроса начиналось решеткой (#) (таблицы
начинающиеся c # на сервере являются временными, некоторые средства переноса
видимо об этом не догадываются)
нежелательно чтоб название таблицы начиналось цифрами
не рекомендую использовать русские названия таблиц и запросов (возможны
проблемы при реализации конкретных клиентских программ)
не допускается использование кавычек в названиях
Примечание: сведения об ошибках при импорте данных собраны из
различных источников, при использовании мастеров импорта и экспорта SQL-Сервера
и MSACCESS с установленными различными сервис-паками.
В любом случае обязательно используйте последние версии программного
обеспечения c установленными сервис-паками.
2.Что именно придется переделывать
Итоговые поля на формах
Если Вы привыкли использовать функцию =SUM() для отображения итогов:
этот подход неприемлем в проектах ADP - заменой ему может послужить программное
вычисление итоговых значений Решение1 Решение2
Примечание: Итоги в формах могут и работать MSAccess XP и
MSAccess 2003 (с установленными последними версиями драйверов доступа к данным
)- в простейших конструкциях - без возможности прменения фильтра формы
Обновление данных на форме методом Refresh
В проектах обновление формы методом Refresh проявляет себя так же как и
Requery.
В запросах проектов ADP нельзя указывать условие так как это делалось в MDB:
RecordSource:
"Select * from Mytable where ID = Forms!Главная!ID"
|
Это не будет работать потому что запросы в ADP выполняются на стороне сервера.
сервер представления не имеет о Forms!Главная!...
Есть несколько вариантов решений:
программно вычислять и задавать строку запроса:
Me.Подчиненная.Form.RecordSource = "Select * from Mytable where ID = " & me.ID
|
Использовать в качестве источника данных хранимую процедуру с параметрами
подробнее
Использовать знак вопроса в качестве параметра к источнику данных и указывать
значение в свойстве входные параметры
Свойство RecordSource: "Select * from Mytable where ID = ? and uid = ?"
свойство InputParameters: " ? = ID, ? = UID "
Задать источник данных следующим образом:
RecordSource: Select * from Mytable where DateFrom > @Forms![ФОРМА]![ДАТАС]
and DateFrom <= @Forms![ФОРМА]![ДАТАПО]
DAO
Лучше отказаться от DAO. Замена для него ADO + ADOX.
рекордсет переделывают так:
' dao должно быть прописано в references - ссылках (свойства редактора VB)
Dim rst Аs DAO.Recordset Set rst = currentdb.openrecordset "tablename"
rst.edit
rst!field1="string"
rst.update
rst.close
set rst = Noting
'adodb должно быть прописано в references - ссылках (свойства редактора VB)
Dim rst Аs New ADODB.Recordset
rst.open "tablename", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
' для начала используйте такую конструкцию она обеспечивает
наибольшее число операций над рекордсетом
' rst.edit - не требуется
rst!field1="string"
rst.update
rst.close
set rst = Noting
|
Отчеты
Клиентский фильтр отчета
Следует обратить внимание, что клиентский фильтр отчета влияет на число
отображаемых записей, но не влияет на значения Итоговых полей в примечаниях,
разделов полученных с помощью агрегатных функций : =Sum(), =Count() и.т.д.
Рекомедую вынести фильтр в условие источника данных отчета
| |
| | |