FoxPro/Visual FoxPro - AGREGAR TABLA A ENTORNO DE DATOS EN TIEMPO DE EJECUCION

   
Vista:
Imágen de perfil de Heriberto

AGREGAR TABLA A ENTORNO DE DATOS EN TIEMPO DE EJECUCION

Publicado por Heriberto (9 intervenciones) el 23/03/2016 04:08:50
Saludos amigos programadores.

Tengo un form para controlar compras. Al momento de grabar la compra llamo a una funcion que toma la informacion de un cursor y la actualiza a una tabla que no puedo agregar en tiempo de programacion al entorno de datos. Cómo seria el codigo para que en tiempo de ejecucion me agregue la tabla al entorno de datos y pueda usar la sentencia SELECT normalmente como lo hago con las demas tablas que si estan en el entorno de datos.
Con el codigo que tengo actualmente me esta generando error de apertura de las tablas:

FUNCTION ActualMovContable(FechaActualizar, tabla_mvto, tabla_saldo)


mes = MONTH(FechaActualizar) &&Asigno a la variable el valor del mes a afectar

SELECT Mvto_Auxiliar && Selecciono Cursor
GO TOP

DO WHILE NOT EOF() && Empiezo bucle para leer los datos del cursor
nRegCursor = RECNO()

SELECT (tabla_mvto)
GO BOTTOM && Descargo la informacion del cursor MvtoAuxiliar a la tabla correspondiente dada en la variable Tabla_Mvto
INSERT INTO (tabla_mvto) (cuenta, tipodocumento, documento, fechadocumento, detalle, nitmvto, divnitmvto, tiponitmvto, centrocostos,;
referenciamvto, debitomvto, creditomvto) VALUES (mvto_auxiliar.cuenta, mvto_auxiliar.tipodocumento, mvto_auxiliar.documento,;
mvto_auxiliar.fechadocumento, mvto_auxiliar.detallemvto, mvto_auxiliar.nitmvto, mvto_auxiliar.divnitmvto, mvto_auxiliar.tiponitmvto,;
mvto_auxiliar.centrocostos, mvto_auxiliar.referenciamvto, mvto_auxiliar.debitomvto, mvto_auxiliar.creditomvto)

SELECT Mvto_Auxiliar
GO nRegCursor
SKIP
ENDDO

ENDFUNC

El error que me genera lo adjunto en la imagen

Gracias por su ayuda
error
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

AGREGAR TABLA A ENTORNO DE DATOS EN TIEMPO DE EJECUCION

Publicado por Luiz Alexandre (58 intervenciones) el 23/03/2016 04:35:13
Se for uma tabela DBF

USE E:\MeuPrograma\Mvto_Auxiliar
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
Imágen de perfil de Heriberto

AGREGAR TABLA A ENTORNO DE DATOS EN TIEMPO DE EJECUCION

Publicado por Heriberto (9 intervenciones) el 23/03/2016 17:17:16
Gracias Luis, tal vez no me explique bien.
El objeto Mvto_Auxiliar es un cursor que se llena con informacion contable al momento de guardar una compra. Lo que hago con este cursor es tomarlo desde la funcion ActualMvtoContable() a la cual le paso como parametros las variables Tabla_Mvto, Tabla_Saldo y FechaActualizar, en la primera variable esta contenida la ruta y el nombre de una base de datos que es determinada por la fecha de la compra para abrir la tabla correspondiente a ese año de la compra, igual susece con la segunda variable que contiene los saldos de las cuentas contables correspondientes al año de la compra.

Es por esto que no puedo en tiempo de programacion asignar al entorno de datos la tabla que necesito ya que esta varia dependiendo del año de la compra, es mas, el mismo programa crea la tabla si esta no existe para el año en cuestion.

Entonces lo que necesito es lo siguiente:

1. Hallar la formas de acceder a la tabla sin necesidad de que esta este en el entorno de datos del form y pueda hacer altas en el bucle definido en mi funcion sin que halla conflicto de que no encuentre la tabla o alas, etc., o

2. Hallar la forma de asignarla en tiempo de ejecucion al entorno de datos del form para trabajarla como hago con las demas, con SELECT MiTabla.

Gracias.

Heriberto Martinez
Bogota - Colombia
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

AGREGAR TABLA A ENTORNO DE DATOS EN TIEMPO DE EJECUCION

Publicado por Fidel José (321 intervenciones) el 23/03/2016 22:07:14
Y qué significa este "BASE DE DATOS\mvtocontableXXXX"
Es un path? Si ese es el nombre de una carpeta lo mejor sería cambiarlo, por ejemplo por "BASE_DE_DATOS", de lo contrario tendrás que encomillar.

Ejemplo
1
2
3
4
5
6
7
8
9
10
11
12
lnYear = 2016
lcFolder = "C:\SISTEMA\ANUALES"
lcNameTable = "mvtocontable"+TRANSFORM(lnYear)
 
IF !FILE(FORCEEXT(ADDBS(lcFolder)+lcNametable,"dbf"))
	MESSAGEBOX(lcNameTable + " no se encuentra en "+lcFolder)
	RETURN
ENDIF
USE (ADDBS(lcFolder)+lcNameTable) IN 0 SHARED
SELECT (lcNameTable)
* proceso
USE IN SELECT(lcNameTable)
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

AGREGAR TABLA A ENTORNO DE DATOS EN TIEMPO DE EJECUCION

Publicado por Luiz Alexandre (58 intervenciones) el 23/03/2016 23:40:57
Vou novamente dizer a mesma coisa Heriberto, porque é preciso abrir primeiro a tabela para depois fazer o SELECT e o comando para abrir um tabela DBF é o USE.

Quando você coloca a tabela direto no form em "tempo de desenho", o sistema faz isso de forma oculta, ou seja, ele faz o USE C:\MeuPrograma\Mvto_Auxiliar.

Veja o exemplo do Fidel José.
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
Imágen de perfil de José Luis

AGREGAR TABLA A ENTORNO DE DATOS EN TIEMPO DE EJECUCION

Publicado por José Luis (16 intervenciones) el 25/03/2016 01:21:51
Heriberto, lo que quieres implementar lo hago con frecuencia, teniendo tablas de movimientos contables en diferentes carpetas, para lo cual tengo una carpeta con la denominación del año y en subcarpetas los meses del año, una carpeta por mes.

El problema se presenta con el alias de la tabla, para resolver la situación que planteas te sugiero lo siguiente:

En el método Click Event del CommandBottom que utilizas para actualizar la información escribe el siguiente procedimiento:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
MvtoContable = "Base de Datos\MvtoContable"+la variable que contiene el año
If Used("MvtoContable")
   Sele MvtoContable
Else
   Sele 0
EndIf
Use "&MvtoContable" alias MvtoContable Shared && Apertura de la tabla que se va a actualizar.
Sele MvtoAuxiliar
Go top
Do While not Eof()
   Scatter to Movimientos && Si la estructura de MvtoAuxiliar es igual a la de MvtoContable, es recomendable utilizar un arreglo.
   Sele MvtoContable
   CapM = .F. && Se utiliza esta variable para entorno de Red
   Do While CapM = .F.
      If Flock()
         CapM = .T.
         Append Blank
         Gather from Movimientos
      EndIf
   EndDo
   UnLock
   Sele MvtoAuxiliar
   Skip
EndDo

Espero te sea de utilidad, saludos.
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