Форум: "Базы";
Текущий архив: 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