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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
6-59300
Aldor
2002-09-20 11:56
2002.11.18
А можно ли узнать имя компа в сети?


4-59475
Donatas
2002-10-06 18:27
2002.11.18
HOOK и и тд


14-59412
Карлсон
2002-10-30 17:12
2002.11.18
кристаллы


1-59127
AFrolov
2002-11-06 11:36
2002.11.18
Как лучше организовать показ состояния процесса


14-59424
lak
2002-10-31 15:26
2002.11.18
html - переадресация





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