Не передается строка из Фокса

serg0265
Дата: 06.10.2012 00:10:34
Очень странная история. В Фоксе 9 есть запрос, который показывает 19 строк. В Access 2003 есть связанная с этим запросом таблица. При открытии запроса в Аксе получаю 18 строк. Как такое может быть?! И лечить как?
serg0265
Дата: 06.10.2012 00:13:18
Запрос привязывается c помощью ODBC Microsoft driver.
Dima T
Дата: 06.10.2012 13:02:27
Выбирай какой вариант твой:
1. Есть помеченные на удаление записи и один из способов выборки это не учитывает.
2. Разные запросы - сравни синтаксис
3. Разные данные. Возможно у тебя несколько копий одной базы.

Я бы начал с той 19-й записи и для начала бы ответил на вопрос должна ли она быть в конечной выборке? Тогда будет понятно где неправильная выборка, там и искать ошибку.
ВладимирМ
Дата: 06.10.2012 13:05:15
1. Среди отбираемых записей есть записи, помеченные как удаленные? Какая настройка SET DELETED в среде FoxPro и в строке подключения Access?
2. Какая кодовая страница исходных таблиц FoxPro? Это таблицы, созданные в FoxPro for DOS или в VFP9?
3. Для подключения к "родным" таблица VFP9 следует пользоваться родным же драйвером OLE DB для VFP9. Драйвер ODBC был создан для версии VFP6 (хотя подходит и для VFP7). Для версий VFP8 и VFP9 работает только при определенных структурах таблиц.
serg0265
Дата: 06.10.2012 20:34:38
Dima T,

1. Смотрел в Fox. Помеченных на удаление записей нет (черная метка слева). Тем более что я произвел PACK над всеми таблицами и базой.
2. В том то и дело, что используется один и тот же запрос(View) в Fox. Наверное плохо объяснил в начале. Есть сохраненная View в Фоксе (а не таблица). Я сравниваю то, что это представление дает в Фоксе и то, что открывает связь в Access. View содержит несколько связанных Join таблиц той же БД Fox.
3. Этого не м.б.. Нет других БД. И см. п.2..
4. Запись есть в выборке в Фоксе. В Access ее нет, а должна быть. Как будто Access ее отсеивает. Пробовал продублировать строку в Фоксе. Но ни дубликат, ни обе записи не появились.
serg0265
Дата: 06.10.2012 20:43:36
ВладимирМ,

1. См.предыдущий ответ.
2. Кодировка Windows, все отображается корректно в окнах. Таблицы созданы в приложении Fox. Но это неважно, т.к. на количестве возвращаемых записей это не должно сказаться. Ведь с точки зрения Access эта связанная таблица - просто таблица с какими-то там УЖЕ СФОРМИРОВАННЫМИ в Фоксе записями.
3. Где их найти. Вообще-то Фокс 9 стоит нап том же ПК, на котором я открываю Access.Если он установил компоненты, то они уже в системе.
serg0265
Дата: 06.10.2012 20:51:19
И кстати, это не только особенность Access. Тоn же самый результат в MS Visual Studio 2008.
ВладимирМ
Дата: 07.10.2012 00:23:05
serg0265
2. Кодировка Windows, все отображается корректно в окнах. Таблицы созданы в приложении Fox.

"Кодировка Windows" - это не ответ. Нужен конкретный номер кодовой страницы, которую можно получить в среде FoxPro через функцию CPDBF(). И тот факт, что они были созданы в среде FoxPro тоже ни о чем не говорит. У Вас ведь проблема не в FoxPro, а во внешнем доступе к данным FoxPro.

serg0265
Но это неважно, т.к. на количестве возвращаемых записей это не должно сказаться. Ведь с точки зрения Access эта связанная таблица - просто таблица с какими-то там УЖЕ СФОРМИРОВАННЫМИ в Фоксе записями.

Это Вам так кажется.

Во-первых, Local View в FoxPro физически представляет собой некую обертку над командой Select-SQL. Это значит, что обращаясь в View Вы каждый раз заново делаете выборку. А какие записи при этом выбираются зависит от текущих настроек среды FoxPro, которые как раз и устанавливаются при установке соединения.

Во-вторых, если Вы используете драйвер ODBC и кодовые страницы отличны от 1251, то часть данных может быть потеряна из-за глюков оптимизатора запросов. Например, насколько я помню, при кодовой странице 866 "терялись" записи, если выборка шла по целочисленному полю со значением 22.

serg0265
3. Где их найти. Вообще-то Фокс 9 стоит нап том же ПК, на котором я открываю Access.Если он установил компоненты, то они уже в системе.

Драйвер VFPOLEDB поставляется вместе с FoxPro и устанавливается при установке FoxPro. Но Вы можете его бесплатно скачать с сайта Microsoft. Или Вы не можете установить соединение не через драйвер ODBC, а через OLE DB (ADO)?

Попробуйте сделать отдельный запрос, который будет обращаться не к View, а напрямую к таблице-источнику и выберите именно эту конкретную запись, которую "потеряли".
serg0265
Дата: 07.10.2012 16:54:14
ВладимирМ,

1. CPDBF() выдает для таблиц, которые вызываются представлением, кодировку 1251
2. Можно ли управлять оптимизатором?
3. Через OLEDB невозможно в Access 2003 сделать связанным представление, чтобы посмотреть результат. Или я не знаю как. Подскажите.
4. Попробовал сделать в Access запрос, основанный не на представлении Фокса, а на таблицах, которые он использует (с аналогичным SELECT привязал их в Access). Выдает все 19 записей. К сожалению этот обходной путь крайне нежелателен, т.к. при этом время отработки запроса гораздо больше, чем с представлением.
ВладимирМ
Дата: 07.10.2012 18:26:05
Приведите команду Select-SQL на основании которой построен View. Только не то, что Вам кажется должно быть, а то, что есть на самом деле. В среде FoxPro в дизайнере View выберите пункт меню Query \ View SQL. Скопируйте все, что будет отображено в открывшемся окне.