Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-07-2007
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
RenameFile ???

Aqui vengo de nuevo con mis novatadas , aquí el problema, quiero cambiar el nombre de una base de datos en access pero no me funciona, estos son mis codigos.

Código Delphi [-]
var fichero, urln, urlv:string        
begin
fichero:=ExtractFileDir (ParamStr(0))+'\BD\';
urlv:=fichero+combobox1.text; //en el combobox esta el nombre de la BD antigua
urln:=fichero+edit1.text+ExtractFileExt(urlv); //en el edit1 esta el nombre que quiero que tenga la nueva BD
if not fileexists(urln) then
   begin
      if renamefile(urlv, urln)
        then MessageDlg('La BD ha cambiado de nombre', mtinformation, [mbOK], 0)
        else MessageDlg('Se a producido un error al cambiar el nombre', mtwarning, [mbOK], 0);
    end
else
  MessageDlg('Ya existe el archivo', mtwarning, [mbOK], 0);
end;

Gracias desde ahora
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ

Última edición por principiante22 fecha: 20-07-2007 a las 03:28:15.
Responder Con Cita
  #2  
Antiguo 20-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

¿Qué error te encuentras? ¿Qué mensaje de error?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 20-07-2007
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
Tengo que averiguar si el archivo (el nuevo nombre que le quiero poner al viejo archivo) existe, ya que si existe Windows no cambiara el nombre del archivo.

PD: no me tira ningun error, solo me sale el mensaje que puse que me diga si se da el caso que delphi no logra renombrar el archivo
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
  #4  
Antiguo 20-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

De acuerdo. Lo único que se me ocurre es que antes de tratar de renombrar el archivo, justo antes, sitúes un par de "ShowMessage". Uno que te muestre la ruta del viejo archivo, y otro que te muestre la del nuevo. Asegúrate de que no hay nada raro ahí.

Por otro lado, tal vez convenga revisar la ayuda del API de Windows sobre la función "RenameFile": más que nada para saber qué se supone que retorna esta función, tanto en caso de éxito como en caso de error.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 20-07-2007
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
lo que me dices de los showmessage ya lo hice (antes de siquiera preguntar aqui) y todo esta en orden, y lo que me dices de averiguar que deberia de retornar, he buscado desde la ayuda de delphi hasta google (tambien antes de preguntar) y lo que debe de retornar si cambia el nombre es true, y si no lo cambia false. Si te ocurre algo mas sera muy bien agradecido pero si no se te ocurren pues gracias de todos modos
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
  #6  
Antiguo 20-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Vale. Buscando por "RenameFile" al cabo se ve que utiliza (en Windows) la función "MoveFile" del API de Win32. Podrías usar esta función (por cierto, yo no sé qué **** han cambiado en la Web de MSDN que no encuentro la documentación de la función "MoveFile"), digo, en lugar de "RenameFile".

Lo digo porque la función "MoveFile" te permitirá recurrir a la función "GetLastError" en caso de que algo marche mal. Es posible que con "RenameFile" también puedas recurrir a "GetLastError", pero, si te fijas en esta función, verás que únicamente existe por compatibilidad con Linux: en Windows se acaba usando "MoveFile".

En fin. Yo vería qué me ofrece "GetLastError", y usaría "MoveFile" en lugar de "RenameFile" si no tuviera pensado migrar a Linux mi programa.

Código Delphi [-]
ShowMessage( SysErrorMessage(GetLastError()) );

Por cierto, como no consigo enlazar con la ayuda de la función "MoveFile", la copio aquí (desde la ayuda que incluye Delphi 2007), por si sirve de algo:

Cita:
Empezado por MoveFile
MoveFile

The MoveFile function moves an existing file or a directory, including its children.

To specify how to move the file, use the MoveFileEx function.


BOOL MoveFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName
);

Parameters
lpExistingFileName
[in] Pointer to a null-terminated string that names an existing file or directory.
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File.

Windows Me/98/95: This string must not exceed MAX_PATH characters.
lpNewFileName
[in] Pointer to a null-terminated string that specifies the new name of a file or directory. The new name must not already exist. A new file may be on a different file system or drive. A new directory must be on the same drive.
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File.

Windows Me/98/95: This string must not exceed MAX_PATH characters.
Return Value
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks
The MoveFile function will move (rename) either a file or a directory (including its children) either in the same directory or across directories. The one caveat is that the MoveFile function will fail on directory moves when the destination is on a different volume.

If a file is moved across volumes, MoveFile does not move the security descriptor with the file. The file will be assigned the default security descriptor in the destination directory.

The MoveFile function coordinates its operation with the link tracking service, so link sources can be tracked as they are moved.

__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 20-07-2007
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.275
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
¿Lo has ejecutado paso a paso? Si no lo has hecho, hazlo y mira a ver cual es la línea que no está funcionando bien; Revisa que las variables tienen los valores correctos. Si no estás "dando palos de ciego".
__________________
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
  #8  
Antiguo 20-07-2007
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
Tambien hay otra posibilidad para que de error, no puede estar abierta la base de datos por ningun programa para poder renombrar el archivo.

Saludos
Responder Con Cita
  #9  
Antiguo 20-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ahí está... por eso lo de recurrir a "GetLasError", para al menos intentar saber con qué error estamos tratando...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 20-07-2007
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
ok, el error que me da es:

The Windows does not have scroll bars

Y creo que el problema es el que menciona Mick

Cita:
no puede estar abierta la base de datos por ningun programa
Ya que recien ahora me dijo que funciono el renamefile cuando me puse a inventar tratando de localizar algun codigo para liberar la BD, pero no se cual fue que me funciono ya que todos me tiraron error en el momento y cuando los quite todos y deje los codigos como puse aqui anteriormente (solo tiene de más el GetLastError) me dijo que funciono y cuando fui a ver la BD (que supuestamente renombro) lo que hiso fue crear otra BD con el nombre que le di a tener en blanco.
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ

Última edición por principiante22 fecha: 20-07-2007 a las 17:28:31.
Responder Con Cita
  #11  
Antiguo 21-07-2007
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
Alguien me podria decir como puedo quitar de los procesos al archivo que quiero renombrar, creo que con eso se podria resolver mi problema, porque creo (creo) que mis codigos están bien el unico problema que se me ocurre que pueda tener es que algo está usando mi archivo.
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
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


La franja horaria es GMT +2. Ahora son las 15:14:59.


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