Script de update dinamico
05/06/2015
0
Tenho a seguinte procedure onde gera o script de atualização dos campos alterados.
Só que está gerando errado em determinadas situações e colocando uma ( , ) virgula antes do WHERE.
O que será que está errado ?
Só que está gerando errado em determinadas situações e colocando uma ( , ) virgula antes do WHERE.
O que será que está errado ?
procedure TPrincipal.GerarUpdate(A: TDBAtribute); Var I, J:Integer; E:string; Upd:Boolean; begin Upd:=False; A.UpdateSQL.SQL[usModified].Clear; A.UpdateSQL.SQL[usModified].Add('UPDATE '+A.TableName+' SET'); for I := 0 to A.DataSet.FieldCount - 1 do begin if (A.FieldLis.IndexOf(A.DataSet.Fields[I].FieldName) <> -1) AND (A.DataSet.Fields[I].OldValue <> A.DataSet.Fields[I].NewValue)then begin Upd:=True; if I < A.DataSet.FieldCount - 2 then E:=',' Else E:=''; A.UpdateSQL.SQL[usModified].Add(Format(' %s = :%s%s',[A.DataSet.Fields[I].FieldName, A.DataSet.Fields[I].FieldName, E])); end; end; if Upd then begin for J := Low(A.KeyFilters) to High(A.KeyFilters) do if J=0 then A.UpdateSQL.SQL[usModified].Add(Format('WHERE %s=:OLD_%s',[A.DataSet.Fields[J].FieldName, A.DataSet.Fields[J].FieldName])) else A.UpdateSQL.SQL[usModified].Add(Format(' AND %s=:OLD_%s',[A.DataSet.Fields[J].FieldName, A.DataSet.Fields[J].FieldName])); if Length(A.KeyFilters)=0 then A.UpdateSQL.SQL[usModified].Add(Format('WHERE %s=:OLD_%s',[A.KeyFieldName, A.KeyFieldName])) else A.UpdateSQL.SQL[usModified].Add(Format(' AND %s=:OLD_%s',[A.KeyFieldName, A.KeyFieldName])); end; A.UpdateSQL.SQL[usModified].SaveToFile('Testete.txt'); if not Upd then A.UpdateSQL.SQL[usModified].Clear; end;
Jbr
Curtir tópico
+ 0
Responder
Posts
19/06/2015
Dorivan Sousa
if I < A.DataSet.FieldCount - 2 then E:=',' Else E:='';
pq - 2 ?? nao seria -1 para verificar se é o ultimo field?
pq - 2 ?? nao seria -1 para verificar se é o ultimo field?
Responder
Clique aqui para fazer login e interagir na Comunidade :)