Форум: "Базы";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизЧто надо для выполнения обединения (SQL) с участием MEMO полей? Найти похожие ветки
← →
angel_b © (2005-08-03 18:22) [0]Есть две машины. Обе одинаковые. На обеих WinXP Pro RUS + Office 2003 + MDAC 2.8.
На одной запрос-объединение с участием MEMO полей выполняется, на другой говорит что "Не возможно выполнить объединение с участием MEMO, OLE и .... полей".
Я не помню что и в какомпорядке ставилось на первую машину (где выполняется). На вторую уже поставил вроде все что только можно, а не выполняется.
Может кто знает? Спасибо заранее.
← →
Johnmen © (2005-08-04 09:06) [1]Осталось сказать про СУБД.
И компоненты доступа...
← →
sniknik © (2005-08-04 10:36) [2]кусочек из хелпа
Дополнительные сведения
Операцию INNER JOIN можно использовать в любом предложении FROM. Это самые обычные типы связывания. Они объединяют записи двух таблиц, если связующие поля обеих таблиц содержат одинаковые значения.
Операцию INNER JOIN можно использовать с таблицами «Отделы» и «Сотрудники» для отбора всех сотрудников каждого отдела. Для отбора же всех отделов (в том числе тех, в которых нет ни одного сотрудника) или всех сотрудников (в том числе тех, кто не приписан ни к одному отделу) следует использовать операцию LEFT JOIN или RIGHT JOIN, которая создает внешнее объединение.
Попытка объединить поля Memo или объекта OLE приведет к возникновению ошибки.
Допускается объединение любых двух числовых полей подобных типов. Например, поле счетчика можно объединить с полем типа «Длинное целое». Однако нельзя объединить типы полей Single и Double.
странно что хоть в одном случае работает. но возможно обьеденяются не по полям, а по выражениям(вычислении) с участием мемо. (тогда результат char(255))
← →
sniknik © (2005-08-04 10:46) [3]> На обеих WinXP Pro RUS + Office 2003 + MDAC 2.8.
Jet в MDAC не входит с с версии 2.6 включительно. т.е. может быть различным раз специально не обновлял, а он указан как используемый движок.
← →
angel_b © (2005-08-04 11:29) [4]Я использовал неправильный термин. Не объединение (JOIN), а Слияние (UNION). Не знаю на сколько это меняет суть.
Движок MS Access (Jet).
2Johnmen: Компоненты доступа значения не имеют. Ощибка при выполнении запроса. Хоть из Delphi хоть из Access.
2sniknik: На одной машине работает стабильно и всегда. Я не знал, что Jet не входит в MDAС. Но я не обновлял его вроде и другими средствами.
← →
sniknik © (2005-08-04 13:24) [5]> Я использовал неправильный термин. Не объединение (JOIN), а Слияние (UNION).
ошибка
> Не возможно выполнить объединение с участием MEMO, OLE и .... полей"
от join-а
движок тоже термин спутал? ;о))
← →
AngeL B. (2005-08-04 15:29) [6]2sniknik: Вот запрос
SELECT SO.Title, S.BaseCost, S.SaleCost, B.Data as TypeTitle
FROM SaleObject AS SO, Sales AS S, [Справочник] AS B
WHERE S.ObjectKey = SO.RecKey
AND S.SaleDate = (SELECT Max(S2.SaleDate) FROM Sales AS S2 WHERE S2.ObjectKey=SO.RecKey)
AND B.RecKey = SO.ObjectType
AND S.SaleDate >= :StartDate AND S.SaleDate <= :EndDate
UNION
SELECT Title, Cost AS BaseCost, Cost AS SaleCost, "Участки" AS TypeTitle FROM Ground
WHERE ContractDate >= :StartDate AND ContractDate <= :EndDate AND ObjectKey IS NULL
UNION
SELECT Title, Cost AS BaseCost, Cost AS SaleCost, "Участки2" AS TypeTitle FROM Ground
WHERE ContractDate >= :StartDate AND ContractDate <= :EndDate AND NOT(ObjectKey IS NULL)
ORDER BY TypeTitle
По отдельности, каждый запрос работает, через UNION нет. Поле Title в таблице Ground - MEMO, в таблице SaleObject - Char(200)
По англ. в ошибке он говорит слово "union".
← →
sniknik © (2005-08-04 15:58) [7]> S.ObjectKey = SO.RecKey
...
> AND B.RecKey = SO.ObjectType
...
неявное обьеденение...
← →
sniknik © (2005-08-04 16:06) [8]> По англ. в ошибке он говорит слово "union".
а, так ты и ошибку "перевел" !? тогда все сказаное лажа (возможно)... начинай вопрос заново, только исходные данные точно приводи.
+ (тоже возможно)
UNION неявно сортирует результат, а поле принимает тип первого в запросе, т.к. у тебя смешаны типы он возможно пытается отсортировать мемо...
проверь
первое поставь вместо UNION - UNION ALL (нет сортировки, но возможны дубли тогда)
и второе на первое место поставь тот запрос в котором Title - MEMO. (чтобы не пыталось привести его к char(200) что невозможно, а наоборот его к MEMO приводило)
← →
Johnmen © (2005-08-04 16:12) [9]>Поле Title в таблице Ground - MEMO, в таблице SaleObject - Char(200)
Вот она и проблема. Типы соответствующих полей запроса должны совпадать !
← →
sniknik © (2005-08-04 16:21) [10]> Типы соответствующих полей запроса должны совпадать !
для accecc/jet необязательно, эта "интеллектуальная скотина" ;о)) очень много на себя берет, в том числе и автоприведение типов. беда лиш в том что это "она" делает не всегда.
p.s. скорее всего установка последнего SP jet-а поможет, т.к. это похоже от версии зависит, различия в поведении. но лучше бы привести запрос к виду при котором срабатывает всегда (вернее чаще ;).
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c