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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
7-98361
ReimerMV
2002-07-17 17:14
2002.09.30
Написание Soft Cooler-а


1-98215
af
2002-09-18 17:37
2002.09.30
есть ли такой компонент типа нажимаешь на правую кнопочку


14-98326
Дремучий
2002-09-05 13:01
2002.09.30
ТИПОвый договор новых русских


14-98321
MAXHO
2002-09-04 23:29
2002.09.30
Помогите начинающему програмисту-игроделу :)


14-98355
Иван Шихалев
2002-09-05 15:34
2002.09.30
Не поможет ли кто?