Guardar nombre de tabla en una variable

Lo que quiero hacer es guardar el nombre de una tabla en la variable 'tablarota', este código lo que hace es reparar una tabla dañada.
Entonces dependiendo de la tabla dañada será el contenido de la variable tablarota, lo hice de esta forma, digitando el nombre de la tabla en un textbox pero no me funciona.

tablarota = ALLTRIM(thisform.txttabla.value)+".dbf"
set tablevalidate to 0 &&remueve la verificacion de la cabecera
use tablarota EXCLUSIVE
copy to nuevatabla
select tablarota
zap
set tablevalidate to 1 && verifica la cabecera
use tablarota exclusive
append from nuevatabla
¿Será posible hacer lo que estoy necesitando?

Respuesta
2

tablarota = ALLTRIM(thisform.txttabla.value)+".dbf"
set tablevalidate to 0 
use &tablarota EXCLUSIVE
copy to nuevatabla
select (tablarota)
zap
append from nuevatabla
set tablevalidate to 1 
erase nuevatabla.*

¡Gracias! Me sirvió perfectamente.

Ahora de forma a mejorar un poco, de la manera anterior, se debe digitar el nombre de la tabla en el textbox. Habría alguna de forma de que en un combobox, se carguen todas las tablas del proyecto y de allí seleccionar la tabla a reparar?

Saludos

Claro que si; solo un comentario al margen; siempre que cambia el rumbo de tu consulta, hazla en otro hilo, de ese modo, alguien que busque respuestas la encuentre fácilmente.

Copias los archivos dentro de un array, así:

ADIR(aTablas,cRuta+'*.dbf') &&cRuta es la variable conteniendo la ruta de los DBFs.

Luego, el combo box debe tener los sig. ajustes:

RowSource = 'aTablas'

RowSourceType = 5

Muchas gracias por la respuesta

Estuve probando pero me sale el mensaje "aTablas no es una matriz", no se que habré hecho mal.

Tal vez no haya creado el array, fíjate si indicaste bien la ruta de las tablas.

En la primera ejecución después de generar el exe, funciona correctamente, cargando los nombres de las tablas en el combobox. Luego al salir del programa y volver a ingresar sale el mensaje "aTablas no es una matriz". 

En el Init del combobox escribí lo siguiente:

cRuta = "C:\negoc\tablas\" 

DIMENSION aTablas(1)

ADIR(aTablas,cRuta+'*.dbf')

Si no escribo "DIMENSION aTablas(1)", sale el mensaje "aTablas no es una matriz", todo el tiempo.

Prueba lo siguiente:

Deja el combo ajustado de éste modo:

RowSource = "" , Es decir vacío.

RowSourceType = 1

Luego en el INIT del combo:

Dimension aTablas(1)

if Adir(aTablas,"C:\negoc\tablas\*.dbf")>0

     RowSource = 'aTablas'

     RowSourceType = 5

Endif

Una vez más gracias por la respuesta, hice lo que me dijiste, ya no sale el mensaje "aTablas no es una matriz", pero no carga los datos en el combo. O sea abre el combo como si estuvieran los datos pero están en blanco.

Es que la última parte no era literal; pensé que te darías cuenta... no conozco el nombre de tu combobox así que le llamaré combobox1

Quedaría así:

if Adir(aTablas,"C:\negoc\tablas\*.dbf")>0

     thisform.combobox1.RowSource = 'aTablas'

     thisform.combobox1.RowSourceType = 5

Endif

Si, me di cuenta, lo hice de esa misma manera, pero no me funcionó

Resolví el problema por otro camino, muchas gracias por tu ayuda SysGen Argentina

LOCAL i,cRuta
LOCAL ARRAY lafiles(1)
cRuta = "C:\negoc\tablas"
ADIR(lafiles, ADDBS(m.cRuta)+"*.dbf")
ADDPROPERTY(thisform,"cs_combo",laFiles[1,1])
WITH this
.ControlSource = "Thisform.cs_combo"
.BoundColumn = 2
.RowSourceType = 0
FOR i = 1 TO ALEN(laFiles,1)
.AddListItem(PROPER(laFiles[i,1]),i,1)
.AddListItem(laFiles[i,1],i,2)
NEXT
.Requery
.Refresh
ENDWITH

Excelente Cristihan, me alegro haber sido de utilidad.

1 respuesta más de otro experto

Respuesta
1

Ya probaste utilizar &?

use &tablarota EXCLUSIVE

Prueba de esa manera.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas