Как использовать MySQL Views с Ms Access 2007, не получая нежелательной почты для строковых столбцов?

Обзор проблемы:

У меня есть внешний интерфейс Ms Access 2007, подключенный к базе данных MySQL. Я создал представление в MySQL, так как не смог сгенерировать такое же представление в самом Access, и оно отлично работает с программным обеспечением MySQL Workbench, но если я использую Select * from myView в базе данных MS Access 2007, я получаю все, от случайного китайского символа до Длинные двоичные данные для того, что должно быть строкой.

Как повторить:

Чтобы помочь вам понять мою проблему и, надеюсь, воспроизвести ее, я написал следующее объяснение:

Сначала создайте таблицу и заполните ее в MySQL, используя следующий код:

--
-- Table structure for table `aTestTbl`
--

DROP TABLE IF EXISTS `aTestTbl`;
CREATE TABLE `aTestTbl` (
  `ID` int(10) unsigned NOT NULL,
  `ExternalID` int(10) NOT NULL,
  `SomeValue` varchar(25) NOT NULL
);

--
-- Dumping data for table `aTestTbl`
--

LOCK TABLES `aTestTbl` WRITE;
/*!40000 ALTER TABLE `aTestTbl` DISABLE KEYS */;
INSERT INTO `aTestTbl` VALUES (1,1,'Value1');
INSERT INTO `aTestTbl` VALUES (2,1,'Value2');
INSERT INTO `aTestTbl` VALUES (3,2,'Value3');
INSERT INTO `aTestTbl` VALUES (4,2,'Value4');
/*!40000 ALTER TABLE `aTestTbl` ENABLE KEYS */;
UNLOCK TABLES;

Теперь создайте представление MySQL ИЗ следующего SQL:

SELECT ExternalID,
    group_concat(distinct SomeValue order by SomeValue ASC separator ', ') AS `ExtVal`
FROM aTestTbl
GROUP BY ExternalID;

Затем запустите следующий SQL, чтобы убедиться, что все работает:

SELECT *
FROM new_view;

Должно получиться что-то вроде:

|ExternalID  | SomeValue      |
|1           | Value1, Value2 |
|2           | Value3, Value4 |

Если вы затем подключите эту таблицу к базе данных MS Access 2007 и поместите тот же SQL

SELECT *
FROM new_view;

в новый запрос, я надеюсь (как и я), вы получите что-то вроде:

|ExternalID  | SomeValue        |
|1           | Long Binary Data |
|2           | Long Binary Data |

Я пытался использовать CAST(val AS CHAR) вокруг значения, но это не помогло.

Вопросы):

  1. Почему это?
  2. Как я могу заставить Access показывать правильную строку?

person GazB    schedule 12.07.2011    source источник
comment
Мне удалось решить проблему с помощью запроса Pass-Though в MS Access, но я все же хотел бы оставить этот вопрос, чтобы узнать, знает ли кто-нибудь, почему я не могу использовать представления MySQL в MS Access 2007.   -  person GazB    schedule 12.07.2011
comment
Я также обнаружил, что просто представление таблицы (со строковыми столбцами) создает одни и те же длинные двоичные данные для каждого строкового столбца!   -  person GazB    schedule 12.07.2011
comment
Пробовали ли вы удалять и воссоздавать связанные таблицы? Возможно, эту проблему вызывают некоторые устаревшие метаданные из предыдущей версии ваших таблиц MySQL. К сожалению, простое обновление ссылок не очищает все метаданные.   -  person David-W-Fenton    schedule 13.07.2011
comment
Спасибо, Дэвид, но это не так. Моя БД удаляет и повторно подключает все таблицы и т. Д. При входе в систему, и этот пример предназначен для новой БД, созданной специально для этого вопроса. :)   -  person GazB    schedule 26.07.2011


Ответы (1)


Похоже, что это уже не проблема. Я только что проверил это с помощью...

  • Access_2010 с использованием «связанной таблицы» с представлением MySQL new_view

  • через драйвер MySQL ODBC 5.2w

  • против MySQL 5.5.29-0ubuntu0.12.04.2

... и представление правильно отображается в Access:

MySQL_view

person Gord Thompson    schedule 30.03.2013
comment
хе-хе, вы хотите получить значок stackoverflow.com/badges/17/necromancer с этим? ;) Не использовал Access больше года, так что не могу проверить. Если вы получите свои 5 голосов (и значок d), я буду считать, что это правильно, и отмечу это как таковое. :) - person GazB; 30.03.2013
comment
@GazB У меня уже были все кусочки и кусочки, поэтому я подумал, почему бы и нет? :) У меня также был некоторый разочаровывающий опыт работы со старыми версиями MySQL ODBC, поэтому я решил посмотреть, улучшилось ли что-то. - person Gord Thompson; 30.03.2013