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

Вниз

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

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

Наверх




Память: 0.47 MB
Время: 0.01 c
1-1151068147
oleggar
2006-06-23 17:09
2006.08.06
нужно в Делфи 5 из файла Excel2000 считать данные


15-1152203317
Vlad
2006-07-06 20:28
2006.08.06
Интернет-конференция с В.В.Путиным


2-1153132968
Megabyte
2006-07-17 14:42
2006.08.06
Непонятки в 3-хзвенке


9-1131132680
GGG
2005-11-04 22:31
2006.08.06
DelphIX Как сделать чтоб для каждого спрайта была своя процедура?


1-1150981906
Михаил2
2006-06-22 17:11
2006.08.06
При запуске компилятора появляется только форма





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