Clarion - Ayuda importar desde excel

 
Vista:

Ayuda importar desde excel

Publicado por Francisco Mellado (5 intervenciones) el 28/12/2010 18:17:12
Estimados, estoy iniciandome en clarion y se me presento el siguiente problema.
Hice un importador de datos que me lee un archivo csv y lo importa a la base tps, hasta alli no hay problema y funciona muy bien, ahora lo que necesito es que me valide que el registro que estoy importando no exista y si existe no lo agregue, hasta ahora no he podido hacerlo. Quiero que me valide el campo UsuarioNT, si ya existe que no lo agregue y si no existe que lo agregue. Por alli me dijeron que con un GET podria, pero no lo he logrado, les copio el codigo que tengo.
Saludos y muchas gracias.

SET(ImportaUsuarios)
Access:ImportaUsuarios.NEXT() !!! ESTA LECTURA HACE QUE NO TOME EL PRIMER REGISTRO CON LA CABECERA
LOOP
IF Access:ImportaUsuarios.NEXT()
BREAK
END !IF

Dia_Ingreso = IMP4:LABEL13
Mes_Ingreso = IMP4:LABEL14
Ano_Ingreso = IMP4:LABEL15

Dia_Expiracion = IMP4:LABEL17
Mes_Expiracion = IMP4:LABEL18
Ano_Expiracion = IMP4:LABEL19

USU:CodigoUsuario = IMP4:LABEL1
USU:TipoDeUsuario = IMP4:LABEL2
USU:UsuarioNT = IMP4:LABEL3
USU:Nombre = IMP4:LABEL4
USU:Rut = IMP4:LABEL5
USU:CodigoEmpresa = IMP4:LABEL6
USU:CodigoSucursal = IMP4:LABEL7
USU:Departamento = IMP4:LABEL8
USU:Descripcion = IMP4:LABEL9
USU:Observaciones = IMP4:LABEL10
USU:Creacion = IMP4:LABEL11
USU:SolicitadoPor = IMP4:Label20
USU:FechaCreacion = DATE(Mes_Ingreso,Dia_Ingreso,Ano_Ingreso)
USU:FechaExpiracion = DATE(Mes_Expiracion,Dia_Expiracion,Ano_Expiracion)

ADD(Usuarios)
IF ERRORCODE() THEN MESSAGE(ERROR()).

END !LOOP
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Ayuda importar desde excel

Publicado por Marcelo Madelon (572 intervenciones) el 29/12/2010 11:37:21
Suponiendo que USU:UsuarioNT sea Clave (USU:KeyUsuarioNT)

Yo haria:



I# = 0
Clear(IMP4:Record)
SET(ImportaUsuarios)
Access:ImportaUsuarios.NEXT() ! Lee secuencialmente hasta el final
I# += 1 ! Sumo uno
IF I# = 1 ! el primer registro corresponde a la cabecera
Cycle ! Regresa a leer
END

Dia_Ingreso = IMP4:LABEL13
Mes_Ingreso = IMP4:LABEL14
Ano_Ingreso = IMP4:LABEL15

Dia_Expiracion = IMP4:LABEL17
Mes_Expiracion = IMP4:LABEL18
Ano_Expiracion = IMP4:LABEL19

USU:CodigoUsuario = IMP4:LABEL1
USU:TipoDeUsuario = IMP4:LABEL2
USU:UsuarioNT = IMP4:LABEL3

! Si UsarioNT es clave, entonces leo para saber si existe
E# = 1
IF Access:Usuarios.Fetch(USU:KeyUsuarioNT) !Lee
E# = 0 ! No existe
END

USU:Nombre = IMP4:LABEL4
USU:Rut = IMP4:LABEL5
USU:CodigoEmpresa = IMP4:LABEL6
USU:CodigoSucursal = IMP4:LABEL7
USU:Departamento = IMP4:LABEL8
USU:Descripcion = IMP4:LABEL9
USU:Observaciones = IMP4:LABEL10
USU:Creacion = IMP4:LABEL11
USU:SolicitadoPor = IMP4:Label20
USU:FechaCreacion = DATE(Mes_Ingreso,Dia_Ingreso,Ano_Ingreso)
USU:FechaExpiracion = DATE(Mes_Expiracion,Dia_Expiracion,Ano_Expiracion)

IF E# = 0 ! No existe entonces corresponde Insert
IF ACCESS:Usuarios.INSERT()
MESSAGE('NO GRABA Usuarios','Mensaje del Sistema',ICON:Exclamation)
RETURN Level:Fatal ! Salir del programa
END
ELSE ! De lo contrario corresponde un Update
IF Access:Usuarios.Update()
MESSAGE('NO REGRABA o Actualiza Usuarios','Mensaje del Sistema',ICON:Exclamation)
RETURN Level:Fatal ! Salir del programa
END
END
END !LOOP

Espero te sirva

Feliz Año Nuevo y que nos vaya bien a todos......
Marcelo Madelon
Venado Tuerto - Argentina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda importar desde excel

Publicado por Francisco Mellado (5 intervenciones) el 29/12/2010 14:41:03
Estimado, no me funciona, se me queda pegado el equipo y la cpu se va a full.
Le falto agregar el loop (habia un cycle) se lo agregue, puede que este mal. La key de usuario se la modifique. Muchas gracias por todo y felices fiestas.

I# = 0
Clear(IMP4:Record)
SET(ImportaUsuarios)
Loop
Access:ImportaUsuarios.NEXT() ! Lee secuencialmente hasta el final
I# += 1 ! Sumo uno
IF I# = 1 ! el primer registro corresponde a la cabecera
Cycle ! Regresa a leer
END

Dia_Ingreso = IMP4:LABEL13
Mes_Ingreso = IMP4:LABEL14
Ano_Ingreso = IMP4:LABEL15

Dia_Expiracion = IMP4:LABEL17
Mes_Expiracion = IMP4:LABEL18
Ano_Expiracion = IMP4:LABEL19

USU:CodigoUsuario = IMP4:LABEL1
USU:TipoDeUsuario = IMP4:LABEL2
USU:UsuarioNT = IMP4:LABEL3

! Si UsuarioNT es clave, entonces leo para saber si existe
E# = 1
IF Access:Usuarios.Fetch(USU:PorUsuarioNT) !Lee
E# = 0 ! No existe
END

USU:Nombre = IMP4:LABEL4
USU:Rut = IMP4:LABEL5
USU:CodigoEmpresa = IMP4:LABEL6
USU:CodigoSucursal = IMP4:LABEL7
USU:Departamento = IMP4:LABEL8
USU:Descripcion = IMP4:LABEL9
USU:Observaciones = IMP4:LABEL10
USU:Creacion = IMP4:LABEL11
USU:SolicitadoPor = IMP4:Label20
USU:FechaCreacion = DATE(Mes_Ingreso,Dia_Ingreso,Ano_Ingreso)
USU:FechaExpiracion = DATE(Mes_Expiracion,Dia_Expiracion,Ano_Expiracion)

IF E# = 0 ! No existe entonces corresponde Insert
IF ACCESS:Usuarios.INSERT()
MESSAGE('NO GRABA Usuarios','Mensaje del Sistema',ICON:Exclamation)
RETURN Level:Fatal ! Salir del programa
END
ELSE ! De lo contrario corresponde un Update
IF Access:Usuarios.Update()
MESSAGE('NO REGRABA o Actualiza Usuarios','Mensaje del Sistema',ICON:Exclamation)
RETURN Level:Fatal ! Salir del programa
END
END
END !LOOP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ayuda importar desde excel

Publicado por Marcelo Madelon (572 intervenciones) el 29/12/2010 15:04:51
Si el loop esta faltando
Reemplaza:

Loop
Access:ImportaUsuarios.NEXT() ! Lee secuencialmente hasta el final

por:

LOOP UNTIL Access:ImportaUsuarios.Next() ! Lee secuencialmente hasta el final

Saludos y Feliz Año Nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda importar desde excel

Publicado por Francisco Mellado (5 intervenciones) el 30/12/2010 18:26:05
No me funciono, pero ahora lo deje asi y si funciona...
Le puse varios Message, para ver donde estaba y si estaba ejecutando lo que le pedia
Gracias por todo y felices fiestas
Luego me puedes ayudar con otra cosa...

SET(ImportaUsuarios) !Abre y posiciona en primer registro el archivo csv
Access:ImportaUsuarios.NEXT() !Se salta el primer registro para que no registre la cabecera
LOOP UNTIL Access:ImportaUsuarios.NEXT() !Ejecuta hasta que llegue al final del archivo csv

SET(Usuarios)
LOOP UNTIL Access:Usuarios.NEXT() !Lee !Abre y posiciona en primer registro el archivo usuarios.tps

MESSAGE('Leyendo de csv',,ICON:asterisk) !lee del csv
MESSAGE(IMP4:Label3,'De CSV',ICON:Exclamation)
MESSAGE('Leyendo de Usuarios',,ICON:asterisk) !lee del usuarios
MESSAGE(USU:UsuarioNT,'De usuario',ICON:Exclamation)
MESSAGE('Revisando si es igual',,ICON:asterisk)

IF IMP4:Label3 = USU:UsuarioNT !compara si es igual
MESSAGE('Existe, me salgo al siguiente registro',,ICON:asterisk)
NEXT(Usuarios)
E# = 1
BREAK !no existe
ELSE
MESSAGE('No es igual',,ICON:Exclamation)
CYCLE
E# = 0 !si existe
END !If

MESSAGE('Vuelvo a revisar en usuario',,ICON:asterisk)
END !loop !vuelve al registro siguiente

!IF E# = 1 ! Existe entonces corresponde salir
! MESSAGE('Existe, me salgo al siguiente registro',,ICON:asterisk)
! Break
!End ! De lo contrario corresponde un Update

IF E# = 0
MESSAGE('Ahora estoy en agregar',,ICON:Exclamation)
Dia_Ingreso = IMP4:LABEL13
Mes_Ingreso = IMP4:LABEL14
Ano_Ingreso = IMP4:LABEL15

Dia_Expiracion = IMP4:LABEL17
Mes_Expiracion = IMP4:LABEL18
Ano_Expiracion = IMP4:LABEL19

USU:CodigoUsuario = IMP4:LABEL1
USU:TipoDeUsuario = IMP4:LABEL2
USU:UsuarioNT = IMP4:LABEL3
USU:Nombre = IMP4:LABEL4
USU:Rut = IMP4:LABEL5
USU:CodigoEmpresa = IMP4:LABEL6
USU:CodigoSucursal = IMP4:LABEL7
USU:Departamento = IMP4:LABEL8
USU:Descripcion = IMP4:LABEL9
USU:Observaciones = IMP4:LABEL10
USU:Creacion = IMP4:LABEL11
USU:SolicitadoPor = IMP4:Label20
USU:FechaCreacion = DATE(Mes_Ingreso,Dia_Ingreso,Ano_Ingreso)
USU:FechaExpiracion = DATE(Mes_Expiracion,Dia_Expiracion,Ano_Expiracion)

ADD(Usuarios)
MESSAGE('GRABA Usuarios','Mensaje del Sistema',ICON:Exclamation)
MESSAGE(IMP4:Label3,'Debe grabar ese valor',ICON:Exclamation)
END
END !LOOP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar