Hola Nando,

Segun veo el codigo el APPEND FROM se hace siempre, se haya hecho el PACK de la tabla o no, se haya abierto la tabla en forma exclusiva o compartida. De lo cual deduzco que son cosas independientes una de la otra, entonces lo que haria es una funcion o metodo que se encargue del pack y despues el append from debajo.  Algo asi:

= PackeaLaTabla("Tabla_Destino")

SELECT Tabla_destino
APPEND FROM DBF("Cursor_Origen)

USE IN Tabla_Destino


De hecho PackeaLaTabla() podria tirar una excepcion, que en el codigo que presente no es atrapada y tenes la posiblidad de hacer algo.

Perdon, pero esto no tiene nada que ver con el Try-Catch, es solo ordenar un cacho el codigo.

Un Gufazo para todos,
Davo.




On 10/18/06, Pata del Santo <[EMAIL PROTECTED]> wrote:
Yo lo haría más breve:
 
*nos aseguramos de cerrar la tabla si este usuario la tuviera abierta
IF USED("Tabla_destino")
  USE IN Tabla_destino
ENDIF
*buscamos una zona libre
SELECT 0
TRY
  *si nadie la tiene abierta, entonces la abro exclusiva para hacer un PACK
  USE Tabla_destino EXCLUSIVE
  PACK
CATCH
 *esto sucederá siempre que cualquier otro usuario tenga la tabla abierta (sea EXCLUSIVE o SHARED)
 *si da un error simplemente no hago nada (aunque no pude hacer el PACK)
ENDTRY
*ahora la vuelvo a abrir compartida, para que otros usuarios tengan acceso
USE Tabla_destino SHARED
*agrego los registros
APPEND FROM DBF("Cursor_Origen")
*cierro la tabla
USE
 
Pata.
 


De: [email protected] [mailto: [email protected]] En nombre de Hernando Ferreira
Enviado el: miércoles, 18 de octubre de 2006 15:15
Para: GUFA List Member
Asunto: [GUFA] Falla Append from en Multiusuario

 
Necesito anexar registros de un cursor, previo borrado de los ya existente en la tabla de destino por medio de una condicion, el tema es que funciona bien cuando nadie mas esta usando la tabla, pero en cuanto alguien tiene el uso de la tabla no agrega los registros, ni da error ni nada. De paso revean este trozo de codigo para sacarle un mejor fruto al try.. catch, que es la 1ra vez que lo uso...
 
SELECT Tabla_destino
DELETE FOR num < 0
TRY
 USE IN Tabla_destino
 SELECT 0
 USE Tabla_destino IN 0 EXCLUSIVE
CATCH 
 IF !USED("Tabla_destino")
      USE Tabla_destino IN 0 AGAIN
 ENDIF
ENDTRY
 
IF ISEXCLUSIVE("Tabla_destino")
     SELECT Tabla_destino
     PACK
ENDIF
 
SELECT Tabla_destino
APPEND FROM DBF("Cursor_Origen")

USE IN Tabla_destino


Saludos
Nando


Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
Probalo ya!



--
=======================
David Brunstein

Java/PB/VFP Developer
Winnipeg, MB
Canada

Before I speak, I have something important to say.
Antes de dar mi discurso, tengo algo importante que decir.
Antes de dar meu discurso, tenho algo importante para dizer.
G.M.

Responder a