Ado

Hola, tengo hecho un programa que mete artículos en el programa de S.P Tpvplus élite y la base de datos es Foxpro. La tabla de artículos tiene una fecha y no puedo de ninguna manera meter un registro con la instrucción "INSERT INTO" me dice que el tipo fecha que meto que no es compatible.
Hago Así,
strsql(0) = ""
strsql(0) = strsql(0) & "INSERT INTO articulo ("
strsql(0) = strsql(0) & " cref,"
strsql(0) = strsql(0) & " cdetalle,"
strsql(0) = strsql(0) & " fecha"
strsql(0) = strsql(0) & ") VALUES ("
strsql(0) = strsql(0) & " '" & Trim$("" & acref) & "',"
strsql(0) = strsql(0) & " '" & Trim$("" & acdetalle) & "',"
strsql(0) = strsql(0) & " " & format(now,"ddmmyy") & ""
Probé con #, con % con cvdate para convertir la fecha y nada
*************************************
Así me conecto a la base de datos
*************************************
Public Function conecta(esto As String) As Boolean
On Error GoTo vete
conecta = False
esto = esto & ";"
Set oconn = New ADODB.Connection
oconn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
"SourceType=DBF;" & _
"SourceDB= " & esto & "" & _
"Exclusive=no;"
conecta = True
Exit Function
vete:
If MsgBox(err.Description & " Error Abriendo la Base de Datos", vbCritical, "Abriendo base de datos") Then
End If
End Function

4 respuestas

Respuesta
1
Yo en foxpro no he trabajado nunca pero tanto en SQL Server como Oracle y Access hay que poner un delimitador de fechas.
En SQL Server y oracles es '
En Access es #
Mira en Foxpro
Por tanto debería ser
strsql(0) = strsql(0) & "#" & format(now,"ddmmyy") & "#"
Respuesta
1
El problema tal ves sea con la función
Format(now,"ddmmyy") el formato que te entraga la funcion Format en relacion a fechas depende un poco de la configuracion regional que tengas en la maquina, igualmente una forma correcta seria format(date,"d/m/yy"), pero si el campo al que queres incluir una fecha ya esta definido como campo de fecha entonses solo tenes que ingresar Date sin la instruccion Format
strsql(0) = strsql(0) & " " & date& ""
Tiene bastante lógica lo que me dices, y lo acabo de probar, pero me sigue dando el error. ¿Puede tener algo que ver que en la configuración regional tengo el formato dd/mm/aaaa y en visual solamente me coge dd/mm/yyyy. El año lo tengo que poner como yyyy y no aaaa como esta en la regional?.
El error es:
2147217913 [microsoft][odbc visual foxpro driver] El tipo de datos es incompactible
Además si me dejara no meter el campo fecha, pero me dice que no puede contener valores nulos.
Gracias
Si ya probaste ingresando directamente Date sin la función Format y te sigue mostrando el error puede ser que el campo en la base de datos del Tpvplus no sea un campo Date/Time normal, te convendría abrí la base da datos con el administrador visual de datos y verificar el tipo de datos que contiene ese campo, y también vas a poder ver como están formateados los registros ya ingresados por el mismo programa, igulmente yo sigo pensando en alguna otra solución.
Con que puedo ver la base de datos hecha en foxpro. Creo que con el driver odbc pero con la vista de datos de basic no consigo enlazar con foxpro solamente con odbc
A ver si me puedes ayudar
Gracias
Las bases de datos con odbc las podes abrir con Access, en ese caso tendrías que exportar datos y ver en que formato están, con eso solucionamos el problema.
Si, ya vi el formato de la base de datos está en un formato dd/mm/yyyy una fecha normal, no se por que no funciona con la función insert into y sí con Add.
Yo creo que foxpro tiene un formato diferente pero no encuentro documentación sobre fechas en foxpro
Gracias
Por lo visto el formato de la base de datos esta bien, el problema debe estar en la sintaxis de instrucción insert into lo que se me ocurre es probar algo de esto y revisar bien la instrucción
strsql(0) = strsql(0) & " " & TO_DATE(Date,"DD/MM/YY") & ""
o
strsql(0) = strsql(0) & " " & Format(Date,"MM/DD/YY") & ""
o
strsql(0) = strsql(0) & " #" & Format(Date,"dd/mm/yyyy") & "#"
o
strsql(0) = strsql(0) & " #" & str(Format(Date,"dd/mm/yyyy")) & "#"
o
strsql(0) = strsql(0) & " " & GETDATE() & ""
o
strsql(0) = strsql(0) & " #" & GETDATE() & "#"
Respóndeme que yo estoy por crear una base de datos como la que tienes y voy a tratar de ingresar los datos como vos la haces, yo teniéndolo acá me seria más fácil encontrar el error, igualmente pásame todos los números de error que te fue dando, eso ayuda mucho
Respuesta
Prueba a poner la fecha entre comillas, como si se tratase de un string. Al menos en SQL Server funciona así.
strsql(0) = strsql(0) & " '" & format(now,"ddmmyy") & "'"
Respuesta
En general está bien, lo que ocurre es que no creo que acepte el formato de fecha que le has puesto. Creo que debería funcionarte cambiando el format(...) por cDat(date(now())). Es decir, pasar a texto la fecha de hoy.
Me sigue sin ir mire el formato de la base de datos y es tipo date dd/mm/yyyy
es una fecha normal no debería de dar problemas, pero sigue sin ir.
No se si en vez de # hay otro signo para las bases foxpro es que no me coge la fecha con nada ni ' ni # ni las 2 ni cvdate.
Gracias
Prueba a poner en el format (..., "dd/mm/yyyy") y a ver si funciona. No se si es que sólo has puesto un trozo del código, pero falta un paréntesis al final. Sobre el #, sé que en otros lenguajes que atacan a bases de datos utilizan el valor de fecha insertado entre dos #, pero no creo que ahí haga falta. Creo que debería cogerlo tal cual.
Si, solo era un trozo del código la tabla tiene como 60 campos, pero sé con seguridad que falla en la fecha.
Tampoco me va con el format, ni cvdate ni nada.
Yo creo que es por que a foxpro le hace falta un formato diferente pero no encuentro documentación sobre fechas en foxpro
gracias
A ver si te sirve esto que he encontrado en una web.
SQLEXEC( lnH, "INSERT INTO TEST ([Date], [Type]) VALUES ( '11/09/1970', 'Date' )" ).
Si no es así, te recomiendo que mires alguno de los cursos disponibles en sitios como http://www.lawebdelprogramador.com o http://www.monografias.com

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas