Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2008
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Metodo Ideal para Modificar un valor a todos los Registros mostrados en un DBGrid

Estimados Colegas del foro:

Tengo un Pequeño Problema que ojala alguien pudiera Darme una luz para resolverlo.

Utilizo el Componente MYDAC para conectar con la Base de Datos. Tengo un DBGrid Conectado a una Tabla a traves de un Query. Ejecuto la Siguiente sentencia SQL

select * from ventas where (corte=0) and (cancelada=0)

El campo booleano corte me indica que no esta contabilizada a venta y el campo booleano cancelada me indica si esa venta no esta cancelada. hasta aqui todo bien

el problemita a que me enfrento es que deseo cambiar automaticamente el valor del campo corte a True (1) de unicamente los registros que tengo mostrados actualmente en el DBGrid, independientemente de que se hayan agregado registros a la tabla despues de haber ejecutado mi sentencia, unica y exclusivamente a los registros que tengo en el grid.

Lo intente de la siguiente manera

coloque en el SQLUpdate del query la siguiente instruccion

Código SQL [-]
UPDATE ventas
SET
  corte = 1

y despues ejecutaba
Código Delphi [-]
myquery1.Edit;
myquery1.Post;

A veces se ejecutaba bien, pero la mayoria de las veces marca error de violacion de no que que cosa.

y es que no puedo usar la sentencia update directamente oprque si se agrega algun o algunos registros despues de hacer mi sentencia selec, obviamente ya cambian varios parametros.

Les agradecere la ayuda y atencio prestada a este post?

Gracias
Alexis de la Cruz
Responder Con Cita
  #2  
Antiguo 28-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
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
  #3  
Antiguo 28-02-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Alexis De la Cr Ver Mensaje
...A veces se ejecutaba bien, pero la mayoria de las veces marca error de violacion de no que que cosa.
Estaría bien saber exactamente cual es el "Error de Violación de no se que cosa" que te da.
De otra forma es difícil ayudarte.

Si es un Access Violation, es cuestion de memoria y puede ser que no tenga nada que ver con la sentencia SQL.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 29-02-2008
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
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.
Fijate que la instruccion Query1.ExecSQL no la la encuentro en el componente MyQuery de MyDAC.

Tampoco Tiene el Metodo Update.


Gracias Neftali por contestar.... estoy tratando de reproducir las condiciones en la que se presenta el error, y obviamente tomar nota exacta del mensaje de error que manda, curiosamente no se ha presentado el error, y eso que estoy dale y duro ejecutando el proceso. Ahorita son las 10 de la noche y obviamente ya no estan trabajando nadie mas que yo, y haciendo memoria las veces que me ha arrojado el error ha sido en el transcurso del dia, horas habiles, que es cuando se esta ejecutando el punto de venta, sera por ahi el problema? algun problema de acceso a la base de datos?
Responder Con Cita
  #5  
Antiguo 29-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Todo query tiene el método ExecSql, quizás se llama Exec o ExecQuery, aunque en honor a la verdad, no conozco mydac y estoy suponiendo las cosas.

y la otra cosita: ¿método update?
Dije "sql de update" porque es así como se llaman a la instruccción sql que estamos ejecutando, es un SQL de acción (inserción, borrado o actualización). Ese código debería escribirse dentro de la propiedad query1.SQL

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 03-03-2008
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Bueno, yo solo pensaba en algun metodo como el refresh.. Aclaro qu ste tipo de pregunta la hago porque no soy experto.. Al final de cuentas me doy por vencido.... pude haber hecho un ciclo que vaya desde el primer registro del grid hasta el ultuimo y cambie el valor del campo que deseo, y luego aplicarle un applyupdate ya que esta en modo cachedupdates.... pero al final me decidi por unicamente ejecutar una sentencia update....


Gracias de todos modos a los que se tomaron la amabilidad de contestar a este post
Responder Con Cita
  #7  
Antiguo 03-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Alexis De la Cr Ver Mensaje
Bueno, yo solo pensaba en algun metodo como el refresh.. Aclaro qu ste tipo de pregunta la hago porque no soy experto.. Al final de cuentas me doy por vencido.... pude haber hecho un ciclo que vaya desde el primer registro del grid hasta el ultuimo y cambie el valor del campo que deseo, y luego aplicarle un applyupdate ya que esta en modo cachedupdates.... pero al final me decidi por unicamente ejecutar una sentencia update....


Gracias de todos modos a los que se tomaron la amabilidad de contestar a este post
Hey compañero, tan rápido te das por vencido? Ciertamente ese componente por lo que alcanzo a ver requiere de hacer mas "talacha" pero de que se puede se puede.

Mira este hilo, tal vez te ayude.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 09-04-2008
santi33a santi33a is offline
Miembro
 
Registrado: jun 2005
Posts: 208
Poder: 19
santi33a Va por buen camino
Me parece tambien que te diste por vencido muy rápido y que falto lo principal para que te puedan ayudar que es el error que te da, pues un error de violacion de no se que cosa no ayuda mucho para responderte
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Modificar valor campos dbgrid waremovil C++ Builder 4 02-09-2007 01:27:52
Como sustituir un valor durante una consulta para mostrarlo en un dbgrid chetos7 SQL 7 16-01-2007 16:36:03
como le hago para no imprimir todos los registros Gangster Impresión 11 03-11-2006 22:59:22
Ayuda para modificar valores de un dbgrid fmonte Varios 5 28-08-2004 03:21:44
Page Size ideal para la base de datos Carlitos Firebird e Interbase 2 10-06-2004 22:18:09


La franja horaria es GMT +2. Ahora son las 20:01:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi