Главная страница
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.042 c
4-1145147097
Volf_555
2006-04-16 04:24
2006.08.06
Как изменять значок программы в трэи по необходимости?!


15-1152258662
juice
2006-07-07 11:51
2006.08.06
Athlon64 3200+ s939 + Гб оперативки


15-1152114162
mac117
2006-07-05 19:42
2006.08.06
Ошибка доступа к XML файлу через msxml


1-1151182022
AlexeyT
2006-06-25 00:47
2006.08.06
TImage: баг с иконками большими 32х32


15-1152509704
Ega23
2006-07-10 09:35
2006.08.06
С Днём рождения! 8 июля