Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c