Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > 2 Join-а в Query


Автор: eXcoder 1.3.2006, 05:59
День добрый. Работаю через ADO с DBF'ами.
Объединяю 3 таблицы.

Пишу в ADOQuery.SQL :

Код

SELECT DISTINCT arc_acc.TNUM, arc_acc.SUM
FROM arc_acc
LEFT OUTER JOIN cardspri ON arc_acc.TNUM = cardspri.TNUM
LEFT OUTER JOIN Licschet ON Licschet.xFIO = (cardspri.FAM+" "+cardspri.NAME+" "+cardspri.PATR)
WHERE (arc_acc.CPERIOD='2005.12') AND ((arc_acc.INOUT='306') OR (arc_acc.INOUT='307'))
ORDER BY arc_acc.TNUM


в SQL Suery Analyzer от SQL SERVER 2000
все проходит на ура.

IDE говорит, что:
"
Ошибка синтаксиса (пропущен оператор) в выражении запроса 'arc_acc.TNUM = cardspri.TNUM
LEFT OUTER JOIN Licschet ON Licschet.xFIO = (cardspri.FAM+" "+cardspri.NAME+" "+cardspri.PATR)'

"

Как выйти из ситуации?

Автор: SergeBS 1.3.2006, 11:36
Апострофы посмотри - в Delphi надо удваивать, т.е.
SQL
select * where a = 'blabla-bla' and b = 1

В IDE:
var
s : string;

s := 'select * where a = ''blabla-bla'' and b = 1';
И так же - в Query и т.п.

Автор: CaNIBaLchik 1.3.2006, 11:55
join -ы они вообще раздувают кортежы, любои join можно заменить and - ом

Автор: eXcoder 1.3.2006, 12:11
Цитата(CaNIBaLchik @ 1.3.2006, 11:55 Найти цитируемый пост)
join -ы они вообще раздувают кортежы, любои join можно заменить and - ом


Можешь показать на моем запросе как вместо JOIN юзать AND ? smile

Автор: SergeBS 1.3.2006, 16:15
CaNIBaLchik,
Цитата

join -ы они вообще раздувают кортежы, любои join можно заменить and - ом

Шутник.

eXcoder,
Вдогонку:
ParamCheck -> false
Prepared -> false

Автор: ТоляМБА 3.3.2006, 12:00
Была у меня похожая проблема – 3 таблицы и два джоина. Не знаю поможет в твоем случае или нет, но всё же.
Есть у меня в MS-SQL Server три таблицы:

Liter, LiterLang, Landg
LiterID,----------LiterID, LangName
LiterName, LangID,----------------LangID

Надеюсь так структура понятна.

Был запрос:

Код

SELECT Landg.LangName, Liter.LiterName
FROM  LiterLang INNER JOIN
Liter ON LiterLang.LiterID = Liter.LiterID INNER JOIN
Landg ON LiterLang.LangID = Landg.LangID


Прокатывал на ура.
Импортнул в dBase IV. В Делфях ошибка:

Ошибка синтаксиса (пропущен оператор) в выражении запроса 'LiterLang.LiterID = Liter.LiterID INNER JOIN
Landg ON LiterLang.LangID = Landg.LangID'

Мои действия:
1. Создал пустую базу Access
2. Импортнул в нее все таблы
3. Вставил в неё этот же запрос – оппа, тоже самое сообщение об ошибке. Ну, думаю, а какже акцесс-то связывает свои таблы? Захожу в схему данных и создаю связи (см. выше) перед этим поставив ключевые поля в Liter и в Lang. Захожу в запросы «Создание запроса в режиме конструктора», добавляю все три таблы – все связи сразу показались, помечаю соотв. поля на вывод, жму на просмотр – выдает те же данные что и на MS-SQL Server! С замиранием жму на «Режим SQL» - вижу запрос:

Код

SELECT Landg.LangName, Liter.LiterName
FROM Liter INNER JOIN (Landg INNER JOIN LiterLang ON Landg.LangID = LiterLang.LangID) ON Liter.LiterID = LiterLang.LiterID;


Цепляю его, ложу в ADOQuery1. Открываю – всё работает.

Автор: Vit 3.3.2006, 16:06
Заменить двойные кавычки на одинарные, но удвоенные

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)