Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Access. Переход с 32-х разрядной системы на 64-х разрядную. (Примерное реководство)

Пошарился по интернету, по форуму. Попробовал свести всё в одно место.

Access. Переход с 32-х разрядной системы на 64-х разрядную.

Начиная с версии Office 2010, офис стал выпускаться в двух вариантах 32-х разрядный и 64-х разрядный. Причём, если 32-х разрядный офис может спокойно устанавливаться как на 32-х, так и на 64-х разрядную системы, то 64-х разрядный офис может ставиться только на 64-х разрядную операционку.

Хотя 32-разрядные приложения могут работать прозрачно, смешивание двух типов кода в одном процессе не поддерживается. 64-разрядное приложение не может подключаться к 32-разрядной системной библиотеке (DLL); аналогичным образом 32-разрядное приложение не может подключаться к 64-разрядной системной библиотеке.

ВНИМАНИЕ! При попытке запустить 32-разрядный код в 64-разрядной версии Access возникнут ошибки времени выполнения. Например, из-за несоответствия версий пользовательского приложения (32-разрядный код) и одного из 64-разрядных поставщиков ACE, установленных с 64-разрядной версией Microsoft Access, может возникнуть ошибка "Поставщик Microsoft.ACE.OLEDB.12.0 не зарегистрирован на локальном компьютере". Чтобы устранить эту проблему, либо обновите пользовательский код до 64-разрядной версии, либо удалите 64-разрядную версию Access и установите 32-разрядную.

Параллельная установка 64-х и 32-х разрядных выпусков Office 2010 не поддерживается. Это относится и к Access.

Перед развертыванием 64-разрядной версии Access определите, подходит ли такой вариант развертывания для конкретной среды. На совместимость с текущим 32-разрядным решением для Access влияет ряд факторов. Например, при использовании баз данных с удаленным исходным кодом (MDE-, ADE- и ACCDE-файлов) либо при использовании VBA-кода с операторами Declare, надстройками COM и элементами ActiveX необходимо приложить определенные усилия, чтобы эти функции заработали с 64-разрядной версией Access. Для устранения этой проблемы также можно установить 32-разрядную версию Access в 32-разрядной версии Windows либо 32-разрядную версию Access (WOW64) в 64-разрядной версии Windows.

Если Вы собираетесь использовать 64-х разрядные базы данных Access, и в будущем ситуация не изменится, самым естественным вариантом для работы с данными будет выбор драйвера ACE DAO, поскольку он предоставляет наиболее полный набор функций. В конце концов, собственные технологии доступа к данным, как правило, позволяют сократить время разработки, упростить код и обеспечить более высокую производительность. Если будут использоваться расширенные возможности работы с наборами данных и подключения к вспомогательным внешним источникам, рассмотрите возможность использования ADO.NET (или ADO) либо OLE DB. Полную поддержку устаревших возможностей, таких как связанные таблицы и сохраненные запросы, а также новых сложных типов данных, появившихся в Access 2007, обеспечивает только драйвер ACE DAO. Драйвер ACE OLE DB обеспечивает ограниченную поддержку сложных данных. Например, для более эффективной поддержки сложного набора данных (для извлечения наборов записей в наборах данных) необходимо задать параметр подключения "JET OLE DB: Support Complex Data". Если этого не сделать, по умолчанию для сложных полей будут возвращаться списки разделенных значений. Технологии ADO.NET, ADO и ACE ODBC всегда возвращают для сложных полей списки разделенных значений.

Выполнение кода VBA, который был написан до выпуска Office 2010 (VBA версии 6 и более ранних версий), на 64-разрядной платформе может приводить к возникновению ошибок, если код не был модифицирован для работы в 64-разрядных версиях Office. Ошибки будут возникать по той причине, что язык VBA версии 6 и более ранних версий неявно ориентирован на 32-разрядные платформы и обычно содержит операторы объявления, которые запускают в действие функции API Microsoft Windows, использующие 32-разрядные типы данных для указателей и дескрипторов. Так как язык VBA версии 6 и более ранних версий не имеет специального типа данных для указателей и дескрипторов, им используется тип данных Long, который является 32-разрядным 4-байтным типом данных, предназначенным для ссылки на указатели и дескрипторы. Указатели и дескрипторы в 64-разрядных средах являются 8-байтными 64-разрядными числами. Эти 64-разрядные числа не могут храниться в 32-разрядных типах данных.

Проблема с выполнением унаследованного программного кода VBA в 64-разрядном пакете Office заключается в том, что при попытке загрузить 64-разрядные значения в 32-разрядный тип данных 64-разрядные числа усекаются. Это может приводить к переполнениям памяти, неожиданным результатам в коде и возможным сбоям приложения.

Для устранения этой проблемы и обеспечения правильной работы кода VBA как в 32-разрядных, так и в 64-разрядных средах в язык VBA добавлен ряд функциональных возможностей. Три важных добавления: псевдоним типа LongPtr, тип данных LongLong и ключевое слово PtrSafe.

LongPtr — теперь язык VBA включает псевдоним типа переменной: LongPtr. Фактический тип данных, в который разрешается тип LongPtr, зависит от версии пакета Office, в котором он используется: тип LongPtr разрешается в тип Long в 32-разрядных пакетах Office, и тип LongPtr разрешается в тип LongLong в 64-разрядных версиях пакета Office. Используйте тип LongPtr для указателей и дескрипторов.

LongLong — тип данных LongLong — это 64-разрядные целые числа со знаком, которые доступны только в 64-разрядных версиях пакета Office. Используйте тип LongLong для 64-разрядных целых чисел. Для явного присвоения значений типа LongLong (включая тип LongPtr на 64-разрядных платформах) целочисленным типам данных меньшего размера должны использоваться функции преобразования. Неявное преобразование типа LongLong в целочисленные данные меньшего размера не допускается.

PtrSafe — ключевое слово PtrSafe декларирует, что оператор Declare безотказно выполняется в 64-разрядных версиях пакета Office.

Теперь все операторы Declare должны содержать ключевое слово PtrSafe, когда выполняются в 64-разрядных версиях пакета Office. Важно понимать, что просто добавление ключевого слова PtrSafe в оператор Declare означает только, что оператор Declare явно ориентирован на 64-разрядные данные, все типы данных в операторе, которые предназначены для хранения 64 разрядов (включая возвращаемые значения и параметры), все еще нуждаются в изменении, чтобы хранить 64-разрядные числа.

Начиная с Access 2010 для программирования стал доступен VBA7.

Операторы Declare, содержащие слово PtrSafe, работают корректно в среде разработки VBA7 как на 32-разрядных, так и на 64 разрядных платформах. Чтобы обеспечить обратную совместимость в VBA7 и более ранних версиях, используйте следующую структуру:

#If Vba7 Then 
	Declare PtrSafe Sub... 
#Else 
	Declare Sub... 
#EndIf

Примечание. Я писал текст программ в Access 2003, а уже потом отлаживал в Access 2010. В Access 2003 строки с этой переменной подсвечивались красным, но компилятор Access 2003 их спокойно обрабатывал. В Access 2010 ничего не подсвечивалось.

Пример не модифицированного унаследованного оператора Declare в языке VBA5/6 версий Access 97/2000/2002/2003/2007

Declare Function GetActiveWindow Lib "user32" () As Long

Пример оператора Declare языка VBA модифицированного для включения спецификатора PtrSafe, но по-прежнему используется 32-разрядное возвращаемое значение в языке VBA7 версий Access 2007/2010/2013/2016

Declare PtrSafe Function GetActiveWindow Lib "user32" () As Long

Пример оператора Declare языка VBA, модифицированный для включения ключевого слова PtrSafe и обновленный для использования 64-разрядного типа данных (LongPtr)

Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr

Итак, для правильной работы кода в 64-разрядных версиях пакета Office необходимо найти и модифицировать все существующие операторы Declare, чтобы они использовали спецификатор PtrSafe. А внутри этих операторов Declare необходимо найти и модифицировать все типы данных, которые ссылаются на дескрипторы или указатели, чтобы использовать псевдоним нового 64-разрядного совместимого типа LongPtr и типы, необходимые для хранения 64-разрядных целых чисел с новым типом данных LongLong. Кроме того, следует обновить все определенные пользователем типы, содержащие указатели или дескрипторы и 64-разрядные целые числа, чтобы использовать 64-разрядные типы данных, и убедиться в правильности присвоений всех переменных, чтобы предотвратить появление ошибок несоответствия типов.

Чтобы написать код, переносимый между 32-разрядными и 64-разрядными версиями Office, требуется лишь использовать для всех указателей и значений дескрипторов псевдоним нового типа LongPtr вместо типа Long или LongLong. Псевдоним типа LongPtr разрешается в правильный тип данных Long или LongLong в зависимости от того, какая версия пакета Office используется.
Обратите внимание, что если требуется реализовать другую логику, можно использовать константу условной компиляции Win64

Код с её использованием будет выглядеть следующим образом.

#if Win64 then 
'  Code is running in 64-bit version of Microsoft Office 
#else 
'  Code is running in 32-bit version of Microsoft Office 
#end if 

Чтобы написать код, работоспособный как в новой, так и в старой версиях Office, можно использовать комбинацию новых условных констант компилятора VBA7 и Win64.

#if Vba7 then 
'  Code is running in the new VBA7 editor 
     #if Win64 then 
     '  Code is running in 64-bit version of Microsoft Office 
     #else 
     '  Code is running in 32-bit version of Microsoft Office 
     #end if 
#else 
' Code is running in VBA version 6 or earlier 
#end if 
 
#If Vba7 Then 
Declare PtrSafe Sub... 
#Else 
Declare Sub... 
#EndIf 


************************************************************
Замечания, предложения есть?

-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
Ответ: Продолжение.
Из опыта перехода.
Переводил на 64-х битную версию небольшую программу написанную в Access 2000. Без ActivX и API. Что замечено.
Что замечено.
Если у Вас есть ссылка на библиотеку Microsoft DAO 3.6 Object Library , то замените её на Microsoft Office XX.X Access Database Engine Object Library


Что насчет ядра Microsoft JET?
До выпуска Access 2007 в Access использовалось ядро Microsoft Joint Engine Technology (JET). Хотя ядро JET обычно рассматривается как компонент Access, оно является отдельным продуктом. С момента выпуска Microsoft Windows 2000 ядро JET было включено в состав операционной системы Windows, после чего распространялось и обновлялось в составе компонентов Microsoft Data Access Components (MDAC). После выпуска Access 2007 ядро JET было признано устаревшим и было исключено из состава MDAC. Вместо этого ядра в Access теперь используется интегрированное и усовершенствованное ядро ACE, разработка которого началась с создания снимка исходного кода JET.

Ядро ACE полностью обратно совместимо с предыдущими версиями JET, что позволяет выполнять чтение и запись данных в MDB-файлы из предыдущих версий Access. Поскольку ядро теперь отдано группе разработчиков Access, другие разработчики могут быть уверены в том, что их решения для Access не только продолжат работать в будущем, но станут быстрее, надежнее и получат поддержку новых возможностей. Например, с выпуском Access 2010 в ядре ACE, в числе прочих усовершенствований, была реализована поддержка 64-разрядной версии и улучшена интеграция с технологиями и веб-службами SharePoint. Корпорация Microsoft обязуется поддерживать Access в качестве платформы разработки.


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

Вам также можеть быть интересно:

Книжка по DB2
Backup PostgresSQL
Подключение к другой БД
сколько весит индекс
Запрос с JOIN
Вопрос: План выполнения запроса в MS Access

Подскажите, как получить план выполнения запроса в Access.

Нашел такой совет:
А как же в Access? Неужели разработчики не предусмотрели возможность просмотра плана выполнения запроса?

Оказалось такая возможность есть, просто она недокументированная. Если в разделе реестра
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Debug] создать строковый параметр JETSHOWPLAN и присвоить ему значение ON, то это заставит Access (после перезапуска) создавать текстовый файл showplan.out в папке Мои документы, в котором будет содержаться план выполнения запросов.
Построение плана выполнения запросов происходит в момент компиляции последних. Существующие запросы уже, как правило, скомпилированные. Чтобы заставить Access перекомпилировать запрос, нужно его изменить (как вариант открыть запрос, перейти в режим SQL и добавить пробел в конце), сохранить и выполнить.
Существует ли другая возможность, без использования реестра?

Раздела [...4.0/Jet] в [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\...] у меня нет.
Ответ: Нагуглила, что для Office 12 (Access 2007) правильное размещение ключа

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Debug]

Ветки Debug изначально нет, ее тоже нужно создать.

Сработало только после перезагрузки.

Добавлено через 11 минут
Мдя. Результат для Access 2007 совершенно не тот, какой ожидалось. Вот полное (с точностью до двух пустых строк, которые я удалила для экономии места форума) содержание файла showplan.out после открытия запроса в режиме конструктора, сохранения и выполнения:

---------------------------------------------
DATE: 0
VER: 12.00.6679

NOTE: Currently does not handle subqueries, vt parameters, and subqueries
NOTE: You may see ERROR messages in these cases

---
- Inputs to Query -
Table 'EventLine'
- End inputs to Query -

01) Sort table 'EventLine'
02) Insert into 'EventLine'
Т.е. ожидаемая информация об использовании индексов - отсуствует.

Добавлено через 39 минут
UPD: начало выводить информацию об индексах после сжатия базы данных.

Добавлено через 8 минут
UPD2: Окончательный вердикт: для адекватной работы плана выполнения запроса в Access 2007 нужно создать ключ в регистре, перезагрузить компьютер и сжать базу данных.
Вопрос: Знаки подстановки разные в SQL Access и SQL VBA Access

Приветствую, уважаемые форумчане.
Просмотрел множество сообщений о VBA и SQL, но вот так, как у меня вопрос нигде не стоял.

Делаю запросы на обновление, данные беру из формы. В форме же беру данные для фильтра.

Проблема. Когда подчиненной форме присваиваю фильтр - все нормально работает.
Нужно обновить данные в таблице на основании того же фильтра. В VBA делаю запрос, но там подстановочные знаки из другого стандарта, почему-то.
Т.е., если текст запускаемого запроса(сформированного в VBA) копирую и вставляю в конструктор SQL в режиме SQL, переключаюсь в режим конструктора - абсолютно корректный запрос получается.
Запускаю запрос так:
Код Visual Basic
1
2
s1=текст запроса
CurrentProject.Connection.Execute(s1)
Данные не меняет, так как знаки подстановки другие должны быть при таком запуске

В общем, я сделал замену знаков (*) на (%), (?) на (_) и (!) на (^).
В описании Access написано, что именно так и различаются знаки в разных стандартах. Но вот знак ^ не работает как отрицание символов в квадратных скобках в Access
Конечно, можно через NOT наворотить, но не хочется.

Вопрос
Как мне обновлять отфильтрованные данные запросом? Желательно, чтобы стандарт SQL был таким же, как и в обычном SQL конструкторе Access, проще проверять конструкции.

P.S. вообще microsoft не понимаю, как можно в access использовать один стандарт, а при запуске VBA этого же access другой стандарт использовать...
Ответ: Это академический, а не практический ответ.
В настройках Access можно поставить галку(у меня заблокирован этот пункт, галку поставить не получается) использовать SQL92. Но он то как раз неудобен, так как отрицание не работает( [^ ] вместо [! ]).

Как раз нужен был обратный вариант. Получилось запускать через DoCmd.RunSQL. С рекордсетами как обстоят дела не помню, давно access не пользовался.

Добавлено через 2 минуты
Про CurrentDB спасибо, запишу себе!
Вопрос: Окно MS Access не закрывается

Если создавать/закрывать новый экземпляр MS Access таким Макаром

    Dim App_Public_Modules As Access.Application

    sCmdLine = """" & SysCmd(acSysCmdAccessDir) & "MSAccess.exe"" """ & db_Path & """"
    sCmdLine = sCmdLine & " /wrkgrp """ & DBEngine.SystemDB & """"
    sCmdLine = sCmdLine & " /User user1 /pwd 123"
    
    Shell sCmdLine, vbHide

    Set App_Public_Modules = GetObject(db_Path)

	...
	
    App_Public_Modules.CloseCurrentDatabase
    App_Public_Modules.Quit acQuitSaveNone
    Set App_Public_Modules = Nothing


, то окно MS Access откуда я все вызывал не закрывается. При этом новый созданный процесс MSACCESS исчезает из диспетчера задач (что в свою очередь как бы должно намекать что все прошло без ошибок).

Если новый экземпляр MS Access создавать/закрыть так

    Dim App_Public_Modules As Access.Application
    Set App_Public_Modules = New Access.Application
    App_Public_Modules.OpenCurrentDatabase db_Path, False

...
	
    App_Public_Modules.CloseCurrentDatabase
    App_Public_Modules.Quit acQuitSaveNone
    Set App_Public_Modules = Nothing


то все без проблем закрывается.

В чем может быть причина и как побороть? Мне нужен именно первый вариант так как там можно вводить логин/пароль пользователя и использовать конструкции вида "App_Public_Modules.DoCMD.TransferDatabase".
Ответ: Опять отвечаю сам себе. К сожалению создавать новый экземпляр MS Access не желательно. Это приводит периодическому краху MS Access и не стабильной работе. Также следует отметить, что иногда даже вместо одного процесса MS Access создается два а закрывается один. Единственный выход описан . Таким образом конструкции вида "App_Public_Modules.DoCMD.TransferDatabase" нужно заменять на соответствующий SQL запрос.

Всем спасибо за внимание, тему можно закрывать.
Вопрос: Сколько таблиц и форм можно создать в access 2003?

Сколько таблиц и форм можно создать в access 2003? Есть ли какие то ограничения и если есть то какие?
Ответ: результаты минутного поиска в интернете
по спецификации access 2003
База данных Microsoft Access 2003

Общие
Размер файла базы данных Microsoft Access (.mdb) (База данных Microsoft Access. Совокупность данных и объектов (например, таблиц, запросов или форм), относящихся к определенной задаче.) 2 Гбайт за вычетом места, необходимого системным объектам (Системный объект. Встроенный объект базы данных, определенный как системный, например таблица MSysIndexes, или системные объекты, определенные пользователем. Для определения системного объекта необходимо, чтобы его имя начиналось с букв USys.).
Число объектов в базе данных 32 768
Модули (включая формы и отчеты, свойство Наличие модуля (HasModule) которых имеет значение True) 1 000
Число знаков в имени объекта 64
Число знаков в пароле 14
Число знаков в имени пользователя или имени группы 20
Число одновременно работающих пользователей 255

Таблица
Атрибут Максимальное значение
Число знаков в имени таблицы 64
Число знаков в имени поля 64
Число полей в таблице 255
Число открытых таблиц 2048 (фактическое число может быть меньше из-за внутренних таблиц, открываемых Microsoft Access)
Размер таблицы 2 Гбайт за вычетом места, необходимого системным объектам.
Число знаков в текстовом поле 255
Число знаков в поле MEMO 65 535 при вводе данных через интерфейс пользователя;
1 Гбайт для хранения знаков при программном вводе данных.
Размер поля объекта OLE 1 Гбайт
Число индексов в таблице 32
Число полей в индексе 10
Число знаков в сообщении об ошибке 255
Число знаков в условии на значение записи 2 048
Число знаков в описании таблицы или поля 255
Число знаков в записи (кроме полей MEMO и полей объектов OLE), когда для свойства UnicodeCompression (сжатие Юникод) задано значение Да 4 000
Число знаков в значении свойства поля 255


Запрос
Атрибут Максимальное значение
Число установленных связей 32 на одну таблицу за вычетом числа индексов, находящихся в таблице для полей или сочетаний полей, не участвующих в связях
Число таблиц в запросе 32
Число полей в наборе записей 255
Размер набора записей 1 Гбайт
Предел сортировки 255 знаков в одном или нескольких полях
Число уровней вложения запросов 50
Число знаков в ячейке на бланке запроса 1 024
Число знаков для параметра в запросе с параметрами 255
Число операторов AND в предложении WHERE или HAVING 99
Число знаков в инструкции SQL приблизительно 64 000
Вопрос: Снятие блокировки базы Access из Excel

Здравствуйте, друзья!

Пользуюсь Access-Excel, для синхронизации справочных данных из одной базы Access во многих файлах Excel. Такое самодельное MDM (master data management).
Вся эта "красота" с выпадающими каскадными списками (зависящими от предыдущего значения в записи), пока работала без VBA.
Таблицы подключаются с помощью Подключения к внешним данным на вкладке Данные в Excel, через файл .odc, в котором содержится строка подключения:

Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=f:\Общая\DWH\DWH.accdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False

Таблицы обновляются вручную, после нажатия Обновить всё. С поля Обновлять при открытии, я флажок убрал.
При обновлении база Access блокируется, появляется файл .laccdb.
Блокировка снимается только после того, как пользователь закроет файл Excel, который он обновил.
Таким образом другой пользователь не может обновиться, пока открыт файл предыдущего обновившегося пользователя.

Вопрос в следующем:
Можно ли на событие, например, после ActiveWorkbook.RefreshAll повесить процедуру снятия блокировки базы Access.
Ответ: Анатолий ( Киев ),

Вариант, о котором вы пишете нашел сам, но он возвращает только записи, без полей, и не отформатированные как таблица.
Он не подходит, поскольку использую именованные диапазоны, на которых работают выпадающие списки в Excel.

avng, подсказал следующее:



Это дает нужный результат.

Сорри за кросспостинг, не знал к какой теме лучше отнести вопрос: Access или Excel.
А два раза в Access из-за флуда товарища 2112.
Вопрос: Access и PostgreSQL: подключение к БД, работа с таблицами

Доброго времени суток!

Возникла необходимость научиться работать через элементы управления, созданные в Access 2013 с PostgreSQL.

Для начала решил подключиться к БД и присоединить из нее тестовую пустую таблицу.

Что сделано:
  • Сервер PostgreSQL работает (на удаленном компе).
  • ODBC-драйвер на моем компе установлен.
  • PGAdmin с моего компа и сервер и базу и таблицу в ней видит.
  • Тест соединения из "Администратора источника данных ODBC" выдает положительный ответ.

Что не так:
При попытке подключиться (действие повешено на одну из кнопок) выдает ошибку 3151 "ODBC - ошибка подключения к PostgreSQL35W"

Код, который затыкается на последней строке (хотя дело явно не в ней):
Visual Basic
1
2
3
4
    Set NewTableDef = CurrentDb.CreateTableDef("From_PGSQL")
    NewTableDef.Connect = "ODBC;DSN=PostgreSQL35W;DATABASE=pgtest;SERVER=!!!ИМЯСЕРВЕРА!!!;UID=pgtest;PWD=пароль;"
    NewTableDef.SourceTableName = "tt01"
    CurrentDb.TableDefs.Append NewTableDef
PostgreSQL35W - название DSN в настройках источников данных ODBC
!!!ИМЯСЕРВЕРА!!! - на самом деле на это место ставилось имя сервера из PGAdmin'a или имя компьютера, на котором запущен PostgreSQL, что на результате не сказалось.
tt01 - таблица в базе данных pgtest.
From_PGSQL - наименование будущей подсоединенной таблицы в Access (если я все верно понял - оно может быть произвольным, в разумных пределах, пробовал дать имя соответствующее имени в PostgreSQL - tt01 - те же грабли).

Что я делаю не так?
Ответ: Уважаемый alvk!
Цитирую продолжение своего предыдущего сообщения: "После установки дополнительно 32-битной версии ручное подключение к БД и ее подключение в Excel заработало."
А вот проблема программного подключения посредством VBA никуда не делась.
Вручную таблица линкуется, после того, как приликнованную таблицу вручную же удалишь (так быстрее) - начинает работать и программная линковка.
Если прилинкованную таблицу удалить и перезапустить Access - снова не линкуется.
Если прилинкованную таблицу не удалять, перезапустить Access, удалить прилинкованную таблицу - снова не линкуется.
Если прилинкованную таблицу не удалять, перезапустить Access, открыть и закрыть прилинкованную таблицу, затем удалить прилинкованную таблицу - программный линк работает.

Понять что ручная линковка делает такого, что не получается сделать программно не получается.

Добавлено через 13 минут
Уважаемые коллеги, всем спасибо за помощь!

Оказалось проблема в двух моментах:
1) Версия ODBC драйвера - должна соответствовать битности Access (из-за этого была масса глюков)
2) Совершенно дурацкая ошибка с моей стороны - не учел регистр при наборе пароля После ручного подключения, видимо, где-то сохранялась информация о том, что правильный пароль был введен.

Проблема решена, тему можно закрывать.

Добавлено через 6 минут
Кому интересно - код:
Visual Basic
1
2
3
4
    Set NewTableDef = CurrentDb.CreateTableDef("tt01")
    NewTableDef.Connect = "ODBC; DSN=PostgreSQL; SERVER=ИмяСервера; DATABASE=pgtest; UID=pgtest; PWD=Пароль;"
    NewTableDef.SourceTableName = "tt01"
    db.TableDefs.Append NewTableDef
DSN отличается от предыдущего, т.к. создан новый.
Пароль теперь с большой буквы.
Все. Всем спасибо!
Вопрос: MS Access 2003: UTF-8 -> ANSI/1251

Приветствую Cмотрящих !

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

Исходные:
ОС - win7.64
MS Access 2003

Вопрос касается перекодировки импортируемого текста.

Файл импорта текстового типа, формат данных XML, в заголовке указана кодировка UTF-8. Файл содержит данные смешанного типа - сборник и таблиц и типа структур... как то так.
Ввод реализован на VBA Access, режим чтения - бинарный
- Input () внягивается весь файл кучей в строковую переменную
- Split () делю кучу на строки в строковый массив и уже из определенных строк выдергиваю интересующие данные

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

Если импортируемый файл редактором Notepad++ перекодировать в ANSI/1251, тогда в Access-е все хокей, но это же, как там сейчас модно "базлать" - НЕКОМЕЛЬФО )))

Если текстовый редактор может справиться с такой перекодировкой, то почему бы не сделать это в самом Aceess - решил я и уперся в непроходимые деРБи (((

Приатачу катринку, там два вида из редактора и то что показала косоль дебагера в Access.

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

С уважением.
Ответ:
Сообщение от odbcsql
Вот чудак!
не-не... я вникающий ))))

Ну что вам сказать... этот кусочек кода - самое гениальное из того что я успел нацарапать в Access )))
mobile - тыщу и оди поклон в благодарность )))
ВСЁ работает... продолжаю погружение в этот странный Access ...

С уважением.
Вопрос: Вылетает ошибка при работе с Access

В общем, есть приложение, которое использует Interop и работает с Access.
После того, как я снес Office 2016 х64 и поставил office 2013 x32 начались проблемы...
При работе программы начала вылетать ошибка: HRESULT 0х80010105.
Опытным путем я нашел решение в виде установки Access DataBase Engine 2010 х32 и после этого программа работает.
Проблема в том, что стоит мне открыть Access руками, так office выполняет конфигурирование и после этого приложение опять перестает работать...
Подскажите, как решить данную проблему?
Когда стоял 2016 офис я такого не припоминал...
Ответ:
iluxa1810
В общем, есть приложение, которое использует Interop и работает с Access.
После того, как я снес Office 2016 х64 и поставил office 2013 x32 начались проблемы...
При работе программы начала вылетать ошибка: HRESULT 0х80010105.
Опытным путем я нашел решение в виде установки Access DataBase Engine 2010 х32 и после этого программа работает.
Проблема в том, что стоит мне открыть Access руками, так office выполняет конфигурирование и после этого приложение опять перестает работать...
Подскажите, как решить данную проблему?
Когда стоял 2016 офис я такого не припоминал...

Office нужно не сносит, а выкарчевывать из системы.
Иначе он оставляет огромное количество всяких библиотек и мусора.
Для этого у мелкомягких есть програмки для полного выкарчевывания Office.
Ну или переустановка системы.
PS: Не заморачивайтесь на 64 иначе хлебнете по полной.
С уважением.
Вопрос: Как доказать начальству что MS Access не подходит ?

Уважаемые коллеги по разуму, доброго Вам времени суток!

На работе(крайне не хочу указывать место) бьюсь с задачей о выделении мне более пригодных инструментов, но просят обосновать зачем.Разрабатываю используя только себя как ресурс(а занимаюсь я отчётностью, разработка-хобби). Теперь подробно.

Задача
Необходимо разработать инструмент управления базой клиентов. База клиентов - база компаний в 400+тыс строк
и 30+ столбцов, присутствующая сейчас на экселе. Мы распиливаем её в 50+ региональных центров и выкладываем им в папки. Далее, ответственный рассылает её по точкам. Региональная база содержит показатели, которые изменяют точки продаж(их около 500 по России) и отправляют ответственному по региону для сведения.Затем, мы собираем эти данные, дальше используем их для анализа, подкручиваем аналитические показатели и процесс повторяется.

"Как шло решение".
Первая попытка сделать в региональных центрах локальный инструмент, написанный полностью на MS Access потерпел неудачу(от проблем с тупостью людей до проблем с безопасниками). Сейчас руководство вернулось к теме разработки, но сказал им что на Access это сделать нельзя. Предполагаю, что даже если в этой базе будут работать ответственные по региону и головной офис - а это человек 70, то она ляжет, а по хорошему в ней должно работать человек эдак с 500 ( все ответственные по точкам).

"Мысли"
Поскольку в настоящий момент только начал изучать связку php-mysql-apache, знаний для разработки у меня не хватает. Однако хочу использовать под задачу (хотя-бы как временное решение) MS Access + MySQL. Как причину руководству называю лучшую защищённость, удобство при доработке, "правильность" и ..... и вот тут я не могу найти слов как объяснить руководству, которое слышать ничего не хочет о технической стороне вопроса(включая непосредственного начальника) о том что "путь чистого акцесса" тупиковый. Складывается ощущение что это всё надо только мне. Печально.

Из отягчяющих обстоятельств "свыше": "бюджета нет", "хотим быстро", "не хотим ничего делать"
Теперь у меня вопросы непосредственно к Вам.
1. Прав ли я в такой ситуации, предлагая более серьёзный инструмент ?
2. Хватит ли доп. компьютера для решения такой задачи или нужен прям сервер ?
3. Будут ли проблемы с лицензией MySQL? (если не ошибаюсь GPL2, нужна именно бесплатная)
и Основной вопрос: Как на цифрах доказать что требуется более серьёзный инструмент, чем MS Access ?

Очень Вас прошу помочь, больше обратиться мне не к кому.

P.S. Извините что пишу размыто и неуверенно, я ещё не профессионал, только учусь им стать. Поясню подробнее моменты.
Ответ:
Grizzlovski
Из отягчяющих обстоятельств "свыше": "бюджета нет", "хотим быстро", "не хотим ничего делать"
Теперь у меня вопросы непосредственно к Вам.
1. Прав ли я в такой ситуации, предлагая более серьёзный инструмент ?
2. Хватит ли доп. компьютера для решения такой задачи или нужен прям сервер ?
3. Будут ли проблемы с лицензией MySQL? (если не ошибаюсь GPL2, нужна именно бесплатная)
и Основной вопрос: Как на цифрах доказать что требуется более серьёзный инструмент, чем MS Access ?

Очень Вас прошу помочь, больше обратиться мне не к кому.

P.S. Извините что пишу размыто и неуверенно, я ещё не профессионал, только учусь им стать. Поясню подробнее моменты.


1) Что вы понимаете под "серьезный инструмент"?

А так для вашей задачи можно попробовать от CMS(Joomla), до ERP (ADempiere)

2) Доп. компьютер = сервер. :-)
3) У свободных лицензий проблем не много. Я бы посоветовал вместо MySQL - PostgreSQL