Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
Bakch   (2002-11-27 12:51) [0]

Всем привет!
Подскажите ка: мне надо сравнить следующее
if Mtable.Fields[i].Datatype = Typelist.Text then, где
слева - тип поля, а справа - значение Text из ComboBox, где
перечислены все типы данных.
На эту строку получаю "Incompatible types: "String" and "TFieldType".
P.S. Недавно занимаюсь разработкой приложений в Delphi -
так что, если уж очень примитивный вопрос, - извините...


 
BlackTiger   (2002-11-27 12:57) [1]


if MTable.Fields[i] is TStringField then begin
//...
end;


 
exit   (2002-11-27 12:59) [2]

А если так:

if String(Mtable.Fields[i].Datatype) = Typelist.Text;


 
Bakch   (2002-11-27 13:01) [3]

>if MTable.Fields[i] is TStringField then begin

Не помогло - ведь у меня не просто Mtable.Fields[i].а Mtable.Fields[i].datatype


 
Valeron   (2002-11-27 13:03) [4]

MTable.FieldByName("Name-Field").AsString


 
BlackTiger   (2002-11-27 13:14) [5]

Ну, если очень хочется, то подставляй сразу константы типов данных.
Константы можешь увидеть в дизайне полей или в хелпе.

Дело в том, смотря ЧТО именно надо сравнить - тип поля или тип данных. Типов полей гораздо меньше, чем типов данных.

Есть где-то процедура перевода типа данных в название типа, но зачем загромождать код?


 
asmith   (2002-11-27 13:17) [6]

Ничего тут не поделаешь: TFieldType и строка - вещи разные. Нужно в ComboBox добавить не просто строки с названием типов данных, а строки плюс сами эти типы, что-то вроде
Typelist.Items.AddObject(DatatypeString, TObject(DatatypeValue));
Потом сравниваем:
if Mtable.Fields[i].Datatype = TFieldType(Typelist.Items.Objects[Typelist.ItemIndex])) then ...


 
BlackTiger   (2002-11-27 13:19) [7]

Пишешь
if Table1.Fields[i].DataType = ftInteger then begin
//...
end;

Вот типы данных полей DataType (классов полей гораздо меньше):
ftUnknown Unknown or undetermined
ftString Character or string field
ftSmallint 16-bit integer field
ftInteger 32-bit integer field
ftWord 16-bit unsigned integer field
ftBoolean Boolean field
ftFloat Floating-point numeric field
ftCurrency Money field
ftBCD Binary-Coded Decimal field that can be converted to Currency type without a loss of precision.
ftDate Date field
ftTime Time field
ftDateTime Date and time field
ftBytes Fixed number of bytes (binary storage)

ftVarBytes Variable number of bytes (binary storage)
ftAutoInc Auto-incrementing 32-bit integer counter field
ftBlob Binary Large OBject field
ftMemo Text memo field
ftGraphic Bitmap field
ftFmtMemo Formatted text memo field
ftParadoxOle Paradox OLE field
ftDBaseOle dBASE OLE field
ftTypedBinary Typed binary field
ftCursor Output cursor from an Oracle stored procedure (TParam only)
ftFixedChar Fixed character field
ftWideString Wide string field
ftLargeint Large integer field

ftADT Abstract Data Type field
ftArray Array field
ftReference REF field
ftDataSet DataSet field
ftOraBlob BLOB fields in Oracle 8 tables
ftOraClob CLOB fields in Oracle 8 tables
ftVariant Data of unknown or undetermined type
ftInterface References to interfaces (IUnknown)
ftIDispatch References to IDispatch interfaces
ftGuid globally unique identifier (GUID) values
ftTimeStamp Date and time field accessed through dbExpress
ftFMTBcd Binary-Coded Decimal field that is too large for ftBCD.


 
BlackTiger   (2002-11-27 13:31) [8]

Про функцию - у меня, видимо глюки.
Проще использовать case:
case Table1.Fields[i].DataType of
ftInteger: begin ... end;
ftWideString: begin ... end;
// ну и так далее для каждой константы (такой пример приведен)
// в хедпе (учите матчасть!!!)
end;


 
BlackTiger   (2002-11-27 13:32) [9]

З.Ы.: :-))) И грамматику :-) (это я о себе...)


 
Victor_Cr   (2002-11-27 13:47) [10]

2 BlackTiger (27.11.02 13:32)
Вполне реальный вариант, но можно лучше. Делфи позволяет приводить перечисляемые типы.
Выглядит сие так
Table1.Fields[i].DataType := TDataType(Combobox1.ItemIndex);

т.к. TDataType перечисляемый тип и равен
TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid),

то при строгом соответсвии порядка полей в Combobox-е у тебя должно все получиться


 
Bakch   (2002-11-27 13:57) [11]

Все получилось - отбой. Огромное спасибо всем, а главное Victor_Cr.
прошел именно его вариант и никакой другой. Были честно переброваны почти все варианты.



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

Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
14-51888
Ajax
2002-11-21 16:50
2002.12.16
Программа для компьютерного клуба.


1-51684
BSD
2002-12-05 16:02
2002.12.16
StarOffice vs Delphi


14-51887
vopros
2002-11-19 10:54
2002.12.16
Господа, программисты придумываеться сценарий.


1-51767
Cranium
2002-12-04 21:11
2002.12.16
Ярлык


4-52029
Yogi
2002-11-01 19:26
2002.12.16
Свернуть все окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский