Имя: Пароль:
1C
1С v8
Проблема с запросом в TecDoc
0 u2006
 
30.01.15
13:14
Доброго всем времени суток.
Есть задача вытащить некоторые данные из TecDoc
Подключаюсь через ADODB.Connection
Простые запросы отрабатывает на ура, а вот запрос когда необходимо обращаться к 1 таблице 2 или более раз не отрабатывает.
Вот пример простого запроса, писал просто для теста

SELECT
TOF_MANUFACTURERS.MFA_ID,
TOF_MANUFACTURERS. MFA_BRAND,
TOF_MANUFACTURERS777.MFA_BRAND
FROM
TOF_MANUFACTURERS
INNER JOIN TOF_MANUFACTURERS AS TOF_MANUFACTURERS777 ON TOF_MANUFACTURERS777.MFA_ID = TOF_MANUFACTURERS.MFA_ID

Выдает следущее
table or correlation name 'TOF_MANUFACTURERS' is not unique in block 1

Т.е я так понимаю не получается работать с 2 одинаковыми таблицами
Может кто подскажет в чем проблема то может быть, понятно что руки кривые, но всётаки... премного благодарен
1 Ёпрст
 
30.01.15
13:18
алиясы для первой таблицы задай
2 u2006
 
30.01.15
13:18
(1) Пробовал не помогает
3 Ёпрст
 
30.01.15
13:19
SELECT
table1.MFA_ID,
table1. MFA_BRAND,
table2.MFA_BRAND
FROM
TOF_MANUFACTURERS as table1

INNER JOIN TOF_MANUFACTURERS AS table2 ON table1.MFA_ID = table2.MFA_ID
4 Ёпрст
 
30.01.15
13:20
(2)нам отсюда не видно, что пробывал и как оно
5 u2006
 
30.01.15
13:25
(4)Ну собственно такая ошибка на ваш запрос
Ошибка при вызове метода контекста (Execute)
    Recordset = Command.Execute();
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Transaction][ODBC Transbase Driver][Transbase ODBC TECDOC CD 1_2015] Transbase Kernel <TECDOC_CD_1_2015@comp>  error report:
  Version: V6.7.1.10 (Build 477) 2009/06/05 (Release)
compile error: unexpected keyword: at line >6<:
TOF_MANUFACTURERS as table1
                   ^
6 u2006
 
30.01.15
13:25
я уже пробовал так, все аналогично
7 Ёпрст
 
30.01.15
13:26
TOF_MANUFACTURERS - такая табличка хоть есть базе то ?
8 u2006
 
30.01.15
13:27
Да, конечно
9 Ёпрст
 
30.01.15
13:27
так, че выдает ?

select * from TOF_MANUFACTURERS
10 u2006
 
30.01.15
13:28
Вот такой запрос отрабатывает отлично
SELECT
    TOF_MANUFACTURERS.MFA_ID,
    TOF_MANUFACTURERS. MFA_BRAND
FROM
    TOF_MANUFACTURERS
ORDER BY
    TOF_MANUFACTURERS.MFA_BRAND
11 Ёпрст
 
30.01.15
13:30
(10) а через Open а не Execute ?

и (3) должен работать
12 u2006
 
30.01.15
13:31
(11) Если бы работал, я бы не спрашивал )
13 Ёпрст
 
30.01.15
13:31
Покажи весь код
14 igork1966
 
30.01.15
13:34
TOF_MANUFACTURERS. MFA_BRAND,
TOF_MANUFACTURERS777.MFA_BRAND AS MFA_BRAND777
15 u2006
 
30.01.15
13:35
Ну для примера из (3)
Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = СоединениеTecDoc;
Command.CommandText = "SELECT
    | table1.MFA_ID,
    | table1. MFA_BRAND,
    | table2.MFA_BRAND
    |FROM
    |TOF_MANUFACTURERS as table1
    |INNER JOIN TOF_MANUFACTURERS AS table2 ON table1.MFA_ID = table2.MFA_ID
    |";
    
    Recordset =  Новый COMОбъект("ADODB.Recordset");
    Recordset = Command.Execute();
16 u2006
 
30.01.15
13:35
(14) Хм... попробую
17 igork1966
 
30.01.15
13:35
(14) --> (0)
18 Ёпрст
 
30.01.15
13:39
Тест на вшивость:

ТекстЗапроса =  "SELECT
    | table1.MFA_ID,
    | table1. MFA_BRAND,
    | table2.MFA_BRAND
    |FROM TOF_MANUFACTURERS as table1
    |INNER JOIN TOF_MANUFACTURERS AS table2 ON table1.MFA_ID = table2.MFA_ID
    |";

НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
НаборЗаписей.Open(ТекстЗапроса, СоединениеБД);
19 13_Mult
 
30.01.15
13:54
(14) +1
20 Ёпрст
 
30.01.15
14:01
(17) намекаешь на алияс поля в селекте ? :)

Ну, так тогда еще:
ТекстЗапроса =  "SELECT
    | table1.MFA_ID,
    | table1. MFA_BRAND as brand1,
    | table2.MFA_BRAND as brand2
    |FROM TOF_MANUFACTURERS as table1
    |INNER JOIN TOF_MANUFACTURERS AS table2 ON table1.MFA_ID = table2.MFA_ID
    |";

НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
НаборЗаписей.Open(ТекстЗапроса, СоединениеБД);
21 u2006
 
30.01.15
14:02
(14) Не совсем понял
SELECT
TOF_MANUFACTURERS.MFA_ID,
TOF_MANUFACTURERS. MFA_BRAND,
TOF_MANUFACTURERS777.MFA_BRAND AS MFA_BRAND777
FROM
TOF_MANUFACTURERS
INNER JOIN TOF_MANUFACTURERS AS TOF_MANUFACTURERS777 ON TOF_MANUFACTURERS777.MFA_ID = TOF_MANUFACTURERS

На что это должно повлиять?
Ошибка таже
22 u2006
 
30.01.15
14:03
т.е для ситуации когда поле не нужно в селекте, труба?
23 u2006
 
30.01.15
14:03
Бывает что таблица нужна для соединения и потом дальнейших соединений
24 u2006
 
30.01.15
14:06
(20) Не помогло, счас попробую с open
25 Сергиус
 
30.01.15
14:07
(21)Попробуй название псевдонима таблицы без AS, т.е.

SELECT
..
FROM
TOF_MANUFACTURERS T1
INNER JOIN TOF_MANUFACTURERS T2
ON T1.MFA_ID = T2.MFA_ID
26 u2006
 
30.01.15
14:08
(25) спс попробую, по рез отпишусь, счас на обед убегаю )))
27 Ёпрст
 
30.01.15
14:14
Хз, че там автор пробует, но (20) должно работать всегда
28 Сергиус
 
30.01.15
14:15
(27) особенностью модицификации языка sql,который используется в Текдок, является в частности то, что псевдонимы таблиц задаются без AS. А просто через пробел.
29 Сергиус
 
30.01.15
14:20
+(28) По крайней мере так было несколько лет назад..
30 u2006
 
30.01.15
14:22
(25) Вопрос закрыт. А то я думаю что с ума начал сходить. Респект
31 Ёпрст
 
30.01.15
14:24
(28) это врят ли, в t-sql тоже можно не указывать as нигде (в оледб надо. например)

сумневаюсь, что в текдоке не надо указывать as
32 u2006
 
30.01.15
14:26
Все спасибо за содействие )))
33 u2006
 
30.01.15
14:28
(25) А какие еще грабли есть? Не подскажите
34 u2006
 
30.01.15
14:45
Во споткнулся дальше на граблях текдока
a function 'IFNULL(char(*),char(*))' does not exist in the database
35 Сергиус
 
30.01.15
15:01
(34)http://www.sql.ru/forum/998053/tecdoc-tolko-originalnye-zaprosy

Погляди эту тему к примеру, как строятся запросы.
36 Сергиус
 
30.01.15
15:03
+(35) а в твоем случае нужна функция nvl

Пример: nvl(sup_cou.sup_brand, sup_null.sup_brand) supplier.
37 Сергиус
 
30.01.15
15:04
(31) Книга знаний: Получение данных из TecDoc? Легко! Даже на мисте есть тема про это)
38 u2006
 
30.01.15
15:30
(35) Огромное спасибо. То что на мисте есть это я знаю. Можно сказать с этой темы и начал )))