Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

Type mismatch for field   Найти похожие ветки 

 
Сергей Н.   (2005-07-29 13:35) [0]

Помогите, пожалуйста, решить такую проблему.
Есть две таблицы одинаковой структуры: Table1 и Table2. В Delphi есть SimpleDataSet1. У него в свойстве DataSet.CommandText лежит запрос ‘select * from Table1’.
По ходу программы я изменяю запрос на: ‘select * from Table1 union select * from Table2’ и получаю ошибку: “Type mismatch for field ‘CLID’, expecting: BCD actual: FMTBcdField”.


 
Сергей Н.   (2005-07-29 13:38) [1]

Да, забыл написать БД Oracle9


 
Anatoly Podgoretsky ©   (2005-07-29 13:41) [2]

Типы разные.


 
Fay ©   (2005-07-29 13:56) [3]

2 Сергей Н.   (29.07.05 13:38) [1]
CAST-ов точно нет в запросе?


 
Сергей Н.   (2005-07-29 14:07) [4]

Запросы как есть. А что типы разные я вижу. Можно ли как-то обойти эту ситуацию?


 
Sergey13 ©   (2005-07-29 14:09) [5]

2[4] Сергей Н.   (29.07.05 14:07)
>Запросы как есть. А что типы разные я вижу. Можно ли как-то обойти эту ситуацию?
Привести к одному типу.
Какая же у тебя одинаковая структура таблиц?


 
Reindeer Moss Eater ©   (2005-07-29 14:09) [6]

Обойти ситуацию с разными типами можно.
Сделать типы одинаковыми.


 
Anatoly Podgoretsky ©   (2005-07-29 14:26) [7]

Sergey13 ©   (29.07.05 14:09) [5]
Ну это количество полей одинаковое :-)


 
Fay ©   (2005-07-29 14:28) [8]

В любом случае, "*" лучше заменить перечислением полей.


 
Сергей Н.   (2005-07-29 14:56) [9]

Две таблицы идентичны. Вторая создавалась как "create table2 as select * from table1".

В проекте создаю три датасета. В первый вставляю запрос: ‘select * from Table1’, во второй: ‘select * from Table2’, а в третий: ‘select * from Table1 union select * from Table2’. Далее смотрю описание класса:
type
 TDM = class(TDataModule)
...
   Table1: TSimpleDataSet;
   Table1CLID: TBCDField;
...
   Table2: TSimpleDataSet;
   Table2CLID: TBCDField;
...
   Table3: TSimpleDataSet;
   Table3CLID: TFMTBCDField;


 
Reindeer Moss Eater ©   (2005-07-29 15:01) [10]

desc table1;
и
desc table2;

в плюсе скажут всю правду об идентичности структур.

PS можно попробовать отключить enable integers и enable BCD если это позволяет библиотека доступа.


 
Fay ©   (2005-07-29 15:05) [11]

2 Сергей Н.   (29.07.05 14:56) [9]
А если
select * from Table1
union
select * from Table1
?


 
Anatoly Podgoretsky ©   (2005-07-29 15:32) [12]

Сергей Н.   (29.07.05 14:56) [9]
И у тебя эти две первые таблицы из одного поля?


 
Сергей Н.   (2005-07-29 15:38) [13]

Reindeer Moss Eater
Plus сказал, что структуры идентичны.

Fay
При таком запросе тоже

Table3CLID: TFMTBCDField;

Anatoly Podgoretsky
Нет, полей хватает, но ругается только на числовые Integer


 
Anatoly Podgoretsky ©   (2005-07-29 15:40) [14]

Попробовать 11 и попробовать для начала удалить постоянные, предопределенные поля.
Кроме того зарубить себе на носу, никогда не использовать звездочку в реальных запросах


 
Reindeer Moss Eater ©   (2005-07-29 15:41) [15]

сделай
ENABLE INTEGERS=FALSE
ENABLE BCD=FALSE
и пересоздай экземпляры полей в датасете.


 
Сергей Н.   (2005-07-29 15:52) [16]

Anatoly Podgoretsky
Про звездочку - зарублю. :)
11 попробовал, результат тот же.

Удалить постоянные, предопределенные поля нельзя, т.к. в датасете есть Lookup и calcullated поля.

Эту ситуацию наблюдал и раньше с другими таблицами с той же ошибкой. Если запрос с union, то все поля TBCDField превращаются в TFMTBCDField. Даже создавал view с union и в датасет выбирал из него. Все равно Table3CLID: TFMTBCDField;

Reindeer Moss Eater
А можно немного подробнее. Где это задать? Это чьи свойства?


 
Reindeer Moss Eater ©   (2005-07-29 15:56) [17]

Это параметры используемые клиентом Оракла.
В BDE олни передаются через TDatabase.Params.
А в твоей библиотеке надо искать где. Что такое SimpleDataSet?


 
Сергей Н.   (2005-07-29 16:10) [18]

SQLDataSet + DataSetProvider + ClientDataSet : 3 в одном флаконе.


 
Fay ©   (2005-07-29 16:16) [19]

2 Сергей Н.   (29.07.05 16:10) [18]
1) DOA (или ODAC) не катит?
2) Какого типа это "нехорошее поле"? Мне не удалось добиться такого эффекта.


 
Reindeer Moss Eater ©   (2005-07-29 16:22) [20]

У оракла нет такого физического типа.
Базовый NUMBER и все.
Поэтому на клиенте все экземпляры по хорошему должны быть ftFloat типа.

Но есть два параметра.
ENABLE INTEGERS и ENABLE BCD

Первый позволяет видеть на клиенте поля number(X,0) как целочисленные, а второй позволяет представлять number(m,n) как ftBCD.

Сделай оба параметра FALSE и получишь честные TFloatField.


 
Сергей Н.   (2005-07-29 16:25) [21]

Reindeer Moss Eater
С оракловским клиентом связываюсь через dbExpress. В компоненте SQLConnection таких параметров нет. :(

Fay
Я привык работать с DbExpress, думаю, что обойти эту проблему можно создав еще один датасет и потом переключаться с одного на другой. Но хочется решение покрасивее. :)

Нехорошее поле number(6)


 
Reindeer Moss Eater ©   (2005-07-29 16:56) [22]

Если параметры эти не поддерживаются, используй
TSQLQuery.NumericMapping:=True;

При этом в запросе без UNION все нумерик поля будут TFMTBCDField.

Как и в запросе с UNION.


 
Сергей Н.   (2005-07-29 17:20) [23]

Спасибо. Действительно так!



Страницы: 1 вся ветка

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.025 c
6-1117067772
dp200
2005-05-26 04:36
2005.09.11
функция ShellExecute


2-1123572231
Андрей235
2005-08-09 11:23
2005.09.11
Как сделать иконку в трее?


14-1124099751
Delphi Workman
2005-08-15 13:55
2005.09.11
Ищу удаленную работу на Delphi


1-1124351213
maximm
2005-08-18 11:46
2005.09.11
CharToOem


1-1124364806
Andry
2005-08-18 15:33
2005.09.11
"Человеческая" сортировка