FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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
y despues ejecutaba
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 |
#2
|
||||
|
||||
el sql de update debe tener un where:
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í: Suponiendo que la clave primaria sea un número entero, claro. No es nada difícil construir el sql: 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. |
#3
|
||||
|
||||
Cita:
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. |
#4
|
|||
|
|||
Cita:
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? |
#5
|
||||
|
||||
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. |
#6
|
|||
|
|||
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 |
#7
|
|||
|
|||
Cita:
Mira este hilo, tal vez te ayude. Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#8
|
|||
|
|||
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
|
|
|
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 |
|