VFP + ACCESS, Error en insert into

516 views
Skip to first unread message

Oscar Martinez

unread,
Jan 22, 2012, 11:22:12 PM1/22/12
to publice...@googlegroups.com
Tengo una base de datos de Access a la cual quiero agregar 2000 registros aproximadamente, he credo la siguiente rutina y me da un error en la línea 5, cual es el error? Como prueba digité los valores y si estos se trasladaban sin ningun problema, entonces procedería a recorrer las tablas dbf para enviar los datos a Access.
 
lcArchivoMDB = "C:\Archivos de programa\DETsv\f987v2\f987v2.mdb"
lcConnStrin = "DSN=MS Access Database;Dbq=" + lcArchivoMDB + ";Uid=;Pwd=;"
lnHandle = SQLSTRINGCONNECT(lcConnStrin)
if lnHandle > 0
lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes, tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto, iva, corr) values ("06141401700010", "12011", "1", 1, 1, "1", "05222302731013", "ctod("02/01/2011"), "1", "01CCF02012011", 100, 13, 1)"
lcCursor = "cliente1"
SQLEXEC(lnHandle,lcSQL,lcCursor)
SQLDISCONNECT(lnHandle)
endif
RETU
 
El error dice que está aquí.
lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes, tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto, iva, corr) values ("06141401700010", "12011", "1", 1, 1, "1", "05222302731013", ctod("02/01/2011"), "1", "01CCF02012011", 100, 13, 1)"
Error en la línea 5: Error de sintaxis.
 
Lo único que veo es que en Access el campo fecha es datetime (02/01/2011 12:00 AM), tambien he cambiado la fecha y agregado la hora y siempre me da error.
 
Otra alternativa podría ser, si tengo los archivos en Excel, como envío los datos desde Excel hacía la misma base de datos?
 
En todo caso, si se puede enviar desde VFP o Excel, estaré muy agradecido con ustedes, ya que el propósito es tener la información en la BDD de Access, sea de una u otra forma.
 
Nuevamente les agradezco por la ayuda brindada.
 

Walter R. Ojeda Valiente

unread,
Jan 22, 2012, 11:26:25 PM1/22/12
to publice...@googlegroups.com
La función CTOD(02/01/2011) está mal, fíjate en las comillas.

Saludos.

Walter.




Date: Sun, 22 Jan 2012 22:22:12 -0600
Subject: [vfp] VFP + ACCESS, Error en insert into
From: golden...@gmail.com
To: publice...@googlegroups.com

Yvan GMail

unread,
Jan 22, 2012, 11:27:52 PM1/22/12
to publice...@googlegroups.com

Podrias enviar tu código como estas insertando los datos pero sin datos fijos?

 

 

 

 

Saludos.

Yvan Carranza

285-7627

Walter R. Ojeda Valiente

unread,
Jan 22, 2012, 11:32:04 PM1/22/12
to publice...@googlegroups.com
Además, fíjate que usas comillas dobles en todas partes, deberías usar comillas simples al inicio y al final de la asignación y comillas dobles en el interior.

Saludos.

Walter.




Date: Sun, 22 Jan 2012 22:22:12 -0600
Subject: [vfp] VFP + ACCESS, Error en insert into
From: golden...@gmail.com
To: publice...@googlegroups.com

Oscar Martinez

unread,
Jan 22, 2012, 11:39:40 PM1/22/12
to publice...@googlegroups.com
Muy cierto Walter, le he dejado las comillas y aun asi siempre da
error en la misma línea de lcSQL que es la linea 5.

El 22 de enero de 2012 22:26, Walter R. Ojeda Valiente
<wr...@hotmail.com> escribió:

Oscar Martinez

unread,
Jan 22, 2012, 11:42:49 PM1/22/12
to publice...@googlegroups.com
Yvan, por ahora solo hago las pruebas, en todo caso los mismos datos
fijos van en variables como xnit, xperiodo, etc.

Oscar Martinez

unread,
Jan 22, 2012, 11:45:45 PM1/22/12
to publice...@googlegroups.com
Walter, le he cambiado comilla simple al inicio y al final, pero
siempre me da error en la línea 5.


El día 22 de enero de 2012 22:32, Walter R. Ojeda Valiente
<wr...@hotmail.com> escribió:

Yvan GMail

unread,
Jan 22, 2012, 11:48:13 PM1/22/12
to publice...@googlegroups.com
Prueba asi.

CadSQL = "insert into cliente1(nit, periodo, secuencia, id, mes,


tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto,
iva, corr)
values ('06141401700010', '12011', '1', 1, 1, '1',

'05222302731013',{02/01/2011}, '1', '01CCF02012011', 100, 13, 1)"

Si no inserta.. captura el error con aerror() para recuperar el error del
Access..


Saludos.
Yvan Carranza
285-7627

-----Mensaje original-----


De: publice...@googlegroups.com
[mailto:publice...@googlegroups.com] En nombre de Oscar Martinez

Enviado el: domingo, 22 de enero de 2012 23:40
Para: publice...@googlegroups.com
Asunto: Re: [vfp] VFP + ACCESS, Error en insert into

Oscar Martinez

unread,
Jan 22, 2012, 11:49:44 PM1/22/12
to publice...@googlegroups.com
Si uso vfp60 me dice: "Error en la línea 5: El comando contiene una
frase o palabra clave no reconocida."
Si uso vfp9 me dice: "Error en la línea 5: Error de sintaxis."


El día 22 de enero de 2012 22:45, Oscar Martinez
<golden...@gmail.com> escribió:

Walter R. Ojeda Valiente

unread,
Jan 23, 2012, 12:00:07 AM1/23/12
to publice...@googlegroups.com
Fíjate también cual es la longitud de tu cadena: LEN(lcSQL), esa longitud no debe ser mayor que 255. Si lo es, utiliza TEXT ... ENDTEXT

Justamente para evitar esa limitación es que yo siempre uso TEXT ... ENDTEXT en las asignaciones a variables de tipo string que ocupan más de una línea.

Saludos.

Walter.



> Date: Sun, 22 Jan 2012 22:49:44 -0600
> Subject: Re: [vfp] VFP + ACCESS, Error en insert into

Oscar Martinez

unread,
Jan 23, 2012, 1:03:54 AM1/23/12
to publice...@googlegroups.com
Muy acertado Walter, la longitud de la cadena es muy grande, sobrepasa
el límite.

Lo he superado, en el sentido en que no me da el error en la línea 5.

Ahora el problema es que la información no se guarda en la tabla de access.

Lo he consultado desde VFP y no existe, abro la bdd en Access, hago la
busqueda y el registro que he ingresado no existe.

Porque no se ha guardado la información en Access?

El día 22 de enero de 2012 23:00, Walter R. Ojeda Valiente

Oscar Martinez

unread,
Jan 23, 2012, 1:07:26 AM1/23/12
to publice...@googlegroups.com
Yvan, tu info tambien fue de mucha ayuda.


El día 23 de enero de 2012 00:03, Oscar Martinez
<golden...@gmail.com> escribió:

Luis Maria Guayan

unread,
Jan 23, 2012, 7:36:14 AM1/23/12
to publice...@googlegroups.com
Como para saber mas sobre tu error y por que no guarda tus datos, utiliza AERROR() para saber lo que realmente sucede

-- Uso de AERROR() para errores ODBC --
http://www.portalfox.com/article.php?&sid=966


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Oscar Martinez

unread,
Jan 23, 2012, 11:38:34 AM1/23/12
to publice...@googlegroups.com
Buen Día LMG.

El error lo anexo en una imagen, al parecer el problema es con el
formato de fecha, en la base de datos el campo es de tipo datetime.

He cambiado en la línea del insert into asi ctod("02/01/2011") y dice
que ctod es una función no conocida.

He adaptado lo del link de PortalFox que me envió y aún sin guardar la
información.

El día 23 de enero de 2012 06:36, Luis Maria Guayan
<luism...@gmail.com> escribió:

error1.JPG

Luis Maria Guayan

unread,
Jan 23, 2012, 12:24:03 PM1/23/12
to publice...@googlegroups.com
Como consejo, pasa tus variables de fecha como parámetros y el ODBC hará su trabajo, intenta con el código de abajo:


lcArchivoMDB = "C:\Archivos de programa\DETsv\f987v2\f987v2.mdb"
lcConnStrin = "DSN=MS Access Database;Dbq=" + lcArchivoMDB + ";Uid=;Pwd=;"
lnHandle = SQLSTRINGCONNECT(lcConnStrin)
IF lnHandle > 0
  lcFecha = DATE(2011,01,02)

  lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes,
  tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto,
  iva, corr) VALUES ("06141401700010", "12011", "1", 1, 1, "1",
  "05222302731013", ?lcFech, "1", "01CCF02012011", 100, 13, 1)"

  lcCursor = "cliente1"
  SQLEXEC(lnHandle,lcSQL,lcCursor)
  SQLDISCONNECT(lnHandle)
ENDIF

Mira estos artículos de Esparta Palma en PortalFox que te ilustrarán mas tu caso

--- Cliente-Servidor: Manejo de Fechas ---
http://www.portalfox.com/article.php?sid=2445

--- Cliente-Servidor: Parametrización de Variables ---
http://www.portalfox.com/article.php?sid=2440


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Guillermo Gimenez

unread,
Jan 25, 2012, 8:48:42 AM1/25/12
to publice...@googlegroups.com
Oscar, usa text to lcSQL.. end text  
Porque el error no esta en la consulta, esta en "como" estas asignando la cadena de la consulta en la variable...
Saludos

--- El lun 23-ene-12, Oscar Martinez <golden...@gmail.com> escribió:

Oscar Martinez

unread,
Jan 26, 2012, 9:23:40 AM1/26/12
to publice...@googlegroups.com
El error que me da al hacerlo como me dice LMG: Se esperaban 6 parámetros.
Le quité que guardar la fecha y dice: Se esperaban 5 parámetros.
Lo intentaré con TEXT ... END TEXT, luego les comento.

Ruben Españon

unread,
Jan 26, 2012, 9:36:02 AM1/26/12
to publice...@googlegroups.com
Me parece que está confundiendo los paréntesis del CTOD con los de finales del Insert.

Ruben


De: Oscar Martinez <golden...@gmail.com>
Para: publice...@googlegroups.com
Enviado: Jueves 26 de enero de 2012 11:23

elkin dario uribe torres

unread,
Jan 26, 2012, 10:32:09 AM1/26/12
to publice...@googlegroups.com
Buenos dias Oscar

Coloca esto

set textmerge on TO memvar lcSQL noshow
\insert into cliente1 (nit, periodo, secuencia, id, mes, tipoidentificacion, 
\identificacion, fecha, tipodocumento, documento, monto, iva, corr) values (
\\'<<06141401700010>>', '<<12011>>', '<<1>>',<<1>>,<<1>>,'<<1>>',
\\'<<05222302731013>>','<<CTOD("02/01/2011)>>','<<1>>','<<01CCF02012011>>',<<100>>,<<13>>,<<1>>)
SET textmerge TO

Saludos


Elkin Uribe
Medellin - Colombia

Luis Maria Guayan

unread,
Jan 26, 2012, 12:46:45 PM1/26/12
to publice...@googlegroups.com
Probaste esto:


Como consejo, pasa tus variables de fecha como parámetros y el ODBC hará su trabajo, intenta con el código de abajo:

lcArchivoMDB = "C:\Archivos de programa\DETsv\f987v2\f987v2.mdb"
lcConnStrin = "DSN=MS Access Database;Dbq=" + lcArchivoMDB + ";Uid=;Pwd=;"
lnHandle = SQLSTRINGCONNECT(lcConnStrin)
IF lnHandle > 0
  lcFecha = DATE(2011,01,02)
  lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes,
  tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto,
  iva, corr) VALUES ("06141401700010", "12011", "1", 1, 1, "1",
  "05222302731013", ?lcFecha, "1", "01CCF02012011", 100, 13, 1)"

  lcCursor = "cliente1"
  SQLEXEC(lnHandle,lcSQL,lcCursor)
  SQLDISCONNECT(lnHandle)
ENDIF


Si utilizas CTOD() siempre te dará error ya que es una función de VFP y no de ACCESS

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Pablo Daniel

unread,
Jan 26, 2012, 1:06:12 PM1/26/12
to Comunidad de Visual Foxpro en Español
Hola:

Perdón si los desvío del tema principal, pero, no entiendo muy bien el
uso que están haciendo de las comillas en la asignación de la variable
lcSQL:

> lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes,
> tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto,
> iva, corr) VALUES ("06141401700010", "12011", "1", 1, 1, "1",
> "05222302731013", ?lcFecha, "1", "01CCF02012011", 100, 13, 1)"

La cadena de caracteres se corta por las comillas dobles, ¿o me
equivoco?

Es algo similar a lo que comentó Walter en la cuarta respuesta a este
tema. A diferencia de él, yo usaría las comillas dobles para encerrar
toda la sentencia y las comillas simples para los valores a insertar.

Gracias. Saludos.
---------------------------------------------------------------------------------------------------------




On 26 ene, 14:46, Luis Maria Guayan <luismar...@gmail.com> wrote:
> Probaste esto:
> Como consejo, pasa tus variables de fecha como parámetros y el ODBC hará su trabajo, intenta con el código de abajo:
> lcArchivoMDB = "C:\Archivos de programa\DETsv\f987v2\f987v2.mdb"
> lcConnStrin = "DSN=MS Access Database;Dbq=" + lcArchivoMDB + ";Uid=;Pwd=;"
> lnHandle = SQLSTRINGCONNECT(lcConnStrin)
> IF lnHandle > 0
>   lcFecha = DATE(2011,01,02)
>   lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes,
>   tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto,
>   iva, corr) VALUES ("06141401700010", "12011", "1", 1, 1, "1",
>   "05222302731013", ?lcFecha, "1", "01CCF02012011", 100, 13, 1)"
>   lcCursor = "cliente1"
>   SQLEXEC(lnHandle,lcSQL,lcCursor)
>   SQLDISCONNECT(lnHandle)
> ENDIF
> Si utilizas CTOD() siempre te dará error ya que es una función de VFP y no de ACCESS
>
> Luis María Guayán
> Tucumán, Argentina
> _________________________http://www.PortalFox.com
> Nada corre como un zorro
> _________________________
> El 26/01/2012 11:23, Oscar Martinez escribió:El error que me da al hacerlo como me dice LMG: Se esperaban 6 parámetros.
>
> Le quité que guardar la fecha y dice: Se esperaban 5 parámetros.
>
> Lo intentaré con TEXT ... END TEXT, luego les comento.
>
> El 25 de enero de 2012 07:48, Guillermo Gimenez<guille...@yahoo.com.ar>escribió:Oscar, usa text to lcSQL.. end text
>
> Porque el error no esta en la consulta, esta en "como" estas asignando la cadena de la consulta en la variable...
>
> Saludos
> --- Ellun 23-ene-12, Oscar Martinez<golden...@gmail.com>escribió:
> >...
>
> leer más »

Luis Maria Guayan

unread,
Jan 26, 2012, 1:20:29 PM1/26/12
to publice...@googlegroups.com
Buen punto, el código con la sentencia correcta quedaría:


lcArchivoMDB = "C:\Archivos de programa\DETsv\f987v2\f987v2.mdb"
lcConnStrin = "DSN=MS Access Database;Dbq=" + lcArchivoMDB + ";Uid=;Pwd=;"
lnHandle = SQLSTRINGCONNECT(lcConnStrin)
IF lnHandle > 0
  lcFecha = DATE(2011,01,02)
  lcSQL = [insert into cliente1(nit, periodo, secuencia, id, mes, ] + ;
    [tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto, ] + ;
    [iva, corr) VALUES ('06141401700010', '12011', '1', 1, 1, '1', ] + ;
    ['05222302731013', ?lcFecha, '1', '01CCF02012011', 100, 13, 1) ]
  lcCursor = "cliente1"
  SQLEXEC(lnHandle,lcSQL,lcCursor)
  SQLDISCONNECT(lnHandle)
ENDIF

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Yvan Carranza

unread,
Jan 26, 2012, 2:04:06 PM1/26/12
to publice...@googlegroups.com
Me parece que no esta probando... pq creo que es la segunda vez que se le envian ejemplo.. y sigue reportando el error de su codigo.
 
Amigo si no pruebas.. no vas a avanzar.. me parece mucho tiempo que sigas enfrascado en lo mismo.. con datos fijo deberia funcionar de inmediato.. o reporta el error que te da el driver de access.

Pablo Daniel

unread,
Jan 26, 2012, 5:17:51 PM1/26/12
to Comunidad de Visual Foxpro en Español
Hola:

Luis María, gracias por la aclaración.

Volviendo al tema principal, yo recomendaría revisar bien los formatos
de cada entorno. Es posible que la disposición de días, meses, años...
sea distinta en amos entornos. Por ejemplo, que en Access se permita
ingresar con formato AAAA/MM/DD y desde la aplicación se esté
trabajando con otro formato, como DD/MM/AAAA.

Respecto al código para realizarlo, estoy de acuerdo con lo que ya
postearon antes.

Saludos.
---------------------------------------------------------------------------------------------------------

On 26 ene, 13:20, Luis Maria Guayan <luismar...@gmail.com> wrote:
> Buen punto, el código con la sentencia correcta quedaría:
> lcArchivoMDB = "C:\Archivos de programa\DETsv\f987v2\f987v2.mdb"
> lcConnStrin = "DSN=MS Access Database;Dbq=" + lcArchivoMDB + ";Uid=;Pwd=;"
> lnHandle = SQLSTRINGCONNECT(lcConnStrin)
> IF lnHandle > 0
>   lcFecha = DATE(2011,01,02)  lcSQL = [insert into cliente1(nit, periodo, secuencia, id, mes, ] + ;
>     [tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto, ] + ;
>     [iva, corr) VALUES ('06141401700010', '12011', '1', 1, 1, '1', ] + ;
>     ['05222302731013', ?lcFecha, '1', '01CCF02012011', 100, 13, 1) ]  lcCursor = "cliente1"
>   SQLEXEC(lnHandle,lcSQL,lcCursor)
>   SQLDISCONNECT(lnHandle)
> ENDIF
>
> Luis María Guayán
> Tucumán, Argentina
> _________________________http://www.PortalFox.com
> Nada corre como un zorro
> _________________________
> El 26/01/2012 15:06, Pablo Daniel escribió:Hola: Perdón si los desvío del tema principal, pero, no entiendo muy bien el uso que están haciendo de las comillas en la asignación de la variable lcSQL:lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes, tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto, iva, corr) VALUES ("06141401700010", "12011", "1", 1, 1, "1", "05222302731013", ?lcFecha, "1", "01CCF02012011", 100, 13, 1)"La cadena de caracteres se corta por las comillas dobles, ¿o me equivoco? Es algo similar a lo que comentó Walter en la cuarta respuesta a este tema. A diferencia de él, yo usaría las comillas dobles para encerrar toda la sentencia y las comillas simples para los valores a insertar. Gracias. Saludos. --------------------------------------------------------------------------------------------------------- On 26 ene, 14:46, Luis Maria Guayan<luismar...@gmail.com>wrote:Probaste esto: Como consejo, pasa tus variables de fecha como parámetros y el ODBC hará su trabajo, intenta con el código de abajo: lcArchivoMDB = "C:\Archivos de programa\DETsv\f987v2\f987v2.mdb" lcConnStrin = "DSN=MS Access Database;Dbq=" + lcArchivoMDB + ";Uid=;Pwd=;" lnHandle = SQLSTRINGCONNECT(lcConnStrin) IF lnHandle > 0   lcFecha = DATE(2011,01,02)   lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes,   tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto,   iva, corr) VALUES ("06141401700010", "12011", "1", 1, 1, "1",   "05222302731013", ?lcFecha, "1", "01CCF02012011", 100, 13, 1)"   lcCursor = "cliente1"   SQLEXEC(lnHandle,lcSQL,lcCursor)   SQLDISCONNECT(lnHandle) ENDIF Si utilizas CTOD() siempre te dará error ya que es una función de VFP y no de ACCESS Luis María Guayán Tucumán, Argentina _________________________http://www.PortalFox.comNada corre como un zorro _________________________ El 26/01/2012 11:23, Oscar Martinez escribió:El error que me da al hacerlo como me dice LMG: Se esperaban 6 parámetros. Le quité que guardar la fecha y dice: Se esperaban 5 parámetros. Lo intentaré con TEXT ... END TEXT, luego les comento. El 25 de enero de 2012 07:48, Guillermo Gimenez<guille...@yahoo.com.ar>escribió:Oscar, usa text to lcSQL.. end text Porque el error no esta en la consulta, esta en "como" estas asignando la cadena de la consulta en la variable... Saludos --- Ellun 23-ene-12, Oscar Martinez<golden...@gmail.com>escribió: De: Oscar Martinez<golden...@gmail.com>Asunto: Re: [vfp] VFP + ACCESS, Error en insert intoPara:publice...@googlegroups.comFecha: lunes, 23 de enero de 2012, 1:45Walter, le he cambiado comilla simple al inicio y al final, pero siempre me da error en la línea 5. El día 22 de enero de 2012 22:32, Walter R. Ojeda Valiente<wr...@hotmail.com>escribió:Además, fíjate que usas comillas dobles en todas partes, deberías usar comillas simples al inicio y al final de la asignación y comillas dobles en el interior. Saludos. Walter. ________________________________ Date: Sun, 22 Jan 2012 22:22:12 -0600 Subject: [vfp] VFP + ACCESS, Error en insert intoFrom:golden...@gmail.comTo:publice...@googlegroups.comTengo una base de datos de Access a la cual quiero agregar 2000 registros aproximadamente, he credo la siguiente rutina y me da un error en la línea 5, cual es el error? Como prueba digité los valores y si estos se trasladaban sin ningun problema, entonces procedería a recorrer las tablas dbf para enviar los datos a Access. lcArchivoMDB = "C:\Archivos de programa\DETsv\f987v2\f987v2.mdb" lcConnStrin = "DSN=MS Access Database;Dbq=" + lcArchivoMDB + ";Uid=;Pwd=;" lnHandle = SQLSTRINGCONNECT(lcConnStrin) if lnHandle > 0 lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes, tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto, iva, corr) values ("06141401700010", "12011", "1", 1, 1, "1", "05222302731013", "ctod("02/01/2011"), "1", "01CCF02012011", 100, 13, 1)" lcCursor = "cliente1" SQLEXEC(lnHandle,lcSQL,lcCursor) SQLDISCONNECT(lnHandle) endif RETU El error dice que está aquí. lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes, tipoidentificacion, identificacion, fecha, tipodocumento, documento, monto, iva, corr) values ("06141401700010", "12011", "1", 1, 1, "1", "05222302731013", ctod("02/01/2011"), "1", "01CCF02012011", 100, 13, 1)" Error en la línea 5: Error de sintaxis. Lo único que veo es que en Access el campo fecha es datetime (02/01/2011 12:00 AM), tambien he cambiado la fecha y agregado la hora y siempre me da error. Otra alternativa podría ser, si tengo los archivos en Excel, como envío los datos desde Excel hacía la misma base de datos? En todo caso, si se puede enviar desde VFP o Excel, estaré muy agradecido con ustedes, ya que el propósito es tener la información en la BDD de Access, sea de una u otra forma. Nuevamente les agradezco por la ayuda brindada. ...leer más »

Pedro Orlando Cardoza Padilla

unread,
Jan 26, 2012, 5:59:39 PM1/26/12
to publice...@googlegroups.com
Fijate bien el ctod a lo mejor por ahi anda el error

De: elkin dario uribe torres <eduri...@gmail.com>
Para: publice...@googlegroups.com
Enviado: Jueves 26 de enero de 2012 9:32

Oscar Martinez

unread,
Jan 27, 2012, 12:51:50 PM1/27/12
to publice...@googlegroups.com
Amigos, disculpen por no haber contestado antes.
 
Hice un par de pruebas, segun de LMG, lo de Elkin, lo de Pablo, lo de Walter, etc, al principio era porque la cadena de conexion sobrepasaba la longitud máxima, luego lo de LuisMa que ?lcFecha y de igual manera me envia un mensaje de error que dice: Se esperaban 6 parámetros.
 
Al parecer es la fecha, le quité la fecha y dejé lo demás, el mensaje dice: Se esperaban 5 parámetros.
 
Las comillas simples o dobles no es el caso, lo he intentado con ambas.
 
Realmente no se que sucede, he revisado la configuración regional y dice que está en dd/mm/aaaa.
 
La tardanza en probar y responder es porque lo estoy llevando por otro camino, Excel, no me parece hacerlo así per necesito avanzar.
 
Ayer fui donde un cliente a hacer el mismo trabajo y lo hice por Excel, pero yo querí llegar con mi programita y generar el traslado de la información, pero no lo he logrado aun.
En mi trabajo fijo (digo fijo porque lo del cliente de ayer son ingresos extras) estoy tratando de hacer que esto funcione, pero como dije antes, lo estoy llevando junto con Excel para avanzar.
 
Haré las sugerencias que me han enviado hasta darle una solución a esta situación.
 
Sinceramente muy agradecido por el apoyo que me brindan.

extremo

unread,
Jan 27, 2012, 1:00:49 PM1/27/12
to Comunidad de Visual Foxpro en Español
Hola Oscar

Pense que tu problema ya estaba solucionado

Al ver tu codigo me di cuenta que tus comiilas estan mal puestas, le
hice una pequeña modificacion, con esto deberia funcionar

Codigo original:
lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes,
tipoidentificacion, identificacion, fecha, tipodocumento, documento,
monto,
iva, corr) values ("06141401700010", "12011", "1", 1, 1, "1",
"05222302731013", "ctod("02/01/2011"), "1", "01CCF02012011", 100, 13,
1)"

Codigo modificado mas propuesta de LuisMa:
dFecha = ctod("02/01/2011")
lcSQL = "insert into cliente1(nit, periodo, secuencia, id, mes,
tipoidentificacion, identificacion, fecha, tipodocumento, "
lcSQL = lcSQL + "documento, monto, iva, corr) values ("
lcSQL = lcSQL + "'06141401700010', '12011', '1', 1, 1, '1',
'05222302731013', ?dFecha, '1', '01CCF02012011', 100, 13, 1)"

Bendiciones



On 27 ene, 14:51, Oscar Martinez <golden.ki...@gmail.com> wrote:
> Amigos, disculpen por no haber contestado antes.
>
> Hice un par de pruebas, segun de LMG, lo de Elkin, lo de Pablo, lo de
> Walter, etc, al principio era porque la cadena de conexion sobrepasaba la
> longitud máxima, luego lo de LuisMa que ?lcFecha y de igual manera me envia
> un mensaje de error que dice: Se esperaban 6 parámetros.
>
> Al parecer es la fecha, le quité la fecha y dejé lo demás, el mensaje dice:
> Se esperaban 5 parámetros.
>
> Las comillas simples o dobles no es el caso, lo he intentado con ambas.
>
> Realmente no se que sucede, he revisado la configuración regional y dice
> que está en dd/mm/aaaa.
>
> La tardanza en probar y responder es porque lo estoy llevando por otro
> camino, Excel, no me parece hacerlo así per necesito avanzar.
>
> Ayer fui donde un cliente a hacer el mismo trabajo y lo hice por Excel,
> pero yo querí llegar con mi programita y generar el traslado de la
> información, pero no lo he logrado aun.
> En mi trabajo fijo (digo fijo porque lo del cliente de ayer son ingresos
> extras) estoy tratando de hacer que esto funcione, pero como dije antes, lo
> estoy llevando junto con Excel para avanzar.
>
> Haré las sugerencias que me han enviado hasta darle una solución a esta
> situación.
>
> Sinceramente muy agradecido por el apoyo que me brindan.
>
> El 26 de enero de 2012 16:59, Pedro Orlando Cardoza Padilla <
> pcardoz...@yahoo.es> escribió:
>
>
>
> > Fijate bien el ctod a lo mejor por ahi anda el error
> >   ------------------------------
> > *De:* elkin dario uribe torres <eduribe2...@gmail.com>
> > *Para:* publice...@googlegroups.com
> > *Enviado:* Jueves 26 de enero de 2012 9:32
>
> > *Asunto:* Re: [vfp] VFP + ACCESS, Error en insert into
>
> > Buenos dias Oscar
>
> > Coloca esto
>
> >  set textmerge on TO memvar lcSQL noshow
> > \insert into cliente1 (nit, periodo, secuencia, id, mes,
> > tipoidentificacion,
> > \identificacion, fecha, tipodocumento, documento, monto, iva, corr) values
> > (
> > \\'<<06141401700010>>', '<<12011>>', '<<1>>',<<1>>,<<1>>,'<<1>>',
>
> > \\'<<05222302731013>>','<<CTOD("02/01/2011)>>','<<1>>','<<01CCF02012011>>',­<<100>>,<<13>>,<<1>>)
> > SET textmerge TO
>
> > Saludos
>
> > Elkin Uribe
> > Medellin - Colombia
>
> > El 26 de enero de 2012 09:23, Oscar Martinez <golden.ki...@gmail.com>escribió:
>
> > El error que me da al hacerlo como me dice LMG: Se esperaban 6 parámetros.
> > Le quité que guardar la fecha y dice: Se esperaban 5 parámetros.
> > Lo intentaré con TEXT ... END TEXT, luego les comento.
>
> > El 25 de enero de 2012 07:48, Guillermo Gimenez <guille_cy...@yahoo.com.ar
> > > escribió:
>
> >    Oscar, usa text to lcSQL.. end text
> > Porque el error no esta en la consulta, esta en "como" estas asignando la
> > cadena de la consulta en la variable...
> > Saludos
>
> > --- El *lun 23-ene-12, Oscar Martinez <golden.ki...@gmail.com>* escribió:
>
> > De: Oscar Martinez <golden.ki...@gmail.com>
> > Asunto: Re: [vfp] VFP + ACCESS, Error en insert into
> > Para: publice...@googlegroups.com
> > Fecha: lunes, 23 de enero de 2012, 1:45
>
> > Walter, le he cambiado comilla simple al inicio y al final, pero
> > siempre me da error en la línea 5.
>
> > El día 22 de enero de 2012 22:32, Walter R. Ojeda Valiente
> > <w...@hotmail.com<http://ar.mc1145.mail.yahoo.com/mc/compose?to=w...@hotmail.com>>
> > escribió:
> > > Además, fíjate que usas comillas dobles en todas partes, deberías usar
> > > comillas simples al inicio y al final de la asignación y comillas dobles
> > en
> > > el interior.
>
> > > Saludos.
>
> > > Walter.
>
> > > ________________________________
> > > Date: Sun, 22 Jan 2012 22:22:12 -0600
> > > Subject: [vfp] VFP + ACCESS, Error en insert into
> > > From: golden.ki...@gmail.com<http://ar.mc1145.mail.yahoo.com/mc/compose?to=golden.ki...@gmail.com>
> > > To: publice...@googlegroups.com<http://ar.mc1145.mail.yahoo.com/mc/compose?to=publicesvfoxpro@googleg...>
> > > Nuevamente les agradezco por la ayuda brindada.- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Yvan Carranza

unread,
Jan 27, 2012, 1:01:18 PM1/27/12
to publice...@googlegroups.com
OScar,
Si no le grabas la fecha, debes sacar de la lista de campos a tu campo fecha, de contrario tendras el error.. de se esperaba, 5 o 4 o etc. Tal vez te paso una comilla.
 
El tema de que si le falta parametros..pegalo de inmediato para revisarlo...

Fox Reloaded

unread,
Jan 27, 2012, 1:49:57 PM1/27/12
to publice...@googlegroups.com
No se si te sirve de algo, pero como nunca he trabajado con access (ya que no le encuentro potencia), lo hago con VFP y MySQL
por lo tanto cuando ejecuto una instruccion SQLEXEC() tengo que asegurarme que todas las variables que use sean de tipo cadena de caracteres, no importa si la estructura de la tabla tiene establecidos otros tipos de datos como char, varchar, numeric o blob.

un ejemplo claro de esto seria algo asi y perdona si olvido algo en este codigo de ejemplo.

codigo = "1"
nombre = "Pepe"
apellido = "Monsalve"

Servidor = "Localhost"   
Basedatos = "Basededatos"
Usuario = "Usuario"
Contraseña = ""
conexion ="Driver={MySQL ODBC 3.51 Driver}"+;
              ";Server="+servidor+;
              ";Database="+basededatos+;
              ";Uid="+usuario+;
              ";Pwd="+contraseña
             
** Establecemos SQLSETPROP para que no nos muestre cuadros de dialogo **
** al inicio de la conexion  **

SQLSETPROP(0,"DispLogin",3)
       ** Creamos el handle para la conexion **

lcHandle = SQLSTRINGCONNECT(conexion)

IF lcHandle < 0 && Si hubo un error durante la conexion
    =AERROR(laError)
  MESSAGEBOX("Error al conectar a MySQL Server " + CHR(13) +;
              "Descripción: " + laError[2])
ELSE
               SQLEXEC(lcHandle,"INSERT INTO tabla(campo1,campo2,campo3) " ;
                               "VALUES('"+codigo+"','"+nombre+"','"+apellido+"') ")
       ENDIF

Nota en el ejemplo anterior que aunque en la base de datos yo tenga establecido en la tabla de la base de datos de Mysql el campo codigo como entero cuando uso la instruccion SQLEXEC() inserto los datos como si fueran cadenas de caracteres, lo mismo pasa con la fecha, asi estemos usando valores de fecha u hora, debemos transformarlas a cadenas de caracteres para que la instruccion SQLEXEC() nos la permita como valida. No se que tanto cambia esto con Access porque como te dije antes nunca he trabajado con access pero si deberias intentar cambiar la forma de usar los datos con SQLEXEC() y yo por lo menos tengo una funcion personalizada que uso mucho y me va muy bien.

Espero que te haya servido de algo y desde aqui un abrazo... :)

2012/1/27 Yvan Carranza <yvan.c...@gmail.com>



--
Thanks for everything... :D


         --- Fox ---
Maracaibo, Venezuela

Oscar Martinez

unread,
Jan 27, 2012, 8:01:07 PM1/27/12
to publice...@googlegroups.com
De acuerdo compañeros, lo revisaré y de ser posible ahora mismo les responde que sucede con los cambios que me han enviado.

Si hay algún error les enviaré la imagen.

Muy agradecido con todos.

Oscar Martinez

unread,
Jan 29, 2012, 12:14:31 PM1/29/12
to publice...@googlegroups.com
Compañeros,

He dado seguimiento según sugerencias de Extremo y los datos se guardan, anexo imágenes, pero al momento de guardar envía un error, el cual se puede ver en las imágenes 2 y 4, le dí seguimiento al debug y fui capturando las pantallas desde que la tabla de Access cliente1 estaba vacía hasta llegar a la pantalla de la consulta en VFP y ahí se muestran los dos registros ingresados. Anexo las imágenes.

Para ingresar los dos registros modifiqué el código (prg).

Pero, porque da el error 31 La referencia al subíndice no es válida? Eso lo muestra desde que se ingresa el primer registro.

Si el error no me causa problema, podemos dejar cerrado el caso, de lo contrario hay que ver porque lo genera.

Les agradezco a todos por su valiosa ayuda.
vfp6.JPG
access1.JPG
access2.JPG
access3.JPG
access4.JPG
access5.JPG
Reply all
Reply to author
Forward
0 new messages