Форум: "Базы";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
ВнизSQL-запрос из двух БД Найти похожие ветки
← →
Spooky (2002-09-09 12:54) [0]Есть две БД (точнее две совокупности таблиц Paradox) и такой SQL-запрос:
SELECT Instr.Allsizes.Sign as Oboz,
Instr.Allsizes.Sign+" "+Instr.Contents.Short_name as Perex
FROM Instr.Allsizes, Instr.Contents
WHERE Instr.AllSizes.UID=CurrentWork.Konstr.RI_ID
Т.е. таблицы Alsizes и Contents находятся по алиасу Instr, а таблица Konstr по алмасу CurrentWork. Когда я этот запрос пишу в Query (свойство DatabaseName="") и делаю Active, Delphi ругается, чо не может найти файл "...Delphi6\Projects\Instr.AllSIzes.db", т.е. он ищет в текущем каталоге (дельфовском) файл Instr.AllSizes, как алиас Instr не воспринимает. В чем моя ошибка?
Заранее спасибо.
← →
Val (2002-09-09 13:18) [1]Local SQL Help -> Heterogeneous joins
← →
KDS (2002-09-09 13:37) [2]Подставляй пути к таблицам, а не алиасы, если они из разных каталогов т.е.:
вместо FROM Instr.Allsizes, Instr.Contents
писать "FROM "+DB1+"\Allsizes.db T1, "+DB2+"\Contents.db T2"
где DB1, DB2 переменные, содержащие пути к каталогам БД.
В строках SELECT ... и WHERE ...
эти пути уже не указывай, а указывай псевдонимы таблиц T1, T2
т.е.:
SELECT T1.Sign as Oboz, ...
← →
Spooky (2002-09-09 14:08) [3]KDS
На указание пути вместо алисов тоже ругается: "Invalid use of keyword" именно на ту строчку, где путь написан.
← →
Val (2002-09-09 14:11) [4]>Spooky (09.09.02 14:08)
зачем вам указывать пути, раз вы работаете с псевдонимами??
← →
Spooky (2002-09-09 14:28) [5]На счет путей - это по совету KDS (см. сообщение выше).
А другие предложения есть?
← →
KDS (2002-09-09 14:46) [6]Ааа, ясно, теперь вижу лажу ... неусмотрел перед своим ответом:
А где - же потерялась третья таблица Konstr по алиасу CurrentWork?
Она тоже должна быть указана в строке
FROM Instr.Allsizes, Instr.Contents
и проверь взаимосвязи между таблицами в строке
WHERE Instr.AllSizes.UID=CurrentWork.Konstr.RI_ID
тут уже выпала таблица Instr.Contents
← →
Val (2002-09-09 14:48) [7]>Spooky (09.09.02 14:28)
другие предложения были выше - посмотреть в хелп. поверьте, вопрос отпадет сам собой.
← →
Spooky (2002-09-09 15:00) [8]>KDS
Проблема совсем не в этом, Делфи на ругается на указанный путь, где-то она там ключевое слово усматривает что ли. Я конечно попробывала таблицу Konstr в раздел FROM добавить, но это не дало никакого эффекта.
>Val
У меня на машинке нет Local SQL Help.
← →
Дмитрий Орехов (2002-09-09 15:07) [9]Непонятно, что такое CurrentWork.Konstr.RI_ID
Если обе таблицы в одной БД, то соответствующий alias указывается в DatabaseName. Ну а если надо из разных БД, то там вроде такой формат ":alias:table". Вообще запрос какой-то кривой.
SELECT a.Sign as Oboz,
a.Sign+" "+c.Short_name as Perex
FROM Instr.Allsizes a, Instr.Contents c
не помню + будет работать или надо конкатинацию делать ||?
← →
Дмитрий Орехов (2002-09-09 15:11) [10]Извиняюсь:
from ":instr:allsizes" a, ":instr:contents" c
← →
Spooky (2002-09-09 15:18) [11]Дмитрию Орехову
CurrentWork.Konstr.RI_ID - здесь CurrentWork - алиас, Konstr - таблица, RI_ID - поле.
Проблема в том, что 2 таблицы (AllSizes и Contents) находятся в одной БД, а 3-тья таблица (Konstr) - в другой БД. На сколько я знаю, обращение к таблице через алиас пишется через точку, а не через двоеточие (я на всякий случай попробовала - все равно не работает).
То, что Вы написали, не имеет раздела WHERE, который мне необходим для условия.
А + работает, с этим я часто работаю.
← →
Дмитрий Орехов (2002-09-09 15:21) [12]может бросишь пример вместе с таблицами?
← →
Spooky (2002-09-09 15:27) [13]Простите, но сами таблицы сбросить не могу - во-первых, большие, а во-вторых - "коммерческая тайна".
Загвоздка здесь именно в обращении к двум БД, а не в таблицах.
← →
Дмитрий Орехов (2002-09-09 15:29) [14]там точно через двоеточия
← →
Spooky (2002-09-09 15:36) [15]Дмитрию Орехову
Может и вправду через двоеточие - спасибо за информацию. Но проблема осталась - не работает оно и все.
← →
Дмитрий Орехов (2002-09-09 15:37) [16]Рабочий запрос:
Query.SQL.Text:="INSERT INTO ":PERENOS:NORMA_N_TEMP.DB""+
" SELECT * FROM ":NORMASERVER:NORMA_N_TEMP""+
" WHERE ACTUALYEAR="+#39+Year+#39+
" AND ACTUALMM="+#39+ComboMM.Text+#39+
" AND KODC="+#39+ComboC.Text+#39;
Одна таблица локальная, другая Oracle.
← →
Spooky (2002-09-09 15:50) [17]Спасибо конечно, но только когда я пишу через двоеточие как у Вас, происходит ругательство "Invalid file name"
← →
Дмитрий Орехов (2002-09-09 15:55) [18]а если так
SELECT a.Sign as Oboz,
(a.Sign+" "+c.Short_name) as Perex
FROM ":Instr:Allsizes.db" a, ":Instr:Contents.db" c,
":CurrentWork:Konstr" k
WHERE a.UID=k.RI_ID
можно еще попробовать все названия большими буквами
← →
Spooky (2002-09-09 16:02) [19]Так тоже не помагает.
К сожалению, вынуждена покинуть форум, вернусь завтра.
Спасибо за помощь.
Если какие-то еще мысли на этот счет возникнут, напишите - буду признательна, завтра посмотрю.
← →
Anatoly Podgoretsky (2002-09-09 16:28) [20]Если не чего не получается, то самое время посмотреть документацию по Local SQL и по гетерогенным запросом.
VAL уже полтора часа уговаривает сделать естественное движение.
← →
Дмитрий Орехов (2002-09-10 06:52) [21]На что ругается при пследнем варианте запроса?
← →
Spooky (2002-09-10 07:56) [22]Не поверите, но сегодня последний вариант сегодня заработал (видимо у меня на машинке BDEглючит), а вчера писал, что таблицу найти не может - неверное имя файла.
Большущее спасибо Дмитрию Орехову и вообще всем спасибо.
← →
Виталий Панасенко (2002-09-10 08:42) [23]Вообще-то синтаксис алиас-таблица действительно такой, как написал Дмитрий Орехов ":alias:table". Должно все работать, если больше нигде не накрутил.:-)))
← →
Spooky (2002-09-10 11:35) [24]Мне правда в одном месте все равно надо не алиас, а путь писать - путь корректно не обрабатывается, т.к. там двоеточие после буквы диска. А создавать для одного запроса алиас (в смысле программно) не хочется.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.014 c