Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-98323
Unregistered
2002-09-04 21:44
2002.09.30
Delphi 777


1-98123
race1
2002-09-20 10:53
2002.09.30
ttreeview


1-98069
3asys
2002-09-19 13:03
2002.09.30
Организация последовательности операций


4-98412
RealDummy
2002-08-15 00:41
2002.09.30
Своя панель задачь (Пуск)


3-97970
Kolyan!
2002-09-09 10:47
2002.09.30
Можно ли работать с dBase через dbExpress?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский