Тестовая база данных:
create table a ( d date not null primary key);
create table b ( d date not null primary key);
insert into a values ('2013-01-01');
insert into b values ('2014-01-01');
Используя Zeos lib с Delphi 7, все эти запросы возвращают TDateTimeField:
select d from a order by 1;
select d from b order by 1;
select d from a union all select d from b;
select * from (select d from a union all select d from b) s;
Однако этот запрос возвращает TStringField:
select * from (select d from a union all select d from b) s order by 1;
Вопросы:
- Почему это?
- Как предотвратить это?
- Это ошибка? Как, черт возьми, заказ результирующего набора меняет тип столбца????
- Это серьезная проблема, потому что я не могу генерировать SQL-запросы из своей программы и открывать их в TZReadOnlyQuery, созданном во время разработки.
Обновление: оно также не работает с целыми числами.
create table c ( id integer not null primary key);
create table d ( id integer not null primary key);
insert into c values(1);
insert into d values(2);
Это приводит к TLargeIntField:
select * from c order by 1
select * from d order by 1
select * from ( select * from c union all select * from d) s
Однако это приводит к TStringField:
select * from ( select * from c union all select * from d) s order by 1