![]() |
|
|
Регистрация | << Правила форума >> | 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? |