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

Вниз

Динамическое создание БД   Найти похожие ветки 

 
Гарик   (2006-05-27 21:47) [0]

Здравствуйте, Мастера.
Мне нужно динамически создать БД, но количество полей заранее не известно. Подскажите как это можно сделать, пожалуйста с примером. (нужно для конвертации Excel в DB, но сколько колонок будет в Excel заранее не известно, а создавать каждый раз базу вручную, сами понимаете).
Заранее блогодарен за ответы.


 
Desdechado ©   (2006-05-27 21:53) [1]

учим SQL (CREATE TABLE)
используем TQuery


 
Гарик   (2006-05-27 21:56) [2]

Спасибо.
А можно пример по конкретному вопросу.


 
Desdechado ©   (2006-05-27 22:20) [3]

s := "CREATE TABLE T1( ";
for i := 1 to 5 do begin
s := s + "f" + IntToStr(i) + " INTEGER";
if( i <> 5 ) then
s := s + ","
else
s := s + ")";
end;
query.sql.text := s;
query.execsql;


 
Гарик   (2006-05-27 22:23) [4]

Спасибо, буду пробовать.


 
Sergey13 ©   (2006-05-29 09:18) [5]

2 Гарик   (27.05.06 21:47)
Эксель сам может сохранять в DBF файлы.


 
solenko ©   (2006-05-29 09:43) [6]

TTable.CreateTable.


var t:TTable;
begin
t.FieldDefs.Add("id", ftInteger,0);
t.FieldDefs.Add("name", ftString,50);
t.CreateTable;
end;


 
VICTOR_   (2006-05-29 23:08) [7]

Как вариант
http://kladovka.net.ru/delphibase/?action=viewfunc&topic=basebde&id=10293


 
Евгений Р.   (2006-05-29 23:33) [8]

Ф-ция создает таблицу, идентичную набору данных и сливает в нее все записи:

procedure saveDsToFile(ds:TDataSet;pth:string);
 var tbl:Ttable;
     fld,fld1:Tfield;
     i:integer;
     ft:TFieldType;
     fSize:word;
Begin
   if not ds.active then exit;
   tbl:=ttable.create(nil);
   tbl.DataBaseName:="";
   tbl.TableName:=pth;
   tbl.TableType:=ttParadox;
   tbl.fieldDefs.clear;
   for i:=0 to ds.fieldCount-1 do Begin
       fld:=ds.fields[i];
       ft:=ftUnknown;
       if fld is tStringField then ft:=ftString;
       if fld is tIntegerField then ft:=ftInteger
         else if fld is tNumericField then ft:=ftFloat;
       if fld is tDateField then ft:=ftDate
         else if fld is tDateTimeField then ft:=ftDateTime;
       if fld is tBooleanField then ft:=ftBoolean;
       if fld is tMemoField then ft:=ftMemo;  
       fSize:=0;
//        if fld is tStringField then
       fSize:=fld.size;
       if ft=ftUnknown then continue;
       tbl.fieldDefs.add(fld.fieldName,ft,fSize,false);
   End;{for}
   tbl.CreateTable;
   tbl.close;
   tbl.open;
   ds.first;
   while not ds.eof do Begin
      tbl.append;
      for i:=0 to ds.fieldCount-1 do Begin
          fld:=ds.fields[i];
          fld1:=tbl.fields[i];
          fld1.value:=fld.value;
      End;{for}
      tbl.post;
      ds.next;
   End;{while}

   tbl.free;
End;{saveDsToFile}


 
Гарик   (2006-05-30 12:09) [9]

Спасибо Всем за примеры, буду пробовать.


 
ЮЮ ©   (2006-05-30 12:15) [10]

Мне нужно динамически создать БД, но количество полей заранее не известно.

Не верю. Не верю что кому-то нужно приложение, в котором напрочь отсутствует бизнесс логика. Для конструирования таблиц пользователю и Acess-а  за глаза хватит.


 
mr.il ©   (2006-05-30 12:44) [11]

with Q_CreateTable do begin
   Close;
     SQL.Clear;
     SQL.Add("CREATE TABLE ""+_FName+""");
     SQL.Add("(DistrId CHAR(15), ");
     SQL.Add("MngId DECIMAL(10), ");
     SQL.Add("""+_FName+""."Desc" CHAR(200), ");
     SQL.Add("DateBegin DATE, ");
     SQL.Add("DateEnd DATE, ");
     SQL.Add("uid CHAR(15))");
     ExecSQL;
     SQL.Clear;
     SQL.Add("CREATE INDEX uid ON ""+_FName+"" (uid)");
     ExecSQL;
 end;


 
Евгений Р.   (2006-05-30 15:59) [12]

"Не верю. Не верю что кому-то нужно приложение, в котором напрочь отсутствует бизнесс логика. Для конструирования таблиц пользователю и Acess-а  за глаза хватит."

Часто бизнес-логику используеш при настройке приложения, и не всем для этого подходит Acess.


 
ЮЮ ©   (2006-05-31 05:11) [13]

Часто бизнес-логику используеш при настройке приложения

Странная, однако, "настройка", в ходе которой у объекта обнаруживаются неизвестные до этого свойства (а именно так я привык смотреть на таблицу и её поля)  и программа с ходу понимает как их в дальнейшем интерпретировать



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

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

Наверх




Память: 0.49 MB
Время: 0.075 c
2-1152864598
yurick1
2006-07-14 12:09
2006.08.06
компоненты


2-1152795828
Dbrg
2006-07-13 17:03
2006.08.06
Учетные записи пользователей


3-1149163023
Hadroran
2006-06-01 15:57
2006.08.06
Динамические LookUp поля


15-1152273518
Колдун
2006-07-07 15:58
2006.08.06
Учебная деятельность


2-1153439623
Батыр
2006-07-21 03:53
2006.08.06
UrlDownloadToFile