Не удается изменить источник данных Access сводной таблицы - ошибка в Excel 2000 SP3? - PullRequest
1 голос
/ 29 марта 2010

У меня есть набор таблиц Excel 2000 SP3 с сводными таблицами, которые получают данные из базы данных Access 2000 SP3, созданной подрядчиком, покинувшим нашу компанию. К сожалению, он выполнил всю свою работу в своей личной области в сети компании (Novell), и теперь, когда он покинул нас, спецификация накопителя была удалена и является недействительной.

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

Если я буду следовать советам, данным в другом месте на этом сайте (откройте мастер, нажмите «Назад», чтобы перейти к «Шаг 2 из 3», нажмите «Получить данные ...», я получу сообщение о том, что старая спецификация файла недействительна) путь, и мне нужно проверить, что имя пути неверно и что я подключен к серверу, на котором находится файл.

Затем я нажимаю кнопку ОК и получаю диалог входа в систему с кнопкой «База данных ...» справа. Я нажимаю на это и получаю диалоговое окно «Выбор базы данных», которое позволяет мне выбрать подходящую базу данных в правильном новом месте.

Затем я нажимаю ОК, и я возвращаюсь к экрану «Вход». Я могу подтвердить, что он принял мое новое местоположение, нажав «База данных ...», как и раньше, и НОВОЕ местоположение все еще отображается.

Пока все хорошо - но если я затем нажимаю кнопку ОК, я получаю два бесполезных сообщения - сначала я получаю одно, в котором говорится, что Excel «Не удалось использовать» |; файл уже используется. ' - хотя другие файлы не используются. Нажав на ОК, я возвращаюсь в диалоговое окно «Вход».

Повторное нажатие кнопки «ОК» выдает мне то же сообщение, что и раньше, сообщая, что спецификация файлов «СТАРЫЙ» недействительна (как будто я ничего не менял), но нажатие на кнопку «База данных ...» показывает, что правильный (НОВЫЙ) местоположение базы данных все еще выбрано.

Может ли кто-нибудь сказать мне, как использовать VBA для изменения информации о ссылке, не тратя часы на борьбу с мастером сводных таблиц - желательно аналогично тому, как вы обновляете таблицу доступа: -

db.TableDefs(strLinkName).Connect = strNewLink
db.TableDefs(strLinkName).RefreshLink

Спасибо!

Ответы [ 3 ]

0 голосов
/ 29 марта 2010

Выберите ячейку в сводной таблице, откройте vbe (Alt + F11), перейдите в окно немедленных действий (Ctl + G) и введите

?activecell.PivotTable.PivotCache.Connection

Это вернет строку подключения, используемую в данный момент СТ (неправильную). Если вы измените свойство Connection, вы можете указать в нужном месте. Возможно, вы сможете расшифровать строку подключения и изменить ее самостоятельно. Но если нет, есть другой вариант. Откройте новую книгу «Данные - Внешние данные - Новый запрос» (или аналогичную, у меня больше нет 2000). Создайте QueryTable, который указывает на базу данных, которую вы хотите. Затем вернитесь в окно «Немедленно» и введите

?Activesheet.QueryTables(1).Connection

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

См. Также http://dicks -clicks.com / excel / ExternalData5.htm # ChangeConn , хотя это не относится к сводным таблицам, многие методы совпадают.

0 голосов
/ 31 марта 2010

Что ж, после некоторого взлома по устранению команд XL2002 (+) надстройка PivotPlayPlus наконец-то сработала для меня в XL2000! Теперь я успешно перенес 2 книги.

Ключевая проблема объясняется в http://www.pcreview.co.uk/forums/thread-1003719.php, а именно в том, что недокументированное ограничение в 255 символов при установке свойства CommandText в XL2000. Мой измененный CommandText был длиной более 500 символов, поэтому мне пришлось его сократить.

Наиболее очевидный способ сделать это - заменить все явно указанные параметры SELECT в CommandText на SELECT * и удалить теперь лишнее имя псевдонима в конце запроса - но при двойной проверке, возвращаются ли параметры из Access имел совпадение 1: 1 с тем, что ожидалось запросом сводной таблицы, я обнаружил, что в запросе Access отсутствует один из столбцов - поэтому восстановленная из резервной копии база данных была не совсем совместима!

Итак, мой метод, который кажется успешным с XL2000, заключается в

  1. Создайте резервную копию обновляемой таблицы.

1a. (только в первый раз). Установите надстройку, измените всю обработку ошибок на «On Error Goto 0», чтобы она сразу же прервалась при ошибке, затем запустите надстройку и постепенно закомментируйте все команды XL2002 (+) по мере их появления, выбирая пути, где переменные по умолчанию имеют значение False, если встречается команда If.

  1. Используйте надстройку, чтобы отобразить SQL-запрос в CommandText, определить используемый запрос, затем перейти к базе данных Access и использовать следующий код, чтобы определить плохие внешние ссылки и вручную исправить их по одному.

Sub PrintLinks ()

Dim i As Integer

For i = 0 To CurrentDb.TableDefs.Count - 1
    Debug.Print CurrentDb.TableDefs(i).Name, CurrentDb.TableDefs(i).Connect
Next

End Sub

Sub RefreshLink ()

Dim strLinkName As String
Dim strNewLink As String
Dim db As Object
Set db = CurrentDb

strLinkName = [the "CurrentDb.TableDefs(i).Name" item to be altered]
strNewLink =  [the new value of CurrentDb.TableDefs(i).Connect]

Debug.Print db.TableDefs(strLinkName).Connect
db.TableDefs(strLinkName).Connect = strNewLink
db.TableDefs(strLinkName).RefreshLink
Debug.Print db.TableDefs(strLinkName).Connect

End Sub

  1. Запустите запрос Access с исправленными путями (в Access) и посмотрите, какие столбцы возвращаются.

  2. Сравните эти имена столбцов с запросом CommandText, показанным в надстройке. Если они не совпадают, сделайте все необходимое, чтобы столбцы запроса Access точно соответствовали столбцам CommandText сводной таблицы.

  3. Затем вы можете изменить часть SELECT запроса CommandText сводной таблицы на SELECT * и удалить излишнее псевдоним псевдонима в конце запроса, а также изменить его путь на новый (это текст должен быть менее 255 символов), затем измените пути в другом окне редактирования в надстройке.

  4. Нажмите Сохранить в надстройке и выйдите. Теперь проверьте, что электронную таблицу можно обновить с помощью «[RightClick] Refreshdata» на самом объекте экрана. Сохраните его.

0 голосов
/ 29 марта 2010

Установка Pivot play plus (бесплатная надстройка).

Edit: Если это не сработает, и если вы можете сделать новый путь таким же, как и старый путь, вы также можете попробовать открыть xls с помощью двоичного редактора и обновить путь вручную. Однажды я сделал это давным-давно, когда компания сменила свои серверы и отображение, и я обнаружил, что это был самый быстрый способ сделать эту работу. Однако, это не сработает, если вы измените длину строки пути, возможно потому, что длина строки где-то хранится.
Я думаю, что в то время я использовал Catch22 Hexedit .

...