Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2009, 23:23   #11
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

В Access запрос работает отлично. Большое спасибо... только F1 лишнее в запросе:

Код:
select 0, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY where KEY_PRODUCT_KATEGORY=0
union
select 1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY  where KEY_PRODUCT_KATEGORY <> 0
ORDER BY 1 asc, NAME_PRODUCT_KATEGORY
Помогите что можно сделать с FireBird, так как именно эту базу я в основном использую...
SlavaSH вне форума Ответить с цитированием
Старый 08.09.2009, 09:36   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в том то и дело, что везде свои диалекты SQL

в данном случае FireBird чётко говорит, что ему не нравится ORDER BY...
попробуйте для начала так:
Код:
select 0 as SortF1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY where KEY_PRODUCT_KATEGORY=0
union
select 1 as SortF1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY  where KEY_PRODUCT_KATEGORY <> 0
ORDER BY  SortF1, NAME_PRODUCT_KATEGORY
p.s. и обязательно проверьте, KEY_PRODUCT_KATEGORY может иметь значение NULL (для начала в структуру таблицы загляните, там допускаются NULL значения)?

p.p.s. а ещё бы я писал UNION ALL
иногда это может быть важно (иначе могут выбраться не все записи!)

Последний раз редактировалось Serge_Bliznykov; 08.09.2009 в 09:40.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2009, 14:47   #13
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
в том то и дело, что везде свои диалекты SQL

в данном случае FireBird чётко говорит, что ему не нравится ORDER BY...
попробуйте для начала так:
Код:
select 0 as SortF1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY where KEY_PRODUCT_KATEGORY=0
union
select 1 as SortF1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY  where KEY_PRODUCT_KATEGORY <> 0
ORDER BY  SortF1, NAME_PRODUCT_KATEGORY
p.s. и обязательно проверьте, KEY_PRODUCT_KATEGORY может иметь значение NULL (для начала в структуру таблицы загляните, там допускаются NULL значения)?

p.p.s. а ещё бы я писал UNION ALL
иногда это может быть важно (иначе могут выбраться не все записи!)
Ошибка та же. Нет, перенная KEY_PRODUCT_KATEGORY не может принимать значение NULL, это ключевое поле. С UNION ALL тоже самое
SlavaSH вне форума Ответить с цитированием
Старый 08.09.2009, 20:06   #14
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
при выполнении запроса
Код:
select 0 f1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY where KEY_PRODUCT_KATEGORY=0
union
select 1 f1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY  where KEY_PRODUCT_KATEGORY <> 0
ORDER BY 1 asc, NAME_PRODUCT_KATEGORY
вылазиет такая ошибка
Код:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.а
Invalid command.
invalid ORDER BY clause.
попробовал подобный запрос в ИБ и ошибки нет (запрос работает даже если не указывать имя поля f1)
+ он применяет условие сортировки для всех объединяемых строк, а не только для нижней части запроса

возможно, что ФБ смущает условие сортировки и он не может применить это условие

возможно стоит сделать из второй части выборки отдельно селективную ХП/вьюху
soleil@mmc вне форума Ответить с цитированием
Старый 08.09.2009, 23:25   #15
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
попробовал подобный запрос в ИБ и ошибки нет (запрос работает даже если не указывать имя поля f1)
+ он применяет условие сортировки для всех объединяемых строк, а не только для нижней части запроса

возможно, что ФБ смущает условие сортировки и он не может применить это условие

возможно стоит сделать из второй части выборки отдельно селективную ХП/вьюху
в аксесе тоже работает без проблем, и только без указания поля F1.

а как сделать вьюху эту?
SlavaSH вне форума Ответить с цитированием
Старый 09.09.2009, 10:05   #16
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
а как сделать вьюху эту?
Код:
create view v$categories
as
select 
  1 f1, 
  key_product_kategory, 
  name_product_kategory 
from PRODUCT_KATEGORY  
where KEY_PRODUCT_KATEGORY <> 0
ORDER BY 1, name_product_kategory
и далее ваш запрос
Код:
select 
  0 f1, 
  key_product_kategory, 
  name_product_kategory 
from PRODUCT_KATEGORY 
where KEY_PRODUCT_KATEGORY=0
union all
select f1, key_product_kategory, name_product_kategory
from v$categories
soleil@mmc вне форума Ответить с цитированием
Старый 14.09.2009, 09:40   #17
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
Код:
create view v$categories
as
select 
  1 f1, 
  key_product_kategory, 
  name_product_kategory 
from PRODUCT_KATEGORY  
where KEY_PRODUCT_KATEGORY <> 0
ORDER BY 1, name_product_kategory
при выполнении запроса такая ошибка:
Код:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 9, char 1.
ORDER.
SlavaSH вне форума Ответить с цитированием
Старый 14.09.2009, 13:32   #18
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

у тебя такой запрос работает?

Код:
select 
  1 f1, 
  key_product_kategory, 
  name_product_kategory 
from PRODUCT_KATEGORY  
where KEY_PRODUCT_KATEGORY <> 0
ORDER BY 1, name_product_kategory
мне не на чем проверить
поэтому все советы вслепую
есть вариант написать селективную ХП
в синтаксисе могу где-то напутать - подправишь
Код:
create procedure sel$categories
returns (f1 integer,
          key_product_kategory ...., 
          name_product_kategory .... )
begin
  for select 
          0 f1, 
          key_product_kategory, 
          name_product_kategory 
       from PRODUCT_KATEGORY 
       where KEY_PRODUCT_KATEGORY=0
       into :f1,
             :key_product_kategory, 
             :name_product_kategory 
  do begin
     suspend;
  end;
  
  for select 
         1 f1, 
         key_product_kategory, 
         name_product_kategory 
       from PRODUCT_KATEGORY  
       where KEY_PRODUCT_KATEGORY <> 0
       order by 1, name_product_kategory
       into :f1,
             :key_product_kategory, 
             :name_product_kategory 
  do begin
     suspend;
  end;
end;
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка данных (пересчет возможных вариантов комбинаций, перенос данных в таблицу) Vitalik85 Microsoft Office Excel 4 12.08.2009 00:30
сортировка данных oleg_sh Microsoft Office Excel 7 30.07.2009 20:54
Сортировка данных Laidy Microsoft Office Excel 6 28.10.2008 10:29
Сортировка данных celovec Общие вопросы Delphi 1 01.08.2007 14:19
Сортировка данных Таня84 БД в Delphi 7 20.02.2007 15:56