![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать тип поля в открытом датасете?
SergP. © (2006-09-12 11:07:00)Имеется ввиду если поле типа number(20,4) то как узнать количество знаков и кол. знаков после точки?
ANB (2006-09-12 16:16:00) [21]
> SergP. (12.09.06 16:11) [17]
Весьма приближенно получишь. Тогда уж лучше по словарю лазить.
SergP. (2006-09-12 16:11:00) [22]> [4] Reindeer Moss Eater © (12.09.06 11:46)
> Кол-во знаков после точки = TField.Size
т.е. типа так: ?
procedure CreateDBF(sql,filename:string);
var
FieldDesc:array of packed record
Name:array[1..11] of char; //Имя поля
Typ : char; //тип поля
Res : longint; //резерв, х/з для чего
Len : byte; //общая длина поля
Dec : byte; //число десятичных знаков
Res2: array[1..13] of byte; //еще один резерв
Tag : byte;
end;
...
i:integer;
begin
with TADODataSet.Create(Application) do
try
...
CommandText:=sql;
Open;
SetLength(FieldDesc,FieldCount);
for i:=0 to FieldCount-1 do
begin
...
FieldDesc[i].Len:=Fields[i].DataSize;
FieldDesc[i].dec:=Fields[i].Size;
...
end;
...
finally
free;
end;
end;
SergP. (2006-09-12 16:05:00) [23]> [15] ANB © (12.09.06 15:47)
>
> > SergP © (12.09.06 14:51) [14]
>
> DBF то зачем нужен ? Для работы напрямую или импорта в другую
> БД ?
Для использования в другом (не мной писаном) ПО.
ANB (2006-09-12 15:47:00) [24]
> SergP © (12.09.06 14:51) [14]
DBF то зачем нужен ? Для работы напрямую или импорта в другую БД ?
SergP (2006-09-12 14:51:00) [25]> [12] Anatoly Podgoretsky © (12.09.06 14:45)
> И также дата-время, кроме того о чем ты вообще говоришь,
> что такое dbf? Пока это три буквы.
Извиняюсь. это DBASE IV.
Надеялся что будет понятно по умолчанию...
А насчет даты-времени - то преоборазуется в дату (с потерей времени) и засунется в дбф.
SergP (2006-09-12 14:49:00) [26]> [11] Anatoly Podgoretsky © (12.09.06 14:44)
> Не реально, как ты представишь в дбф numeric или numeric(38,
> 21)
А у меня в выборках будут только такие типы, которые нормально представляются в дбф. (например numeric(16,4) или numeric(16,0).
Вобщем на фоксе (экспорт из Оракла в дбф) элементарно делается (в 4 строчки), просто неудобно для работы. хочу на дельфи сделать.
Anatoly Podgoretsky (2006-09-12 14:45:00) [27]И также дата-время, кроме того о чем ты вообще говоришь, что такое dbf? Пока это три буквы.
Anatoly Podgoretsky (2006-09-12 14:44:00) [28]Не реально, как ты представишь в дбф numeric или numeric(38,21)
SergP (2006-09-12 14:42:00) [29]> [9] Anatoly Podgoretsky © (12.09.06 14:37)
> SergP. (12.09.06 12:40) [7]
> Оракл и дбф - нереально в общем случае.
В данном случае случай не общий...
Если учесть то что в выборке я буду использовать только типы (символьный (varchar), числовой (numeric) и дата (дата-время)) то реально.
Anatoly Podgoretsky (2006-09-12 14:37:00) [30]SergP. (12.09.06 12:40) [7]
Оракл и дбф - нереально в общем случае.
ANB (2006-09-12 12:41:00) [31]клади строкой и не мучайся. AsString завсегда отработает
SergP. (2006-09-12 12:40:00) [32]> [5] novill © (12.09.06 11:50)
> а вам обязательны такие подробности? fieldtype не хватает?
Мне dbf нужно создать той же структуры
Desdechado (2006-09-12 12:30:00) [33]> fieldtype не хватает?
Это результат интерпретации типа поля на клиенте. А для создания NUMERIC, например, его недостаточно. Потому как он может интерпретироваться как ftFloat, ftBCD, ftFmtBCD в зависимости от размерности и точности.
novill (2006-09-12 11:50:00) [34]а вам обязательны такие подробности? fieldtype не хватает?
Reindeer Moss Eater (2006-09-12 11:46:00) [35]Кол-во знаков после точки = TField.Size
SergP. (2006-09-12 11:46:00) [36]Хм... Мне нужно сделать select из Оракла и потом результат запихнуть в Dbf
Каким образом тогда можно типы полей узнать?
novill (2006-09-12 11:40:00) [37]+1
Такие подробности в датасете обычно не хранятся. надо запрашивать из описания.
ANB (2006-09-12 11:34:00) [38]Никак.
Доставай из словаря.