Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое создание БД [D7, dBase, FoxPro, Paradox]


Гарик ©   (2006-05-27 21:47:00) 

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


ЮЮ   (2006-05-31 05:11:00) [1]

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

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


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

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

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


mr.il   (2006-05-30 12:44:00) [3]

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 12:15:00) [4]

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

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


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

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


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

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

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}


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

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


solenko   (2006-05-29 09:43:00) [8]

TTable.CreateTable.


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


Sergey13   (2006-05-29 09:18:00) [9]

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


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

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


Desdechado   (2006-05-27 22:20:00) [11]

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 21:56:00) [12]

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


Desdechado   (2006-05-27 21:53:00) [13]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо