Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Nombre largo

Hola, tengo un inconveniente con una aplicación que hice. Si la ejecuto en la PC donde tengo instalado Delphi xe5, encuentra y opera con tablas cuyo nombre es de esta característica: PE1234567890123456.dbf, pero al querer ejecutar dicha aplicación en otra pc, no encuentra la tabla. Si achico el nombre a 8 caracteres, la encuentra. Decidí instalar el xe5 en esa otra PC, ejecute la aplicación y anduvo, mi pregunta es si alguien sabe que api o función se instala con el xe5 y es la que permite leer archivos con nombre que supere los 8 caracteres, ya que es ilógico instalar en cada PC el xe5. Desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 18-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Tiene msdos?
Responder Con Cita
  #3  
Antiguo 19-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Hola Casimiro, gracias por responder. Ambas Pcs tienen instalado win7 32bits. Si tu pregunta es si tengo acceso al msdos, la respuesta es si.
Responder Con Cita
  #4  
Antiguo 19-11-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Como buscas el archivo?
Como lo abris?
Que excepción se genera?
Estas usando una ruta absoluta o relativa?
Que pasa si pones el archivo en c:\?

No creo que Delphi instale ninguna API para abrir archivos de nombre largo. Menos en windows 7...

Proba cargar un archivo con "nombre largo" en un string list por ejemplo para despejar dudas
Responder Con Cita
  #5  
Antiguo 19-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
AgustinOrtu, te comento la operatoria del sistema:

Recibo por Ftp, tablas que contienen un pedido de mercadería, el nombre de la tabla esta conformada por 'PE' + Código Cliente + Código Vendedor + día + mes + hora + min, un ejemplo 'PE0215000119110925.DBF'.
Estas tablas están en el directorio 'C:\pedidos', mismo directorio donde se ejecuta la aplicación. En dicha aplicación, simplemente tengo un adoquery ('pedido') y cargo los datos de esta tabla, para luego procesarlos.

La sentencia para abrir la adoquery es :

Código Delphi [-]
pedido.sql.text:='select * from ' + nombre_tabla;


donde nombre_tabla es un string con el nombre de la tabla a leer.

La excepción que aparece es la siguiente :

Código Delphi [-]
[Microsoft][Controlador ODBC dBase] El motor de base de datos 
Microsoft Jet no pudo encontrar el objeto ''PE0215000119110925.DBF'.
Asegúrese de que el objeto existe, y que ha escrito el nombre y la ruta
de acceso al objeto correctamente.

Como dije antes, yo tampoco creo que haya que instalar xe5 en cada pc, pero es evidente que "algo cambia" al hacerlo. Por eso quisiera saber que es para que funcione la aplicación.

Gracias
Responder Con Cita
  #6  
Antiguo 19-11-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.271
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Las RxLib, en la unit FileUtil.pas tienen la siguiente función, que tal vez te sea útil (te pongo la 4):

Código Delphi [-]
function ShortToLongFileName(const ShortName: string): string;
var
  Temp: TWin32FindData;
  SearchHandle: THandle;
begin
  SearchHandle := FindFirstFile(PChar(ShortName), Temp);
  if SearchHandle <> INVALID_HANDLE_VALUE then begin
    Result := string(Temp.cFileName);
    if Result = '' then Result := string(Temp.cAlternateFileName);
  end
  else Result := '';
  Windows.FindClose(SearchHandle);
end;

function LongToShortFileName(const LongName: string): string;
var
  Temp: TWin32FindData;
  SearchHandle: THandle;
begin
  SearchHandle := FindFirstFile(PChar(LongName), Temp);
  if SearchHandle <> INVALID_HANDLE_VALUE then begin
    Result := string(Temp.cAlternateFileName);
    if Result = '' then Result := string(Temp.cFileName);
  end
  else Result := '';
  Windows.FindClose(SearchHandle);
end;

function ShortToLongPath(const ShortName: string): string;
var
  LastSlash: PChar;
  TempPathPtr: PChar;
begin
  Result := '';
  TempPathPtr := PChar(ShortName);
  LastSlash := StrRScan(TempPathPtr, '\');
  while LastSlash <> nil do begin
    Result := '\' + ShortToLongFileName(TempPathPtr) + Result;
    if LastSlash <> nil then begin
      LastSlash^ := char(0);
      LastSlash := StrRScan(TempPathPtr, '\');
    end;
  end;
  Result := TempPathPtr + Result;
end;

function LongToShortPath(const LongName: string): string;
var
  LastSlash: PChar;
  TempPathPtr: PChar;
begin
  Result := '';
  TempPathPtr := PChar(LongName);
  LastSlash := StrRScan(TempPathPtr, '\');
  while LastSlash <> nil do begin
    Result := '\' + LongToShortFileName(TempPathPtr) + Result;
    if LastSlash <> nil then begin
      LastSlash^ := char(0);
      LastSlash := StrRScan(TempPathPtr, '\');
    end;
  end;
  Result := TempPathPtr + Result;
end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 19-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Neftalí, gracias por tu aporte. Utilice la función longtoshortnamefile y al utilizar el string que dá por resultado la función (la cual queda así 'PE0215~1') en el sql.text, da error de sintaxis en la clausula FROM. Así que no es por esa vía.
Pregunto desde mi ignorancia.... puede ser que al instalar xe5, modifique al Controlador ODBC dBase del motor de base de datos Microsoft Jet ?
Responder Con Cita
  #8  
Antiguo 19-11-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Proba usar la ruta completa en NombreTabla y agregarle comillas (QuotedStr)
Responder Con Cita
  #9  
Antiguo 19-11-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por aromigaret Ver Mensaje
puede ser que al instalar xe5, modifique al Controlador ODBC dBase del motor de base de datos Microsoft Jet ?
Yo comenzaría revisando esto. Busca el controlador ODBC para dbase y compara las versiones antes y después de instalar delphi.

// Saludos
Responder Con Cita
  #10  
Antiguo 19-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
AgustinOrtu, tampoco funciona así.
Roman verifiqué esa opción, y encontré que el administrador de ODBC de una pc donde no esta instalado xe5, no tiene cargado los drivers para manejar ni .dbf .xls ni .mdb. Ahora buscare como cargar esos driver y ver si funciona. Gracias por la pista y si tenes idea de como cargar estos drivers, por favor avísame. Muchas gracias
Responder Con Cita
  #11  
Antiguo 20-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
https://www.microsoft.com/es-es/down....aspx?id=21373

Seleccionas tu versión de sistema y listo.
Responder Con Cita
  #12  
Antiguo 20-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Bueno, tampoco parece ser el camino por el ODBC. Verifique los drivers instalados y son los mismos que están en la PC donde esta instalado el xe5 y en el administrador del ODBC están todos cargados y configurados igual. Alguna otra idea por favor? Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
El string mas largo Carmelo Cash Firebird e Interbase 1 11-10-2014 00:28:42
Me largo Ñuño Martínez La Taberna 40 19-08-2008 15:57:00
Nombre de tabla muy largo en MySql seoane MySQL 8 29-02-2008 23:30:38
Como Transormar un string largo a Integer largo RodoRodo Varios 1 27-06-2007 02:26:29
Proceso muy largo ? Coco_jac Varios 5 22-12-2005 21:54:59


La franja horaria es GMT +2. Ahora son las 08:57:11.


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
Copyright 1996-2007 Club Delphi