![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание БД [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