Hola a todos,
Estoy haciendo un pequeño de prueba y cuando intento copiar
un registro completo de la base de datos en otro nuevo,
lo único que consigo es un error de Xailer.
Quiero copiar todos los campos de un registro de un fichero dbf (abierto con TDbfDataSet)
y hacerlo usando los nombres del TDataSet:aFields[]:cName, para que
así siga funcionando aunque se modifique la estructura del fichero.
El trozo de código que realiza la copia es éste:
// coger todos los campos del registro actual
oExStrFILA := ::oDbfDataSet1:GetRecord()
// Añadir un nuevo registro
::oDbfDataSet1:AddNew()
// recorrer todos los campos de la BBDD y copiarlos en el nuevo registro
FOR nInd := 1 TO len(::oDbfDataSet1:aFields)
cNombreCampo := ::oDbfDataSet1:aFields[nInd]:cName
::oDbfDataSet1:&cNombreCampo := oExStrFILA:&cNombreCampo
NEXT
He usado varios LogDebug para probar y la estructura oExStrFILA (de tipo TExStruct)
recoge los datos correctamente. La verdad, no tengo ni idea de por qué falla. Seguramente
hay alguna manera más sencilla de hacer esto, pero no se me ocurre. A ver si alguien puede ayudarme.
Falla en el primer campo que es USUARIO y el valor es "Antonio" (por eso aparece en el error)...
El fallo que me da Xailer es el siguiente: (la línea 910 de código es la de la
asignación ::oDbfDataSet1:&cNombreCampo := oExStrFILA:&cNombreCampo )
----------------------- Información detallada del error -----------------------
Subsistema: BASE
Código de error: 1604
Estado: .F.
Descripción: Argument error
Operación: SWITCH
Argumentos: [ 1] = Tipo: C Valor: Antonio
Fichero:
Código error SO: 0
Pila de llamadas:
TDBFDATASET:USUARIO (1383)
TFORM1:TOOLBARDUPLICAR (910)
TTOOLBUTTON:ONCLICK (0)
(b)XTOOLBUTTON:XTOOLBUTTON (41)
TTOOLBUTTON:CLICK (0)
TTOOLBAR:COMMAND (377)
TPANEL:WMCOMMAND (253)
RUNFORM (0)
TAPPLICATION:RUN (209)
MAIN (34)
------------------ Información detallada de áreas de trabajo ------------------
Area: 1
Alias: USUARIOS
Registro: 7
Filtro:
Relación:
Orden del índice: 1
Clave activa: 1
--
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Ayuda con Duplicado de registros
-
- Mensajes: 23
- Registrado: Jue Dic 27, 2007 10:26 am
-
- Mensajes: 558
- Registrado: Mar Feb 09, 2010 2:26 pm
Ayuda con Duplicado de registros
Saludos:
Pues ahora haz ::oDbfDataSet1:SaveFrom(oExStrFILA)
José Ramón Castro
Javier Jiménez escribió:
> Hola a todos,
> Estoy haciendo un pequeño de prueba y cuando intento copiar
> un registro completo de la base de datos en otro nuevo,
> lo único que consigo es un error de Xailer.
> Quiero copiar todos los campos de un registro de un fichero dbf
> (abierto con TDbfDataSet)
> y hacerlo usando los nombres del TDataSet:aFields[]:cName, para que
> así siga funcionando aunque se modifique la estructura del fichero.
> El trozo de código que realiza la copia es éste:
>
> /// coger todos los campos del registro actual/
> *oExStrFILA := ::oDbfDataSet1:GetRecord()*
> /// Añadir un nuevo registro/
> *::oDbfDataSet1:AddNew()*
> /// recorrer todos los campos de la BBDD y copiarlos en el nuevo registro
> /*FOR nInd := 1 TO len(::oDbfDataSet1:aFields)
> * *cNombreCampo := ::oDbfDataSet1:aFields[nInd]:cName
> * *::oDbfDataSet1:&cNombreCampo := oExStrFILA:&cNombreCampo
> **NEXT
> *
> He usado varios LogDebug para probar y la estructura oExStrFILA (de tipo
> TExStruct)
> recoge los datos correctamente. La verdad, no tengo ni idea de por qué
> falla. Seguramente
> hay alguna manera más sencilla de hacer esto, pero no se me ocurre. A
> ver si alguien puede ayudarme.
> Falla en el primer campo que es USUARIO y el valor es "Antonio" (por eso
> aparece en el error)...
>
> El fallo que me da Xailer es el siguiente: (la línea 910 de código es la
> de la
> asignación *::oDbfDataSet1:&cNombreCampo := oExStrFILA:&cNombreCampo* )
>
> ----------------------- Información detallada del error
> -----------------------
>
> Subsistema: BASE
> Código de error: 1604
> Estado: .F.
> Descripción: Argument error
> Operación: SWITCH
> Argumentos: [ 1] = Tipo: C Valor: Antonio
> Fichero:
> Código error SO: 0
>
> Pila de llamadas:
> TDBFDATASET:USUARIO (1383)
> TFORM1:TOOLBARDUPLICAR (910)
> TTOOLBUTTON:ONCLICK (0)
> (b)XTOOLBUTTON:XTOOLBUTTON (41)
> TTOOLBUTTON:CLICK (0)
> TTOOLBAR:COMMAND (377)
> TPANEL:WMCOMMAND (253)
> RUNFORM (0)
> TAPPLICATION:RUN (209)
> MAIN (34)
>
> ------------------ Información detallada de áreas de trabajo
> ------------------
>
> Area: 1
> Alias: USUARIOS
> Registro: 7
> Filtro:
> Relación:
> Orden del índice: 1
> Clave activa: 1
>
>
Pues ahora haz ::oDbfDataSet1:SaveFrom(oExStrFILA)
José Ramón Castro
Javier Jiménez escribió:
> Hola a todos,
> Estoy haciendo un pequeño de prueba y cuando intento copiar
> un registro completo de la base de datos en otro nuevo,
> lo único que consigo es un error de Xailer.
> Quiero copiar todos los campos de un registro de un fichero dbf
> (abierto con TDbfDataSet)
> y hacerlo usando los nombres del TDataSet:aFields[]:cName, para que
> así siga funcionando aunque se modifique la estructura del fichero.
> El trozo de código que realiza la copia es éste:
>
> /// coger todos los campos del registro actual/
> *oExStrFILA := ::oDbfDataSet1:GetRecord()*
> /// Añadir un nuevo registro/
> *::oDbfDataSet1:AddNew()*
> /// recorrer todos los campos de la BBDD y copiarlos en el nuevo registro
> /*FOR nInd := 1 TO len(::oDbfDataSet1:aFields)
> * *cNombreCampo := ::oDbfDataSet1:aFields[nInd]:cName
> * *::oDbfDataSet1:&cNombreCampo := oExStrFILA:&cNombreCampo
> **NEXT
> *
> He usado varios LogDebug para probar y la estructura oExStrFILA (de tipo
> TExStruct)
> recoge los datos correctamente. La verdad, no tengo ni idea de por qué
> falla. Seguramente
> hay alguna manera más sencilla de hacer esto, pero no se me ocurre. A
> ver si alguien puede ayudarme.
> Falla en el primer campo que es USUARIO y el valor es "Antonio" (por eso
> aparece en el error)...
>
> El fallo que me da Xailer es el siguiente: (la línea 910 de código es la
> de la
> asignación *::oDbfDataSet1:&cNombreCampo := oExStrFILA:&cNombreCampo* )
>
> ----------------------- Información detallada del error
> -----------------------
>
> Subsistema: BASE
> Código de error: 1604
> Estado: .F.
> Descripción: Argument error
> Operación: SWITCH
> Argumentos: [ 1] = Tipo: C Valor: Antonio
> Fichero:
> Código error SO: 0
>
> Pila de llamadas:
> TDBFDATASET:USUARIO (1383)
> TFORM1:TOOLBARDUPLICAR (910)
> TTOOLBUTTON:ONCLICK (0)
> (b)XTOOLBUTTON:XTOOLBUTTON (41)
> TTOOLBUTTON:CLICK (0)
> TTOOLBAR:COMMAND (377)
> TPANEL:WMCOMMAND (253)
> RUNFORM (0)
> TAPPLICATION:RUN (209)
> MAIN (34)
>
> ------------------ Información detallada de áreas de trabajo
> ------------------
>
> Area: 1
> Alias: USUARIOS
> Registro: 7
> Filtro:
> Relación:
> Orden del índice: 1
> Clave activa: 1
>
>