Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-1114873230
andrey12
2005-04-30 19:00
2005.09.11
Громкость кодом!!!


2-1123394184
makvell
2005-08-07 09:56
2005.09.11
просто вопрос...


14-1124265108
Igorek
2005-08-17 11:51
2005.09.11
Научите меня пользоваться программой explorer.exe


8-1115105858
Dennis S
2005-05-03 11:37
2005.09.11
помогите оптимизировать код


8-1114035775
Fedor
2005-04-21 02:22
2005.09.11
Как DSPack соединить с MotionDetector???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский