Duda sobre la modificación de datos desde un datagrid

Necesito ayuda con una consulta...
Tengo que modificar los datos desde un datagrid pero sin identificador como un código y también puede haber datos repetidos... El código que tengo es el siguiente...
Dim modcli As String
Dim modpre As Double
Private Sub DataGrid1_Click()
modcli = DataGrid1.Columns(0).Text
modpre = DataGrid1.Columns(1).Text
Text1.Text = modcli
Text2.Text = modpre
End Sub
Private Sub cmdMod_Click()
sql = "update mozos_mov set cliente='" & Text1 & "',precio=" & Text2 & " where cliente='" & modcli & "' and precio=" & modpre & ""
cn.Execute sql
End Sub
Entonces acá le digo que cuando haga click en un registro del datagrid me muestre los valores en el text1 y text2.. Después cuando haga click en modificar que actualize los valores... Me hace todo bien hasta el momento en que un registro de la tabla esta en decimal o sea por ej modpre=3,5 entonces en text2 me muestra 3,5 pero si lo quiero modificar a 8 me tira un error.. "error de sintaxis (coma) en la expresión de consulta 'cliente='nombre' and precio=3,5'
Ah y otra cosa es que por ej si tengo dos registros iguales idénticos me cambia los dos juntos y yo no quiero eso.. Por favor alguien que me ayude... Desde ya muchas gracias.. Saludos...
Respuesta
1
Primero que nada prueba lo siguiente, si en vez de colocar 8, colocas 8,0
A ver si te da el mismo error.
¿Luego verificaste que en la base de datos el valor de "Precio" admita el parámetro que le estás pasando?
Bien,

Si tienes 2 registros igules y los modifica ambos es porque no has puesto en la base de datos una clave principal la cual NO permita duplicados, y pasándole ese parámetro evitaras Modificar Datos indeseeados.
Si quieres plantea un poco de info sobre lo campos que tienes y sus tipos de datos para poder darte una respuesta más completa,
Ahí me fije.. y no.. me dice el mismo error... cuando esta el numero en entero y lo modifico por otro entero.. me deja y cuando lo esta en entero y lo modifico por uno decimal también me deja... el tema es cuando el numero esta en decimal y lo quiero modificar a entero.. por ej: el numero 3,5 lo quiero modificar a 8 y ahí es donde no me deja y me tira ese error para las demás modificaciones me deja... no se.. ¿qué puede ser?... desde ya gracias por tu tiempo y ayuda...
Saludos
¿Con qué valor tienes en la base de datos el Registro "Precio"?
He probado de diferentes formas pero el error a mi no me aparece, y estoy muy seguro que tu error está en el valor que le has otorgado en la base de datos, y NO en tu consulta.
En caso de que el valor sea Long Integer, ¿Los decimales los tienes en auto?

La base la tengo en access... y al campo precio le puse en Tipo de datos:NUMERO, Tamaño del Campo: DOBLE... Lugares Decimales: 2... ¿esta bien?
En lugares decimales coloca la opción "Auto"
Te recomiendo colocarle Entero Largo en vez de Entero sólo(Numero).
Cuando cambies la opción a decimales automáticos verás que funcionará.
Un saludo.
Si el error persiste vamos a verificar a fondo tú consulta.
No che no funca... perdona que te rompa tanto... no me lo toma.. así como me decís vos cuando le pongo un numero decimal me lo redondea y me lo pasa a entero... no se que error pueda tener la consulta... muchas gracias de en serio.. por la mano que me estas dando
¿No has probado modificando el tipo de dato a "Currency"?
Lo probé con ese tipo de dato y también me funciona, me preocupa eso, el error no me lo da, le he cambiado los tipos de datos y no me da error alguno, por eso estoy convencido que el problema es en la base de datos y no en la consulta(puede que me este equivocando), no agradezcas, es con buena onda, si es necesario más mensajes y tiempo, lo tomaremos, no puede ser que no funcione.
Noté esto fuera de lugar, al menos eso me parece:
sql = "update mozos_mov set cliente='" & Text1.Text & "',precio="
& Text2.Text & " where cliente='" & modcli & "' and precio="
& modpre & ""
NO lo creo necesario, ya que el parámetro que le estás pasando NO es en modo Texto.
(Hablo del precio)
Los de los TextBox te recomiendo que coloques los .Text, el programa obtiene un mejor funcionamiento si estableces TODO y no lo obligas a tomar la propiedad de sus controles por defecto.
Prueba quitando eso de tu consulta.
Dime que tal te va, estoy en contacto.
Ya probé.. y me sigue tirando lo mismo.. exactamente el mismo error... la verdad no se.. y eso de los text ya se los puse... ¿puede ser que tenga que poner la función CDBL en el text2 para el precio?
Antes de cotninuar, te voy a pedir que me muestres campos y registros de tu base de datos, tipos de datos etc. así voy a encargarme de realizar la consulta exactamente con lo mismo que tenés para saber que es lo que pasa, ¿te parece?
Un saludo
ok dale.. te paso los codigos del form...
Option Explicit
Private cn As ADODB.Connection
Private WithEvents rs As ADODB.Recordset
Dim conexion As String
Dim sql As String
Dim total As Double
Dim w As String
Dim modcli As String
Dim modpre As Double

-----------------------------------------------------------
Private Sub cmdIngreso_Click() 'para hacer el ingreso de los datos
'validacion para que el text4 que aparece en el cierre se vaya
If LbMozos.Visible = True And txtResultado.Visible = True Then
LbMozos.Visible = False
txtResultado.Visible = False
End If
'validacion para que el text2 sea si o si numerico
If IsNumeric(Text2) = False Then
w = MsgBox("Escribir Precio de Venta", vbExclamation, "ADVERTENCIA")
Text2 = ""
Text2.SetFocus
Exit Sub
End If
'validacion para que escriba si o si el cliente y el precio
If Text1 = "" Or Text2 = "" Then
w = MsgBox("Rellene Los Campos Para Ingresar los Datos", vbExclamation, "ADVERTENCIA")
Exit Sub
End If
'codigo de ingreso de cliente y precio de las ventas
 If Option1.Value = True Then
sql = "insert into mozos_mov (nro_mozo,cliente,precio) values (" & Val(Text7) & ",'" & Text1 & "'," & Text2 & ")"
cn.Execute sql
Text1 = ""
Text2 = ""
Text1.SetFocus
Call datagridmozo1
Else
sql = "insert into mozos_mov (nro_mozo,cliente,precio) values (" & Val(Text7) & ",'" & Text1 & "'," & Text2 & ")"
cn.Execute sql
Text1 = ""
Text2 = ""
Text1.SetFocus
Call datagridmozo2
End If
End Sub
------------------------------------------------------------
Private Sub cmdMod_Click() 'este el codigo del boton modificar
w = MsgBox("Esta seguro de MODIFICAR este Registro", vbExclamation + vbYesNo, "ADVERTENCIA")
If w = vbNo Then
Text1.SetFocus
Exit Sub
Else
If Text1.Text = "" Or Text2.Text = "" Then
w = MsgBox("Escribir los datos a rellenar", vbExclamation, "ADVERTENCIA")
Text1.SetFocus
Exit Sub
End If
sql = "update mozos_mov set cliente='" & Text1 & "',precio=" & Text2 & " where cliente='" & modcli & "' and precio=" & modpre & ""
cn.Execute sql
Text1 = ""
Text2 = ""
Text1.SetFocus
If Option1.Value = True Then
Call datagridmozo1
Else
Call datagridmozo2
End If
End If
End Sub
------------------------------------------------------------
Private Sub DataGrid1_Click() ' y este es para que me muestre los valores en los texts
modcli = DataGrid1.Columns(0).Text
modpre = DataGrid1.Columns(1).Text
Text1.Text = modcli
Text2.Text = modpre
End Sub
Esto es lo que tengo no se donde puede estar el error... gracias che...
Tú Consulta:
sql = "update mozos_mov set cliente='" & Text1 & "',precio="
& Text2 & " where cliente='" & modcli & "' and precio="
& modpre & ""
Coloca ésta:
sql = "update mozos_mov set cliente='" & Text1 & "',precio="
& Val(Text2) & " where cliente='" & modcli & "' and precio="
& Val(modpre)
PD: No me has pasado ningún valor de lo que tienes en tu base de datos, registros, campos ni nada, intenta con eso, a ver que tal, de lo contrario si me haces saber los datos que te pido podremos solucionarlo, sólo con ver la tabla mozos_mov alcanzará, suerte y estamos en contacto.
Probé con la consulta como me dijiste... ahora no me tira el error.. pero tampoco me lo modifica.. esto es una cosa de locos.. jaja..
Los campos que tengo son:
Nro_Mozo: Tipo de datos=Numero, Tamaño del Campo=Entero Largo,
                   Lugares decimales=Automatico..(este Nro_Mozo se repite)
Cliente: Tipo de Datos=Texto
Precio: Tipo de datos=Numero, Tamaño del Campo=Doble, Lugares decimales=Automatico
En Precio es donde me marcaba el error ese que te dije... ahora lo hice como vos me dijiste y no me tira error pero no me modifica nada... es como si a la consulta la salteara porque me ejecuta los códigos que vienen después de la consulta... o sea me limpia los textos..
Mientras voy haciendo lo otro, revisa esto:
Private Sub DataGrid1_Click() ' y este es para que me muestre los valores en los texts
modcli = DataGrid1.Columns(0).Text
modpre = DataGrid1.Columns(1).Text
Text1.Text = modcli
Text2.Text = modpre
End Sub
Modificalo así:
Private Sub DataGrid1_Click() ' y este es para que me muestre los valores en los texts
modcli = DataGrid1.Columns(0).Text
modpre = DataGrid1.Columns(1).Text
Text1.Text = modcli
Text2.Text = Val(modpre)

End Sub
Luego pruebas y me avisas.
Ya lo hice... pero eso lo que me hace es mostrarme el valor de modpre como entero.. o sea que si vale 10.50 me lo pasa al text2 como 10...
Quiero ver si se puede que en el text2 me ponga el valo de modpre como va si es entero o decimal y después modificarlo... pero si es mucho lio no importa de alguna u otra manera veré si se puede.. no te quiero complicar la vida
Bueno encontré una forma, ya que no damos con la tecla y sino vamos a seguir tiempo innesecario...
Lo único que debes modificar en tu base de datos, es agregando un campo más
Llamado IdDato
Le das valor Autonumérico y decimales automáticos.
Luego cambia tu valor del precio, de Numero a Currency(o Moneda, no sé en que idioma lo tienes), por defecto te deja los decimales automáticos.
Ahora Tu consulta quedaría simplemente así:
sql = "update mozos_mov set cliente='" & Text1.Text & "',precio='" & Text2.Text & "' Where IdDato=" & txtId.Text
El valor del idDato me quedo tranquilo que te darás cuenta cómo y dónde colocarlo, ya que según tengo entendido Pasas valores del DataGrid a los TextBox, ¿Verdad?
Como lo notarás la consulta actualiza el dato según su ID, y cómo es autonumérico, es imposible repetirlo, por lo tanto cambiara el que deseas y ningún otro.
Tengo la tabla como me lo indicaste y modifica correctamente de la forma que te lo estoy pasando, recuerda que cuando actualizas y deseas ver los cambios instantáneamente debes cerrar la conexión, volver a abrirla y mostrar los datos, espero entiendas a que me refiero.
Ésto te sirve y le dará integridad a tu Base De datos y a la vez es más fácil de comprenderlo y no te vuelves loco poniendo cómo condición más de un valor,
kresh.. hermano querido einsteins un poroto a tu lado... me anduvo!... por fin! jaja.. gracias viejo por tu tiempo y persistencia y respuestas rapidísimas... te agradezco mucho... de veras +super. Enorme. Gigante excelente! Saludos y suerte..!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas