Ver Mensaje Individual
  #2  
Antiguo 28-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
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; // consulta del grid;
while not query1.eof do
  strWhere := strWhere + query1.Fieldbyname('claveprimaria').AsString + ', '
if strWhere <> ',' then
begin
  delete(strWhere, length(strWhere), 1); // borrar la última coma
  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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita