ODBC - Call Failed Access
Проклятье какое-то. Покажи запрос, не стестняйся.
FROM dbo_Contracts LEFT JOIN dbo_Subcontractors ON
dbo_Contracts.Contract = dbo_Subcontractors.Policy
В SQL Server Management Studio решался просто - условием COLLATE German_CI_AS после соединения Contract и Policy.
а если collate убрать - access справится?
Vot imenno, chto COLLATE tam ne pishu, ego Access ne znaet. Sprashivayu, kakie analogi?
ты понимаешь, для чего нужен этот оператор? два вопроса
1. Access может обработать данные без этого оператора?
2. Почему у вас разные collation? На что влияет выбор того или иного варианта?
PS Access не знаю почти, но если надо будет разберусь
Честно: разбираюсь во всём, связанном с компьютерами и программированием едва-едва. Прочитала уже много, что нашла в, например, google, но (говорите мне, что это стыдно - признаюсь) действительно не хватает навыка или сноровки, не могу разобраться...
Collation задает порядок сортировки строк. В простейшем случае - просто зависимость от регистра. Оператор collate, собственно, указывает на то, как надо строки сравнивть. Надо объяснять, как могут поменяться результаты джойна, когда одни данные заполнялись с учетом регистра, другие - нет, при выборе метода сравнения?
В MSSQL нельзя в лоб сравнивать строки с разным collation, даже если они очень похожи, поэтому надо использовать оператор collate. Как в таких случаях ведет себя Access мне неведомо. Если без него работает, при этом правильно - убрать и успокоиться. Если работет не так, или не работает вообще - понять, что надо и думать дальше. Поэтому вопрос и был задан - как ведет себя Access.
Почему строки хранятся с разным collation тоже интересный, но, боюсь, спрашивать бесполезно
Бросаю, передаю подобные дела специалистам, но иногда, как ни выкручивайся, остаёшься с этим один на один.
В этом и проблема: “Если работет не так, или не работает вообще - понять, что надо и думать дальше. Поэтому вопрос и был задан - как ведет себя Access.” Не работает. Как ведёт – непонятно. Запрос также не открывается в виде рисуночков, только SQL. COLLATE не узнаёт, а если COLLATE не написать, запрос запускается и выдаёт Call Failed.
Но это надо делать ОЧЕНЬ аккуратно - можно запросто сломать все остальное, начиная от простых запросов и кончая бизнес-логикой. И прежде чем делать это, разумеется, надо ответить на мой второй вопрос - почему они разные.
Насчет того, можно ли что-нибудь сделать в Access - не знаю
Если да, то в которых табличках (только ли столбики Contract, Policy? к одному типу с чем, и что писать после ALTER TABLE ALTER COLUMN?
Там на самом деле много всего может понадобиться. Если есть индексы - придется их перестраивать, внешние ключи - тоже. Изменение коллейшн приведет к тому, что все запросы, которые используют эти поля при сравнении, сломаются. Потом, при чем тут я при ответе на вопрос "в которых таблицах"? Это должна ТЫ решить.
Вообще, делай как знаешь, я умываю руки - если что сломается, помогать чинить не собираюсь
Думать не пришлось: используемые таблички не мои - вмешиваться запретили. Есть другие выходы? Нельзя же так, что это единственное, что осталось...
можно сделать копии таблиц с нужным collation и использовать в access их. Как их поддерживать - раз в час, по мере поступления данных или перед запросом - много от чего зависит, поэтому, опять же, думай сама
Я делаю локальную копию таблички в самом Access. SQL запись смотрится так
SELECT * INTO [Contracts]
FROM [dbo_Contracts]
Это работает, но если попытаться потом применить, как советует google, ALTER TABLE ALTER COLUMN, операция COLLATE не узнаётся опять! Как всё же задача перенести процедуры в сам Access так, чтобы дальше совсем не "ходить" на сервер осуществима?
сделай вьюшку на сервере, так даже проще будет
На поняла одну вещь: когда CREATE VIEW сделаю, как его запускать из Access (так, чтобы обновлять без работы на SQL Server, полностью переключиться на Access)?
Тебе даже на sql.ru уже все тысячу раз объяснили. Честно, не знаю, что написать кроме того, что написали там.
PS Access не знаю почти, но если надо будет разберусьОно и не обязательно, MS Jet диалектом почти копия T-SQL, хотя начинка совсем разная.
Думать не пришлось: используемые таблички не мои - вмешиваться запретили.Кто вообще таких людей к продакшену пускает?
ок, раз тебе не обязательно знать, расскажи, пожалуйста, поддерживаются ли разные collation в access, и как с ними работать - мне интересно. Язык же один почти, что там. Какая разница, что начинки разные
А зачем такие вещи (для которых надо что-то больше, чем стандарт анси) делать на access, которая совсем не для этого предназначена?
Я, честно говоря, вообще с трудом представляю, для чего использовать Access, кроме как для личных нужд, хотя и этого я бы не стал делать. Однако очень часто бывает, что изначально система планировалась небольшая, но за годы доработок выросла в огромного монстра. Что с такой системой делать? Конечно, надо переносить, но стоимость переноса может быть довольно высока.
До сих пор не получается. Называйте как угодно, но помогите найти эти "фишки" в Access 2010, пожалуйста.
2. Сделать "Запрос", или как там в Access это называется и использовать вместо таблиц. На sql.ru все это писали
Но как это сделать в нерусском Access 2010? И ведь если будут нужны изменения в коде, опять идти на сервер, что исключено...
Я тебе больше скажу: мой Access весь на чешском. До английского могу добраться на том же сервере, например, но это неважно: оба языка знаю, только структура от картинок, вывешенных на sql.ru, кардинально отличается.Я тебе больше скажу. Никому нет дела, на каком языке у тебя Access. Я, например, ни до какого добраться не могу, но это не важно. Открой Help хоть раз в жизни! Если даже он не поможет - используй вьюшки, тебе как минимум два решения предложили!
PS Если отвечаешь по теме, то давай не в приват - мало-ли, кто еще захочет присоединиться к обсуждению
Да, ты прав. Спасибо, что не проявляешь достаточную деликатность: к чему "церемониться"? Буду теперь знать, что печатать в темах личные сообщения без предварительного согласия отправителя - культурно и достойно.
Личного тут ничего не вижу, уж извини. И действительно считаю, что ты должна была это писать тут. Другую ветку переписки, заметь, не выложил, хотя можно было бы поглумиться. Это я к тому, что не надо демонизировать...
Ты недостаточно изысканен!
Другую ветку переписки, заметь, не выложил, хотя можно было бы поглумиться.Хм-м, поел сам, покорми других!
З.Ы. Поменяю на детские фотки Флоси.
Оставить комментарий
maximovega
Извиняюсь, если вопрос для Development чересчур наивный или простой.Не могу справиться с ошибкой, которая на сервере решается использованием оператора COLLATE. Access его не узнаёт. Я что-то могу здесь сделать?