Здравствуйте, 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]);