comprar dos tablas..
Ariel Nardelli
pan_python en yahoo.com.ar
Mie Sep 14 21:17:05 CEST 2005
Hola Facu...
Bueno, empiezo a pasar, antes que nada, yo hago asi para procesar las
cosas (logicamente)...
Leo el cliente, si existe hago 2 copias del registro en tablas de
memoria, una (t_tra) es la que uso para modificar, mostrar y todo lo
demas y la otra (t_ori) queda con el registro original tal cual fue
leido, la idea de esta ultima tabla es antes de grabar volver a leer el
cliente y compararla contra mi original para verificar que mientras yo
estaba modificando alguien en otra terminal ya no lo halla modificado,
si lo modificaron de otro lado avisar y volver a mostrar los datos, esa
es basicamente mi logica...
Ok asi declaro las tablas...
self.t_tra = [0, '', '', 0, '', '', '', '', 0, '', 0, '', '',
'', 0, 0, 0, '']
self.t_ori = self.t_tra
la de trabajo y hago una copia (vacia) en ori...
Asi leo y cargo las tablas...
reg = sql03(self.db,'select * from clientes where cli_nuro =
%s',[nume])
if reg <> None:
self.inivar()
for k in range(0,18):
self.t_tra[k] = reg[k]
self.t_ori[k] = reg[k]
donde inivar tiene lo que te puse arriba la declaracion de las tablas :)
y ahi paso los datos dentro del for, tenia todo en una sola linea pero
lo separe en 2 justamente para buscar el error...
un dato importante, si yo hago esto para pasar las tablas (asi)
self.t_tra = self.t_ori = reg
se pasan los datos bien pero cuando quiero modificar el t_tra en
cualquier lugar me sale este cartel...
Traceback (most recent call last):
File "clientes/f40100000.py", line 151, in <lambda>
EVT_TEXT_ENTER(self, 3, lambda event: self.evt_enter_text01(event,1,2))
File "clientes/f40100000.py", line 741, in evt_enter_text01
self.t_tra[i] = key
TypeError: object doesn't support item assignment
o sea no me deja modificar el valor de t_tra, por eso lo tengo que pasar
a los datos por for uno por uno, haa el reg viene de una rutina de
lectura de sql, esa rutina es sencilla tiene esto...
def sql03(db,sql,k):
""" Leen en mysql y devuelve un registro """
try:
if k == 'NULL': # Es cuando no viene los datos del sql aparte.
db.execute(sql)
else:
db.execute(sql,k)
resultado = db.fetchone()
return resultado
except db.MySQLError, e:
[bla bla bla[]
Hasta aca como lo asigno, ahora bien, cuando quiero hacer el proceso de
grabacion antes leo de nuevo el registro para compararlo contra el
registro ori (el que tenia los datos originales) para detectar que
alguien no halla modificado esos datos, si son iguales es porque nadie
en otra terminal lo modifico y procedo a grabar las modificaciones.
Esto lo hago asi...
# Primero leemos el registro actual y comparamos para saber
si alguien lo modifico.
reg = sql03(self.db,'select * from clientes where cli_nuro =
%s',[self.t_tra[0]])
if reg == None:
self.cartelitos('No encuentro',"Sucedio algo Raro, no
puedo encontrar el registro original, alguien lo habra borrado?.\n
Registro no procesado.")
self.fin_graba()
return
# Veo si alguien modifico el registro...
ok = 0
for k in range(0,18):
if reg[k] <> self.t_ori[k]:
print self.tb_nom[k],'*',reg[k],'*',self.t_ori[k],'*'
ok = 1
if ok == 1:
self.cartelitos('Registro ya modificado',"Alguien ya ha
modificado este cliente por eso no puedo modificarlo. Intente
nuevamente.\n Registro no procesado.")
self.fin_graba()
return
ahora lo puse con un for a la comparacion y funciona o sea si desde otra
terminal modifico aca me larga la modificacion, pero si comparo
directamente las tablas reg <> self.t_ori siempre me dan distinto,
siempre, mientras que asi no, si modifico algo me da distinto sino no....
Bue, alguna idea facu?
Batista, Facundo wrote:
>#- A simple vista no encuentro diferencias, este es un ejemplo...
>#- (7777L, 'Ariel Nardelli', 'Amenabar 691', 3560L, '03482-428825',
>#- '15-630260', '', 'Nada que ver!!!!', 99L, '17684987', 1L, None, 'N',
>#- 'N', 999L, 9999L, 0L, 'S')
>#- [7777L, 'Ariel Nardelli', 'Amenabar 691', 3560L, '03482-428825',
>#- '15-630260', '', 'Nada que ver!!!!', 99L, '17684987', 1L, None, 'N',
>#- 'N', 999L, 9999L, 0L, 'S']
>
>Ariel, pasá un ejemplo que podamos simular. Sino no podemos probar.
>
>Pero fijate que el problema no sea que no estás haciendo una copia de la
>lista...
>
>Slds.
>
>Facundo Batista
>Desarrollo de Servicios
>Movistar
>(54 11) 5130-4643
>Cel: 15 5161 0678
>
>
> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
>. . . . . . . . . . . . . . . .
>ADVERTENCIA.
>
>La información contenida en este mensaje y cualquier archivo anexo al mismo,
>son para uso exclusivo del destinatario y pueden contener información
>confidencial o propietaria, cuya divulgación es sancionada por la ley.
>Si Ud. No es uno de los destinatarios consignados o la persona responsable
>de hacer llegar este mensaje a los destinatarios consignados, no está
>autorizado a divulgar, copiar, distribuir o retener información (o parte de
>ella) contenida en este mensaje. Por favor notifíquenos respondiendo al
>remitente, borre el mensaje original y borre las copias (impresas o grabadas
>en cualquier medio magnético) que pueda haber realizado del mismo.
>Todas las opiniones contenidas en este mail son propias del autor del
>mensaje y no necesariamente coinciden con las de Telefónica Comunicaciones
>Personales S.A. o alguna empresa asociada.
>Los mensajes electrónicos pueden ser alterados, motivo por el cual
>Telefónica Comunicaciones Personales S.A. no aceptará ninguna obligación
>cualquiera sea el resultante de este mensaje.
>Muchas Gracias.
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>
>
--
Saludos
Panflin
www.reconquista.com.ar
Más información sobre la lista de distribución Python-es