Re[3]: Требуется шаблонизатор типа Smarty
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 18.10.10 07:59
Оценка:
Здравствуйте, Eugene Tihonov, Вы писали:

ET>Тут дело в том, что такую операцию скорее всего придётся проделывать не для одной таблицы, а для нескольких. Нужен общий шаблон. Пользователь его поправил и сгенерировал скрипт для всех таблиц.


Даже напишу примерчик :


const
    UP_SQL='UPDATE %TABLENAME% SET %FIELDLIST% WHERE %PKFIELD%;'; 

var FieldList:TStringList; 
    i:integer;
    SQL:string;
    S:String;
   
//-------- .......... -------------------
  GetFieldListForTable(TableName, FieldList, PKFieldName);   // получили список полей + PK поля для таблицы TableName 
  
  CheckListBox1.Items.Assign(FieldList);                     // дали пользователю что-то почекать в списке 

 // .... тут диалог показали, если все ок -  двигаем дальше .....

 // убираем ненужные поля
  for i:=Pred(CheckListBox1.Items.Count) downto 0 do
     if not CheckListBox1.Checked[i] then FieldList.Delete(i);

 // начинаем строить шаблон
  SQL:=UP_SQL;

 // подставляем имя таблицы  
  SQL:=StringReplace(SQL,'%TABLENAME%',TableName,[rfReplaceAll,rfIgnoreCase]);

 // подставляем список полей, который предварительно строим
  S:='';
  for i:=0 to Pred(FieldList.Count) do
    begin
      S:=S+FieldList.Strings[i]+'=:'+FieldList.Strings[i];
      if i<Pred(FieldList.Count) then S:=S+',';
      S:=S+#13#10;
    end;
  SQL:=StringReplace(SQL,'%FIELDLIST%',S,[rfReplaceAll,rfIgnoreCase]);

 // ну и под конец - заканчиваем генерацию 

  S:=PKFieldName+':='+PKFieldName;

  SQL:=StringReplace(SQL,'%PKFIELD%',S,[rfReplaceAll,rfIgnoreCase]);
WBR, Dmitry Beloshistov AKA [-=BDS=-]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.