el sql de update debe tener un where:
Código SQL
[-]
update ventas
set corte = 1
where (corte= 0) and ( cancelada=0)
ahora haces un Query1.ExecSql y listo.
Hay un problema:
- Haces el select, ves tus datos en el dbgrid y te vas a tomar café.
- Otros usuarios añaden nuevos registros con corte =0 y cancelada = 0
- Después del cafetito ejecutas la sentencia.
obviamente la consulta de actualización también va a afectar a los registros de tus otros usuarios.
Para que solo afecte a los que ves en el grid, tendrías que recorrer el grid e ir apuntando la clave primaria de cada uno de los registros, de forma que el sql quedará así:
Código SQL
[-]
update ventas
set corte = 1
where ClavePrimaria in ( 2, 3, 4, 56, 5, 55 , 67)
Suponiendo que la clave primaria sea un número entero, claro.
No es nada difícil construir el sql:
Código Delphi
[-]
var strWhere :string;
begin
query1.first; while not query1.eof do
strWhere := strWhere + query1.Fieldbyname('claveprimaria').AsString + ', '
if strWhere <> ',' then
begin
delete(strWhere, length(strWhere), 1); strWhere := 'where claveprimaria in (' + strWhere + ')';
end;
Tampoco es eficiente y si son muchos registros, busca otra forma de hacerlo, o la actualización puede tardar mucho tiempo en llevarse a cabo.
Saludos