Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не срабатывает обьединение 
:(
    Опции темы
<Spawn>
Дата 5.10.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



IB 6.5

Пишу простой селект с обьединением:

Код

SELECT -1, 'Родительская группа'
FROM dual //Это моя таблица с 1-ой строкой данных - не знаю просто есть ли в IB такая, поэтому свою сделал
UNION
SELECT ID, Name
FROM item_groups
WHERE ParentID = -1


На что получаю еррор:
SQL error code = -104
Invalid Command
Data type unknown

Пробовал как через IBX, так и на прямую через IBCosole

В чем дело?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Alex
Дата 5.10.2005, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



При объединении через Union кол-во полей в обоих выборках должно быть одинаковым и поля должны иметь одинаковый тип
Добавлено @ 13:57
Если раскажешь по подробней, что заставляет тебя делать union объединение, может смогу помочь от него избавиться, т.к. редко когда действительно требуется не очень удобное объединение через union


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
<Spawn>
Дата 5.10.2005, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Alex Я уже избвился от него, путем более громодского кода. В моем случае оно было бы ОЧЕНЬ удобно, т.к. индекс -1 это индекс корневого элемента в дереве, соответстенно и текст для этого индекса можно установить такой выборкой (на работе с Ораклом такие обьединения используются сплошь и рядом). Результат этого селекта является список значений для DBLookupComboBox. Дело в том что типы должны быть идентичны,
ID Int
Name Varchar(50)

Разве что 'Родительская группа' интерпретируется как Char...


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Alex
Дата 5.10.2005, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Название полей в выборке, тоже должны быть одинаковые.
Вот пример объединения
Код

select
    zts.ART
  , zts.MODEL
  , zts.MODEL_ENG
  , zts.NAME_SUPPLIERS
  , zts.name_zakaz_partiy
  , zts.name_status_part
  , zts.COUNT_ZAKAZ_TOVAR
  , zts.TYPE_TOVAR
  , zts.summa_not_skidka_def_cur
  , zts.SUMMA_DEF_CUR
  , zts.CENA_ZAKUP_CR
  , zts.CENA_CR
  , zts.SUMMA_CR
from zakaz_tovar_svet_view zts
WHERE
  zts.id_zakaz = :id_zak

union

select
    ztl.ART
  , ztl.MODEL
  , ztl.MODEL_ENG
  , ztl.NAME_SUPPLIERS
  , ztl.name_zakaz_partiy
  , ztl.name_status_part
  , ztl.COUNT_ZAKAZ_TOVAR
  , ztl.TYPE_TOVAR
  , ztl.summa_not_skidka_def_cur
  , ztl.SUMMA_DEF_CUR
  , ztl.CENA_ZAKUP_CR
  , ztl.CENA_CR
  , ztl.SUMMA_CR
from zakaz_tovar_lamp_view ztl
WHERE
  ztl.id_zakaz = :id_zak

order by 8, 4, 1



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
<Spawn>
Дата 5.10.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Alex Первый селект выбирает не поля базы! Он выбирает одну строку подстановочных данных (-1 и 'Родительская группа'), т.к. в таблице dual одна строка (в Oracle эта таблица по умолчанию существует, очень удобно, кстати, для подобного рода селектов)


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
xgm
Дата 5.10.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 10.8.2005

Репутация: 1
Всего: 1



Смотрю человек с Оракуля переползает...

Аналог DUAL в IB - RDB$DATABASE
Для данной идеи в Оракуле существует конструкция: CONNECT BY PRIOR

Функциональный аналог оной для IB - прилагается ниже.
И полезный совет: поменяй IB 6.x на FB 1.52

Код

set term !!;

create or alter procedure connect_by_prior (
  Table_Name varchar(32),
  Pk varchar(32),          /* parent rows name /connect by prior/         */
  Fk varchar(32),          /* child rows name  /connect by prior/         */
  Start_With varchar(256), /* Start condition, for example: 'ref_to_id=0' */
  Order_by varchar(256),   /* Fields names, comma separated; or <NULL>    */
  Level_In decimal(18,0)   /* In first call binding <NULL>                */
)
returns (
  Id decimal(18,0),
  Tree_Level decimal(18,0))
as
  declare d_start_with varchar(256);
  declare i decimal(18,0);
begin

  if (Level_In is null) then
    Level_In = 0;
  Tree_Level = Level_in;

  For execute statement
    'select '||pk||' from '||table_name||' where '||start_with||
      case
        when order_by is null then ''
        else ' order by '||order_by
      end || ''
      into :id
  do begin
    suspend;
    d_start_with = fk || '=' || id;
    i = Tree_Level;
    For select id, tree_level
      from connect_by_prior(:table_name, :pk, :fk, :d_start_with, :order_by, (:tree_level+1))
      into :id, :tree_level
        do suspend;
      tree_level = i;
  end
end !!

set term ; !!

commit;


PM MAIL   Вверх
<Spawn>
Дата 5.10.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Цитата
Смотрю человек с Оракуля переползает...
Ну не то чтобы переползаю, просто решено было халтурный проект на IB сделать, т.е. я начал его делать на IB, но в конечном итоге все будет крутиться в FB. А Оракул я пока бросать не собираюсь smile

Цитата
Аналог DUAL в IB - RDB$DATABASE
Буду знать, спасибо.

Всем спасибо за участие в решении проблемы, пошел дальше работать...


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.