4 campo de un txt a una tabla dbf con 7 campos

Tengo un archivo txt con los campos nombre, dirección, tel, cp, y tengo que insertarlos en una tabla dbf que tiene los campos id, nombre, dirección, tel, cp, status, donde tengo que poner el id consecutivo porque no se puede repetir y la tabla ya tiene información y el status es fijo siempre como activo, pero no tengo idea de como hacerlo, espero que tengas un ejemplo de como hacerlo
Gracias de antemano.

1 respuesta

Respuesta
1
Me imagino que tu txt es un archivo csv, ya que mencionas que tiene nombres de campos específicos. Siendo así, se me ocurre que puedes utilizar un comando para agregar los registros directamente del archivo a la tabla, después correr un proceso para asignar los Ids y el Estatus.
Ejemplo:
cArchivo = "C:\Ruta\Archivos\TuArchivo.txt"
cEstatus = "Activo"
SELECT TuTabla
nUltReg = RECCOUNT()  && Último registro de la tabla antes de hacer la inserción
CALCULATE MAX(Id) TO nUltId  && Se obtiene el último Id de la tabla
nUltReg = nUltReg + 1  && Número del primer registro que se va a agregar
nUltId = nUltId + 1  && Nuevo Id para asignar
APPEND FROM (cArchivo) TYPE CSV  && Se agregan los registros del txt a la tabla
GO nUltReg IN TuTabla  && Se posiciona en el primer registro agregado
** Proceso para asignar los Ids
SCAN REST FOR ISBLANK(Id)  && Se pasa por los registros que no tengan Id
    REPLACE Id WITH nUltId, Estatus WITH cEstatus
    nUltId = nUltId + 1
ENDSCAN
Para que el proceso de agregar Ids funcione correctamente, la tabla no debe estar ordernada por ningún índice.
Pues creo que algo así sería.
Muchas gracias por tu tiempo, pues de hecho si tiene un índice principal que es el id, precisamente, ¿esto en que me cambia el proceso? ¿Me puedes orientar?
Gracias nuevamente
En nada, simplemente es recomendable que cuando hagas este proceso verifiques que tu tabla no este ordenada. El hecho de que una tabla tenga índices es independiente de si los está utilizando o no. Por ejemplo, cuando se abre una tabla con la instrucción "USE Tabla", la tabla no está ordenada, aun cuando ésta puede tener varios índices definidos.
Podrías agregar una línea de código para quitar cualquier orden que tenga tu tabla.
Ejemplo:
...
SELECT TuTabla
SET ORDER TO  && Con esto se quita cualquier orden que pudiera tener la tabla
nUltReg = RECCOUNT()  && Último registro de la tabla antes de hacer la inserción
...
Si para ti es importante tener esa tabla ordenada por Id, puedes agregar otra instrucción al final del proceso para regresarle ese orden. Por ejemplo:
SET ORDER TO Id
Gracias nuevamente, ahora tengo un nuevo problema, el campo id está marcado como no nulo, por lo que me marca un error en el append, ¿alguna idea de como solucionar esto?
Saludos
Perdón, ¿el error es otro dice textual "se infringe la unicidad del indice id" esto como lo puedo solucionar?
Perdón por tantas preguntas, pero como te darás cuenta no soy un experto en fox, sino que estoy haciendo mis primeros pasos por obligación, necesito hacer una aplicación para la empresa para la cual trabajo.
¿Específicamente en que momento aparece ese error?
Manda información respecto a la estructura de la tabla, incluyendo información de los índices que tiene.
Ejemplo:
Campo    Tipo                Long.    Null
----------------------------------------------
Id Numeric (Autoinc) 4 No
Campo1 Character 20 Sí
...
Gracias por tu ayuda, ya corregí el problema creando un cursor y metiendo ahí la info del txt y luego, con la info del ultimo registro de la tabla pongo en el cursor el id y posteriormente vacío la info del cursor a la tabla y con eso se corrige el error. Agradezco nuevamente tu ayuda fue muy valiosa la información que me proporcionaste.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas