Главная страница
    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.009 c
7-59461
REA
2002-09-16 10:42
2002.11.18
File Cache


14-59398
DDS
2002-10-28 09:41
2002.11.18
Чудеса с монитором.


14-59390
Tornado
2002-10-30 08:29
2002.11.18
Хороший FAQ по Дульфи


4-59509
Leon_O
2002-10-07 15:41
2002.11.18
Билинг


1-59260
Delphi Maniak
2002-11-07 11:43
2002.11.18
Файлы, файлы, файлы...





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