ODBC - Call Failed Access

maximovega

Извиняюсь, если вопрос для Development чересчур наивный или простой.
Не могу справиться с ошибкой, которая на сервере решается использованием оператора COLLATE. Access его не узнаёт. Я что-то могу здесь сделать?

al70

Проклятье какое-то. Покажи запрос, не стестняйся.

maximovega

   SELECT dbo_Contracts.Contract, dbo_Subcontractors.Colour
   FROM dbo_Contracts LEFT JOIN dbo_Subcontractors ON
     dbo_Contracts.Contract = dbo_Subcontractors.Policy
   В SQL Server Management Studio решался просто - условием COLLATE German_CI_AS после соединения Contract и Policy.

hprt

а если collate убрать - access справится?

hprt

 
Vot imenno, chto COLLATE tam ne pishu, ego Access ne znaet. Sprashivayu, kakie analogi?

ты понимаешь, для чего нужен этот оператор? два вопроса
1. Access может обработать данные без этого оператора?
2. Почему у вас разные collation? На что влияет выбор того или иного варианта?
PS Access не знаю почти, но если надо будет разберусь

maximovega

Честно: разбираюсь во всём, связанном с компьютерами и программированием едва-едва. Прочитала уже много, что нашла в, например, google, но (говорите мне, что это стыдно - признаюсь) действительно не хватает навыка или сноровки, не могу разобраться...

hprt

Это мы все уже не раз слышали :) Не твое - брось. Продолжаешь - учи матчасть.
Collation задает порядок сортировки строк. В простейшем случае - просто зависимость от регистра. Оператор collate, собственно, указывает на то, как надо строки сравнивть. Надо объяснять, как могут поменяться результаты джойна, когда одни данные заполнялись с учетом регистра, другие - нет, при выборе метода сравнения?
В MSSQL нельзя в лоб сравнивать строки с разным collation, даже если они очень похожи, поэтому надо использовать оператор collate. Как в таких случаях ведет себя Access мне неведомо. Если без него работает, при этом правильно - убрать и успокоиться. Если работет не так, или не работает вообще - понять, что надо и думать дальше. Поэтому вопрос и был задан - как ведет себя Access.
Почему строки хранятся с разным collation тоже интересный, но, боюсь, спрашивать бесполезно

maximovega

Ботаю. :) Хотя часто слышу, что мне "на ухо наступили" в этом плане и что я "блондинка", поскольку понадобилось 3 года мытарства, ночных сидений и пересдач, чтобы осознать, как работает, например, i = i+ 1. И мне всегда говорили, что это основы. :( И подобные, и иные "основы" меня до сих пор шокируют. Умею подготовить хорошенькую презентацию, провести переговоры, провести фундаментальный анализ, “наколдовать” замечательный наглядный обзор в Excel, добавить очаровательный Word, только мои компютерные способности этим резко ограничиваются.
Бросаю, передаю подобные дела специалистам, но иногда, как ни выкручивайся, остаёшься с этим один на один.
В этом и проблема: “Если работет не так, или не работает вообще - понять, что надо и думать дальше. Поэтому вопрос и был задан - как ведет себя Access.” Не работает. Как ведёт – непонятно. Запрос также не открывается в виде рисуночков, только SQL. COLLATE не узнаёт, а если COLLATE не написать, запрос запускается и выдаёт Call Failed.

hprt

Я бы привел данные к одному collation. Сделать это можно командой alter table alter column ...
Но это надо делать ОЧЕНЬ аккуратно - можно запросто сломать все остальное, начиная от простых запросов и кончая бизнес-логикой. И прежде чем делать это, разумеется, надо ответить на мой второй вопрос - почему они разные.
Насчет того, можно ли что-нибудь сделать в Access - не знаю

maximovega

   Это смогу, наверное, приписать - это как бы привести к одному типу?
   Если да, то в которых табличках (только ли столбики Contract, Policy? к одному типу с чем, и что писать после ALTER TABLE ALTER COLUMN?

hprt

Я специально не стал писать полностью. Еще раз, ПОДУМАЙ!
Там на самом деле много всего может понадобиться. Если есть индексы - придется их перестраивать, внешние ключи - тоже. Изменение коллейшн приведет к тому, что все запросы, которые используют эти поля при сравнении, сломаются. Потом, при чем тут я при ответе на вопрос "в которых таблицах"? Это должна ТЫ решить.
Вообще, делай как знаешь, я умываю руки - если что сломается, помогать чинить не собираюсь

maximovega

Думать не пришлось: используемые таблички не мои - вмешиваться запретили. Есть другие выходы? Нельзя же так, что это единственное, что осталось...

hprt

можно сделать копии таблиц с нужным collation и использовать в access их. Как их поддерживать - раз в час, по мере поступления данных или перед запросом - много от чего зависит, поэтому, опять же, думай сама

maximovega

Спасибо за подсказку.
Я делаю локальную копию таблички в самом Access. SQL запись смотрится так
SELECT * INTO [Contracts]
FROM [dbo_Contracts]
Это работает, но если попытаться потом применить, как советует google, ALTER TABLE ALTER COLUMN, операция COLLATE не узнаётся опять! Как всё же задача перенести процедуры в сам Access так, чтобы дальше совсем не "ходить" на сервер осуществима?

hprt

сделай вьюшку на сервере, так даже проще будет

maximovega

   На поняла одну вещь: когда CREATE VIEW сделаю, как его запускать из Access (так, чтобы обновлять без работы на SQL Server, полностью переключиться на Access)?

hprt

Тебе даже на sql.ru уже все тысячу раз объяснили. Честно, не знаю, что написать кроме того, что написали там.

kill-still

PS Access не знаю почти, но если надо будет разберусь
Оно и не обязательно, MS Jet диалектом почти копия T-SQL, хотя начинка совсем разная.

kill-still

Думать не пришлось: используемые таблички не мои - вмешиваться запретили.
Кто вообще таких людей к продакшену пускает? :smirk:

hprt

ок, раз тебе не обязательно знать, расскажи, пожалуйста, поддерживаются ли разные collation в access, и как с ними работать - мне интересно. Язык же один почти, что там. Какая разница, что начинки разные

kill-still

А зачем такие вещи (для которых надо что-то больше, чем стандарт анси) делать на access, которая совсем не для этого предназначена?

hprt

Я, честно говоря, вообще с трудом представляю, для чего использовать Access, кроме как для личных нужд, хотя и этого я бы не стал делать. Однако очень часто бывает, что изначально система планировалась небольшая, но за годы доработок выросла в огромного монстра. Что с такой системой делать? Конечно, надо переносить, но стоимость переноса может быть довольно высока.

maximovega

До сих пор не получается. :( Называйте как угодно, но помогите найти эти "фишки" в Access 2010, пожалуйста.

hprt

1. Создать вьюшку на сервере и использовать ее в access как обычную таблицу (линковать таблицы с сервера, надеюсь, умеешь)
2. Сделать "Запрос", или как там в Access это называется и использовать вместо таблиц. На sql.ru все это писали

maximovega

Но как это сделать в нерусском Access 2010? И ведь если будут нужны изменения в коде, опять идти на сервер, что исключено... :(

hprt

Я тебе больше скажу: мой Access весь на чешском. До английского могу добраться на том же сервере, например, но это неважно: оба языка знаю, только структура от картинок, вывешенных на sql.ru, кардинально отличается.
Я тебе больше скажу. Никому нет дела, на каком языке у тебя Access. Я, например, ни до какого добраться не могу, но это не важно. Открой Help хоть раз в жизни! Если даже он не поможет - используй вьюшки, тебе как минимум два решения предложили!
PS Если отвечаешь по теме, то давай не в приват - мало-ли, кто еще захочет присоединиться к обсуждению :grin:

maximovega

   Да, ты прав. Спасибо, что не проявляешь достаточную деликатность: к чему "церемониться"? Буду теперь знать, что печатать в темах личные сообщения без предварительного согласия отправителя - культурно и достойно.

hprt

Личного тут ничего не вижу, уж извини. И действительно считаю, что ты должна была это писать тут. Другую ветку переписки, заметь, не выложил, хотя можно было бы поглумиться. Это я к тому, что не надо демонизировать...

apl13

Ты недостаточно изысканен!

stm7473768

Другую ветку переписки, заметь, не выложил, хотя можно было бы поглумиться.
Хм-м, поел сам, покорми других!

kill-still

Да, да, просим. Можно в приват.
З.Ы. Поменяю на детские фотки Флоси. :)
Оставить комментарий
Имя или ник:
Комментарий: