Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Microsoft.ACE.OLEDB.12.0 con nombre de archivo mayor a 8 caracteres (https://www.clubdelphi.com/foros/showthread.php?t=91333)

aromigaret 05-01-2017 21:50:13

Microsoft.ACE.OLEDB.12.0 con nombre de archivo mayor a 8 caracteres
 
Hola, tengo un problema estoy intentando abrir un archivo .dbf desde sql server 2014 con la siguiente linea :

Código SQL [-]
SELECT CANTIDAD,ARTICULO,MARCA,CODIGONUM FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','DBase IV;Database=C:\SISTEMA_NUEVO\PEDIDOS','SELECT * FROM PE119700000301162344')

y aparece el siguiente error :

"El motor de base de datos de Microsoft Access no pudo encontrar el objeto 'PE119700000301162344'

Si cambio PE119700000301162344 por un nombre de hasta 8 caracteres, lo encuentra. Como hago para que me tome el nombre largo?.
Desde ya muchas gracias.

AgustinOrtu 05-01-2017 23:49:09

Habria que probar encerrando el nombre de la tabla usando algun caracter especial.. aunque no encontre ninguna documentacion de esto

Podrias probar alguna de estas:

Código SQL [-]
SELECT * FROM "PE119700000301162344"
SELECT * FROM [PE119700000301162344]
SELECT * FROM 'PE119700000301162344'
SELECT * FROM ´PE119700000301162344´

AgustinOrtu 06-01-2017 00:07:48

Encontre estos links, fijate si alguna solucion te puede ayudar:

https://social.msdn.microsoft.com/Fo...=sqldataaccess

http://sheroz.com/pages/blog/ms-acce...dbf-files.html

https://www.experts-exchange.com/que...in-Access.html

https://www.experts-exchange.com/que...SQL-Query.html

Aparentemente el problema es que trabaja con nombres en formato DOS, que estan limitados a 8 caracteres

aromigaret 06-01-2017 19:29:34

Muchas gracias Agustin por tu respuesta e interés. Es evidente que el problema no tiene una solución simple. Tendré que renombrar el archivo cuyo nombre supere los 8 caracteres. Es una solución simple pero no la mejor.

dec 06-01-2017 21:36:21

Hola a todos,

¿Estás seguro que el error tiene que ver con el nombre del "archivo"? Lo digo porque el mensaje de error dice que "no lo encuentra", pero, no que "el nombre es inválido"...

AgustinOrtu 07-01-2017 01:54:50

El problema esta en la implementacion de los driver. Son antiguos y solo pueden ver hasta archivos con nombres de 8 caracteres, estan implementados para MS-DOS 16 y en ese SO los archivos llegan hasta los 8 caracteres. Evidentemente cuando quiere buscar el archivo corta el string hasta el 8vo caracter y ese archivo seguro que no existe

En alguno de los link de por ahi se sugiere que otra posible solucion es la de cortar el nombre del archivo y agregar un ~ al final. Creo que habia que recortarlo hasta 6 o 7 caracteres, no recuerdo. Ej NombreLargo.txt --> Nombre~

Casimiro Notevi 07-01-2017 13:19:36

¿No había una función que devolvía el nombre corto de un nombre largo?

ecfisa 07-01-2017 14:16:45

Cita:

Empezado por Casimiro Notevi (Mensaje 512224)
¿No había una función que devolvía el nombre corto de un nombre largo?

Si, estas en lo correcto. La funcion es GetShortPathName

Código Delphi [-]
// uses Windows;

function ShortPathName( const FileName: string ): string;
var
  ShortName: array[0..MAX_PATH] of char;
begin
  GetShortPathName( PChar( FileName ), @ShortName, Length( ShortName ) );
  Result := ShortName;
end;

Saludos :)

aromigaret 26-01-2017 15:30:53

Dec, te comento que funciona si pongo un nombre de archivo hasta 8 caracteres.
Eficsa, probé la función que me indicas, pero me devuelve cualquier carácter. Que puedo estar haciendo mal?
Gracias.

aromigaret 26-01-2017 16:04:44

Eficsa, ya encontré el error de la función, yo ponía mal el directorio donde se encontraba el archivo. Pero ahora, el procedimiento almacenado que tengo en SQL server, no me admite el carácter '~'.
Alguna idea ?

AgustinOrtu 26-01-2017 19:07:37

Pero no se supone que con la función obtenes el nombre completo sin el ~?


La franja horaria es GMT +2. Ahora son las 18:58:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi