Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.18;
Скачать: CL | DM;

Вниз

Определение структуры бд   Найти похожие ветки 

 
13-ый ©   (2002-10-28 00:24) [0]

есть произвольная база в формате dbf. надо программно получить её структуру, т.е. - тип полей, размер.

если с первым ясно, то со вторым возникают проблемы с типом float - как определить размер части после запятой ?!

для доступа использую Halcyon работающий через tdataset


 
Bsl   (2002-10-28 08:06) [1]

А демки Дельфовые смотреть пробовал - там, вроде, есть.


 
Vovchik_A   (2002-10-28 16:18) [2]

Ну наверняка свойство FieldDefs никто не отменял в Halcyon


 
kudatsky   (2002-10-28 17:08) [3]

Процедура CopyStru анализирует структуру DBF-файла и создаёт SQL-оператор CREATE TABLE, соответствующий этой структуре. Этот оператор загружается в Query и выполняется, создавая пустой DBF-файл той же структуры.

Поля процедуры CopyStru:
DataSet - TTable или TQuery. Перед выполнением здесь должен быть открыт DBF-файл, структура которого копируется.
TablePath - полный путь к директории, в которой должен быть создан DBF-файл.
Query - сюда загружается оператор CREATE TABLE. Перед выполнением процедуры CopyStru должен быть закрыт.

Если в директории уже есть файл с тем-же именем, его нужно перед выполнением процедуры уничтожить, в противном случае BDE возбудит исключение.



unit CreateSQL;

interface

Uses DB,DBTables,Classes,BDE,SysUtils;

procedure CopyStru(DataSet:TBDEDataSet;TablePath:String;Query:TQuery);
Function SQLType(FldType,SubType,Units1,Units2:Integer):String;

implementation
procedure CopyStru;
var
pfldDes, pCurFld: pFLDDesc;
i: integer;
MemSize: integer;
S:String;
Prop:CurProps;
begin
Query.SQL.Clear;
Check(DbiGetCursorProps(DataSet.Handle, Prop));
Prop.exltMode:=xltField;
Query.SQL.Add("Create table ""+TablePath+"\"+Prop.szName+".dbf""+#13#10+"(");
// Зарезервировать память под описатели полей
MemSize := DataSet.FieldCount * SizeOf(FLDDesc);
pfldDes := AllocMem(MemSize);
try
pCurFld := pfldDes;
Check(DbiGetFieldDescs(DataSet.Handle, pfldDes));
for I:=0 to DataSet.FieldCount-1 do
begin
S:=pCurFld^.szName+" "+SQLType(pCurFld^.iFldType,pCurFld^.iSubType,
pCurFld^.iUnits1,pCurFld^.iUnits2);
if I < DataSet.FieldCount-1 then S:=S+",";
Query.SQL.Add(S);
inc(pCurFld);
end;
finally
FreeMem(pfldDes, MemSize);
end;
S:=Query.SQL[0];
Query.SQL.Add(")");
Query.ExecSQL;
end;
//------------------------------------------------------------------------------
Function SQLType(FldType,SubType,Units1,Units2:Integer):String;
begin
Case FldType of 1: Result:="CHAR("+IntToStr(Units1)+")";
2: Result:="DATE";
3: begin
Case SubType of
22: Result:="BLOB(1,1)"; //Memo
28: Result:="BLOB(1,2)"; //Binary
27: Result:="BLOB(1,4)"; //OLE
end;
end;
4: Result:="BOOLEAN";
5,7: begin
Result:="NUMERIC("+IntToStr(Units1);
if Units2 > 0 then
Result:=Result+","+IntToStr(Units2)+")"
else
Result:=Result+")"
end;
end;
end;
end.



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

Текущий архив: 2002.11.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.021 c
8-59291
login2
2002-07-30 11:18
2002.11.18
Работа с палитрой


6-59296
Aleksandr
2002-09-20 14:32
2002.11.18
Как подойти к работе с Прокси-серверами?


14-59367
KSergey
2002-10-29 14:24
2002.11.18
Как запретить остановку в исходниках компонент


3-59026
Cyril
2002-10-29 19:38
2002.11.18
Можно ли упаковать foxpro таблицу используя ADO


1-59137
Dmittry
2002-11-07 19:18
2002.11.18
Как сделать плавный переход одного цвета в другой?