Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/06/2011, 14:29
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Porque fetchone no me hace lo que quiero

Comprendo, pero el problema es que al hacer la consulta en cada ejecución de la función, siempre estás accediendo al primer registro. Deberías hacer la consulta primero, y luego iterar sobre el cursor. Una forma podría ser:

Código Python:
Ver original
  1. def consulta(self):
  2.     conexion=sqlite3.connect("MOTOS.S3DB")
  3.     self.cursor=conexion.cursor()
  4.     self.cursor.execute("SELECT CODIGO,PRECIO,DETALLE FROM MOTOS")
  5.  
  6. def onsiguiente(self,event, cursor):
  7.     row = self.cursor.fetchone()
  8.     self.textocodigo.SetValue(row[2])
  9.     self.textocodigo2.SetValue(row[0])
  10.     self.textocodigo3.SetValue(row[1])

Otra forma mejor es aprovechar las capacidades de SQLite:

Código Python:
Ver original
  1. def onsiguiente(self,event, offset):
  2.     conexion=sqlite3.connect("MOTOS.S3DB")
  3.     cursor=conexion.cursor()
  4.     cursor.execute("SELECT CODIGO,PRECIO,DETALLE FROM MOTOS LIMIT 1 OFFSET " + offset)
  5.     row = cursor.fetchone()
  6.     self.textocodigo.SetValue(row[2])
  7.     self.textocodigo2.SetValue(row[0])
  8.     self.textocodigo3.SetValue(row[1])

offset es una variable que iniciás en cero e incrementás en 1 cada vez que se llame al método. Con eso irás iterando sobre los registros de la base, sin obtener todos a la vez.

También deberías pensar en no abrir la base cada vez, a menos que la cierres tan pronto como dejes de usarla. Abrir y cerrar la base en cada llamada a la función puede ser detrimental para el rendimiento, quizás sea mejor que conserves un objeto connection y lo reuses.


Saludos.