Registro a registro MySQL
Javi
javi en bertayjavi.com
Vie Nov 9 08:10:01 CET 2007
Hola, el problema que yo veo es que modificas el valor de la variable id
cuando ese valor no debes tocarlo para nada porque sino pierdes la
integridad referencial, esa variable debe de ser digamos de solo lectura
para que nos aseguremos de que siempre habra un registro con esa id. Yo lo
que haria, de hecho es como lo hago, seria una funcion donde le paso si
quiero avanzar uno , retroceder uno o volver a leer el mismo registro, para
hacer eso simplemente juega con la sentecia sql que envias. ej.
para retroceder:
SELECT * FROM tabla WHERE id<Variable_id ORDER BY id DESC LIMIT 1
de esta manera obtendras el registro y solo uno inmediatamente anterior al
id. despues compruebas si has recibido algo y si no es que id era el primer
registro
para avanzar:
SELECT * FROM tabla WHERE id>Variable_id ORDER BY id ASC LIMIT 1
para recargar el registro
SELECT * FROM tabla WHERE id=Variable_id LIMIT 1
el LIMIT 1 es importante para no saturar la red con datos imnecesarios
puesto que tu solo necesitas un registro
Otra observacion evita en la medida de lo posible usar el * para definir la
lista de campos, siempre es mejor escribir tu la lista de campos que quieres
y en el orden que los quieres
----- Original Message -----
From: "Manuel Enrique González Ramírez" <maengora en gmail.com>
To: "La lista de python en castellano" <python-es en aditel.org>
Sent: Friday, November 09, 2007 3:33 AM
Subject: [Python-es] Registro a registro MySQL
> Hola a todos.
>
> Nuevamente con inquietudes.
>
> Sigo aprendiendo con una pequena aplicacion que quier armar y ahora se me
> presenta el siguiente inconveniente:
> 1. ANTECEDENTES Y DATOS:
> - Tengo un form con varios campos (txt_id, txt_codigo, txt_fecha,
> cmb_tipomovimiento)
> - Igualmente una base de datos con una tabla llamada control y que posee
> los
> campos: id (autonumerico), codigo, fecha y tipomovimiento
> - La tabla control la he llenado desde el form con 3 registros donde id
> (1,2,3), codigo para los tres registros(2212) y los demas datos son
> diferentes.
>
> 2. ACCIONES
> - En el form he creado dos botones denominados bt_adelante y bt_atras que
> al pulsarlos deben con el resultado de una consulta MySQL
> leer el id y si es del caso ir a adelante o atras. Ejemplo:
> Si el id = 1 y pulso el boton bt_adelante, debe ir a id=2 y mostrar los
> datos asociados a dicho id y viceversa.
>
> Hasta ahi todo muy bien.
>
> 3. DIFICULTAD/PROBLEMA
> - Si yo elimino por ejemplo el registro del id=2 y vuelvo a hacer clic en
> alguno de los botones ya no avanza ya que no hay un consecutivo para
> mostrar
> los id.
> Ejm: Si estoy en el id=1 y hago clic en el bt_siguiente NO ENCUENTRA el
> id=2 de igual forma NO HACE NADA, no avanza al id=3 que si existe. Lo
> mismo
> me sucede si estoy en id=3 y voy hacia atras; no muestra el id=1, ya que
> busca el id=2.
>
> - Inserto otro registro desde el form pero este me queda con id=4 y pues
> si
> estoy ubicado en id=3 y doy hacia adelante, muestra en nuevo registro y
> viceversa, pero al estar en el 3 y querer devolverme ya no me da.
>
> 4. SOLICITUD
> Necesito hacer, no se algun bucle o algo que me liste los codigos con sus
> id
> (en un segundo plano por ejemplo) y que al pulsar los botones pueda ir de
> registro en registro indendiente del id pero que sean del mismo codio.
>
> ....Eso, algo parecido a lo que tiene access los famosos FILTROS que te
> listan por ejemplo varios productos de la misma familia pero con id
> diferentes pero que al hacer clic en el boton next y previous te van
> mostrando los registros.
>
> Les aclaro, apenas estoy aprendiendo, estoy muy entusiasmado con esto de
> python y visualwx, pero me entusiasma mas la idea de consultar en esta
> lista
> y saber que uno, varios o muchos estan dispuestos a colaborar. De
> antemano
> muchas gracias.
>
> Les dejo el fragmento de codigo del boton evento atras, del boton
> bt_atras.
>
> def atras(self,event): #init function
> #[253]Code event VwX...
> if(not self.VwXEvOnButtonClickAll(event)):return;
> #Don't modify[253]#
> #add your code here
> codigo = self.txt_codigo.GetValue()
> id = self.txt_id.GetValue()
>
> busca = cursor.execute('SELECT COUNT(codigo) FROM control where
> codigo=%s',(codigo))
> res = cursor.fetchone()
>
> id = int(id) - 1
>
>
> #print id
>
> busca2 = cursor.execute('SELECT * FROM control where codigo=%s and
> id=%s',(codigo,id))
> res2 = cursor.fetchall()
>
> for i in res2:
> self.txt_id.SetLabel(str(i[0]))
> self.cmb_clasemov.SetLabel(str(i[3]))
> self.cmb_origen.SetLabel(str(i[4]))
> self.cmb_destino.SetLabel(str(i[5]))
>
> self.cmb_detalle.SetLabel(str(i[6]))
> self.cmb_articulo.SetLabel(str(i[7]))
> self.txt_cantidad.SetLabel(str(i[8]))
> return #end function
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es