Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

Что надо для выполнения обединения (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
1-1124867282
СержК
2005-08-24 11:08
2005.09.18
Как програмно узнать что на машине открыт документ Excel?


3-1123018005
makvell
2005-08-03 01:26
2005.09.18
Как записать RTF в поле таблицы Paradox?


14-1124730114
Е-клмн
2005-08-22 21:01
2005.09.18
Загадка.


4-1122539982
fixer
2005-07-28 12:39
2005.09.18
проблемка с Popupmenu


1-1124739442
Michael5
2005-08-22 23:37
2005.09.18
После копирования-вставки компонента он начинает криво работать!