![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
подскажите советом
хочу сделать создание таблицы бд *.dbf по определенной схеме схем для формирования бд ,допустим несколько схем хронятся в таблице настроек NSI программа обрабатывает таблицу NSI и исходя из нее будет уже формировать бд *.dbf Сложность заключается в коде для создания *.dbf например Код:
//begin
// Add('t_ls', ftInteger,0,false);
// Add('t_odt', ftDate,0,false);
// Add('t_osm', ftInteger,0,false);
// Add('t_key', ftString,20,false);
// CreateTable;
//end;есть ли возможность макроподстановки кода предаварительно записав его в переменную , чтобы реализовать динамический рост параметров созздания таблицы. Если есть другой метод решения данной задачи внимательно выслушаю ![]() |
|
#2
|
||||
|
||||
|
Делать можно двумя путями. Через методы Table или написав динамический SQL запрос. В обоих случаях будет обход таблицы описания. Например:
Код:
for i := 0 to Length(NSI)-1 do Add(NSI[i].Fieldname,NSI[i].DataType,NSI[i].Length,false); |
|
#3
|
|||
|
|||
|
Код:
Повтор Удален |
|
#4
|
|||
|
|||
|
получился вот такой простатит
Код:
procedure TForm1.Create_out_file;
var
integ : Tfieldtype;
begin
ADO_NSi_Query.Close;
ADO_NSi_Query.sql.clear;
ADO_NSi_Query.SQL.add('select '+fiel+' from NSI where (mask_point='''+masks+''')');
ADO_NSi_Query.Active:= true;
tm:=0;
counter:=0;
while counter < ADO_NSi_Query.FieldCount do //выкидываем пустые значения и счетаем количество записей
begin
if ADO_NSi_Query.Fields[counter].AsString <> '' then
begin
tm:= tm+1;
counter:=counter+1;
end
else
begin
counter:=counter+1;
end;
end;
edit3.Text:= inttostr(tm); //проверка
with TTable.Create(nil) do
begin
ADO_CFG_Query.Close;
ADO_CFG_Query.sql.Clear;
ADO_CFG_Query.sql.add('select PATH_TO_OUT_FILES from NSI where MASK_POINT= ('''+masks+''') ');
ADO_CFG_Query.Active:=true;
DatabaseName:= ADO_CFG_Query.Fields[0].AsString; //(* alias *)
ADO_CFG_Query.sql.Clear;
ADO_CFG_Query.Close;
TableName:= r[0]+r[1]+r[2]+r[3]+r[4]+r[5];
TableType := ttFoxPro;
if TableName = '' then
begin
showMessage('!!!!!!!!!!!!!!!!!!!!!');
end
else
begin
with FieldDefs do
begin
counter:=0;
counter1:=2;
counter2:=3;
while counter < tm do
begin
if ADO_NSi_Query.Fields[counter1].AsString = 'FTInteger' then
begin
integ:= FTInteger;
end;
if ADO_NSi_Query.Fields[counter1].AsString = 'FTString' then
begin
integ:= FTString;
end;
if ADO_NSi_Query.Fields[counter1].AsString = 'FTDate' then
begin
integ:= FTDate;
end;
Add(ADO_NSi_Query.FieldsAdd(ADO_NSi_Query.Fields[counter].AsString,integ,ADO_NSi_Query.Fields[counter2].AsInteger,false);
counter:= counter+4;
counter1:= counter1+4;
counter2:= counter2+4
end;
CreateTable;
ADO_NSi_Query.sql.clear;
ADO_NSi_Query.Close;
ADO_CFG_Query.sql.Clear;
ADO_CFG_Query.Close;
end;
end;
end;
end;Add(ADO_NSi_Query.FieldsAdd(ADO_NSi_Query.Fields[counter].AsString,ADO_NSi_Query.Fields[counter1].DataType,ADO_NSi_Query.Fields[counter2].AsInteger,false); создает таблицу и делает тип полей почемуто строковое. или он так делает так как берет параметр из структуры базы NSI? |