Тип поля таблицы БД
Добавлено: 09 авг 2005, 18:54
Подскажите, кто знает, функцию для определения типа поля таблицы базы данных.
Обсуждение различных вопросов, связанных с сопровождением, администрированием и программированием
https://ns1.tyumbit.ru/
В общем взял я за основу исходник функции, выложенный на этом форуме. Правда, тот постинг был давно (еще до перевода форума на новый движок) и возможно уже потерялось (я его сам не нашел, хотел дать ссылку).gritv писал(а):Подскажите, кто знает, функцию для определения типа поля таблицы базы данных.
Код: Выделить всё
IF ( GetFirst X$Files = tsOK ) // позиционирование на таблицу
{ // Message('X$Files.XF$Name="'+X$Files.XF$Name+'"') ;
// создадим файл и получим его дескриптор (который не должен быть равен 0 !!!)
hDBF := DBFOpen( FileName , stCreate ) ;
IF ( hDBF = 0 )
then { // если возникла какая-то ошибка
Message('Ошибка создания DBF-файла "' + FileName + '"'#13 + 'Работать дальше отказываюсь!!!' , Error );
Abort ;
}
else { // если ошибок не было
// цикл по полям подцепленной таблицы
_Loop X$Fields
{
Var CurDBFDataType : integer ;
CurDBFDataType := 0 ; // значение по умолчанию
CurDBFDataType := GetDBFDataType(X$Fields.XE$DataType) ;
IF ( CurDBFDataType <> 0 )
then DBFAddField( hDBF , X$Fields.XE$Name , CurDBFDataType , X$Fields.XE$Size , GetDBFQuant(X$Fields.XE$DataType) ) ;
else {
Message('ОШИБКА!!! Мне неизвестен тип данных №"' + string(X$Fields.XE$DataType) + '" поля '
+ '"' + X$Fields.XE$Name + '" (' + X$Fields.XE$Title + ')' +
+ ' таблицы "' + X$Files.XF$Name + '" (' + X$Files.XF$Title + ')'
+ ' в БД "Галактика!!!"' , Error) ;
Message('Дальше работать отказываюсь!!! Обратитесь к разработчику интерфейса!!!' , Warning) ;
Abort ;
}
} // _Loop X$Fields
! DBFClose(hDBF) ;
}
}
Код: Выделить всё
Function GetDBFDataType( CurDataType : byte ) : integer ;
{
GetDBFDataType := 0 ; // значение по умолчанию
// Галактика может работать с 4 типами данных для DBF
// dbChar = 67
// dbDate = 68
// dbLog = 76
// dbMemo = 77
// dbNum = 78
case CurDataType of
0 : GetDBFDataType := 0 ; // 'Void ',
1 : GetDBFDataType := dbLog ; // 'Boolean ',
2 : GetDBFDataType := dbChar ; // 'Char ',
3 : GetDBFDataType := dbNum ; // 'Byte ',
4 : GetDBFDataType := dbNum ; // 'Word ',
5 : GetDBFDataType := dbNum ; // 'Integer ',
6 : GetDBFDataType := dbNum ; // 'LongInt ',
7 : GetDBFDataType := dbDate ; // 'Date ',
8 : GetDBFDataType := dbChar ; // 'Time ',
9 : GetDBFDataType := 0 ; // 'Pointer ',
10 : GetDBFDataType := dbNum ; // 'Single ',
11 : GetDBFDataType := dbNum ; // 'Double ',
12 : GetDBFDataType := dbChar ; // 'String ',
13 : GetDBFDataType := 0 ; // 'ZString ',
14 : GetDBFDataType := dbMemo ; // 'LVar ',
15 : GetDBFDataType := 0 ; // 'Buffer ',
16 : GetDBFDataType := 0 ; // 'AutoInc ',
17 : GetDBFDataType := dbChar ; // 'Comp ',
18 : GetDBFDataType := dbChar ; // 'DateTime ',
19 : GetDBFDataType := 0 ; // 'Array ',
20 : GetDBFDataType := 0 ; // 'TabArray ',
21 : GetDBFDataType := 0 ; // 'Record ',
22 : GetDBFDataType := 0 ; // 'Reference',
23 : GetDBFDataType := 0 ; // 'AnyArray
end; // case CurDataType of ...
} // Function GetDBFDataType
Function GetDBFQuant( CurDataType : byte ) : integer ;
{
GetDBFQuant := 0 ; // значение по умолчанию
// известны 4 типа данных для DBF
// dbChar = 67
// dbDate = 68
// dbLog = 76
// dbMemo = 77
// dbNum = 78
case CurDataType of
0 : GetDBFQuant := 0 ; // 'Void ',
1 : GetDBFQuant := 0 ; // 'Boolean ',
2 : GetDBFQuant := 0 ; // 'Char ',
3 : GetDBFQuant := 0 ; // 'Byte ',
4 : GetDBFQuant := 0 ; // 'Word ',
5 : GetDBFQuant := 0 ; // 'Integer ',
6 : GetDBFQuant := 0 ; // 'LongInt ',
7 : GetDBFQuant := 0 ; // 'Date ',
8 : GetDBFQuant := 0 ; // 'Time ',
9 : GetDBFQuant := 0 ; // 'Pointer ',
10 : GetDBFQuant := 0 ; // 'Single ',
11 : GetDBFQuant := 10 ; // 'Double ',
12 : GetDBFQuant := 0 ; // 'String ',
13 : GetDBFQuant := 0 ; // 'ZString ',
14 : GetDBFQuant := 0 ; // 'LVar ',
15 : GetDBFQuant := 0 ; // 'Buffer ',
16 : GetDBFQuant := 0 ; // 'AutoInc ',
17 : GetDBFQuant := 0 ; // 'Comp ',
18 : GetDBFQuant := 0 ; // 'DateTime ',
19 : GetDBFQuant := 0 ; // 'Array ',
20 : GetDBFQuant := 0 ; // 'TabArray ',
21 : GetDBFQuant := 0 ; // 'Record ',
22 : GetDBFQuant := 0 ; // 'Reference',
23 : GetDBFQuant := 0 ; // 'AnyArray
end; // case CurDataType of ...
} // Function GetDBFQuant