Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Copiar archivo a un servidor CopyFile (https://www.clubdelphi.com/foros/showthread.php?t=75274)

mRoman 10-08-2011 06:14:44

Copiar archivo a un servidor CopyFile
 
Hola buenas noches amigos.

Tengo un problema que trato de solucionar. Les explico.

Desarrollé una aplicacion hecha en Delphi6 con FireBird 1.5. Estoy tratando de hace lo siguiente:

Copiar un archivo PDF desde una máquina cliente hacia el servidor de la base de datos. Estos equipos estan conectados a una RED LAN usando WinXP. Ambos equipos usan este sistema operativo.

Lo que he hecho:

He consultado estos hilos
http://www.clubdelphi.com/foros/showthread.php?t=72767&highlight=copiar+archivos+a+un+servidor
http://www.clubdelphi.com/foros/showthread.php?t=74419
http://www.forosdelweb.com/f15/ayuda-con-copyfile-grupo-servidores-99956/
http://social.msdn.microsoft.com/Forums/es/vbes/thread/eb5de29d-c003-46c8-8bc0-15d2c7dddad6


Que habla del caso, el cual lo aplique asi:

Código Delphi [-]
                    CopyFile( PChar(cArchivoAsociado),Pchar('\\192.168.1.70\c\FORMATOS\'+dsVentas.FieldByName('LECHER').AsString+'  _'+dsVentas.FieldByName('DIA').AsString+dsVentas.FieldByName('MES').AsString+dsVentas.FieldByName('A  NIO').AsString+ExtractFileExt(oDlgFile.FileName) ),FALSE);
                    cArchivoAsociado:='\\192.168.1.70\c\FORMATOS\'+dsVentas.FieldByName('LECHER').AsString+'_'+dsVentas.  FieldByName('DIA').AsString+dsVentas.FieldByName('MES').AsString+dsVentas.FieldByName('ANIO').AsStri  ng+ExtractFileExt(oDlgFile.FileName);

Donde cArchivoAsociado contiene la ruta origen con todo y el nombre del archivo a copiar "c:\DOC090811.PDF" que también puede estar una unidad USB.

He visto comentarios que hablan acerca de almacenar imagenes en la base de datos, pero comentan que esto hace crecer a la base y que ademas puede hacerla lenta.

La verdad esta no seria opción, ya que se tienen que registrar diariamente cerca de 200 formatos, es decir scanearlos y guardarlos....sinceramente esta opción no PUEDE SER OPCION...

Entonces opte por copiarlos algun directorio, que por cierto lo tengo compartido (C:\FORMATOS) pero no he logrado copiarlo agregandole la IP del servidor....pero si realiza la copia del archivo si le quito la IP, pero esa no es la idea.

Lo anterior obedece que el usuario al momento de registrar los datos de los formatos el requiere que ese formato este disponible para aclaraciones posteriores y no buscarlo en el "archivo muerto" ya que seria muy tardado la localización del documento.

La RUTA FINAL la guardo en la base de datos, luego cuando se consulta el registro tomo la ruta para localizar el archivo y mostrarlo....pero este no es el problema, el problema es que no se copia el archivo.

Espero me puedan ayudar como lo debo de hacer exactamente.

newtron 10-08-2011 08:53:54

Hola.

Si el problema es que no te copia el fichero igual lo que te pasa es que no le estás poniendo un path+nombre de archivo de destino correcto. Yo lo que haría es hacer una prueba poniendo:

Código:

CopyFile(PChar(cArchivoAsociado),Pchar('\\192.168.1.70\c\TEMP\PRUEBA.PDF',FALSE);
Cuando veas que esto funciona correctamente (que es lo que imagino) revisa la cadena donde tienes puesto la ruta y nombre de destino que posiblemente habrá algo que esté dando problemas. Yo optaría por no poner espacios en el nombre.

Saludos

duilioisola 10-08-2011 13:47:25

Cita:

no he logrado copiarlo agregandole la IP del servidor....pero si realiza la copia del archivo si le quito la IP
Esto quiere decir que:
SIN la dirección IP, lo estás copiando en el mismo ordenador
CON la dirección IP, trata de copiarlo y no puede.

¿Cuál es el mensaje de error?
¿Puedes acceder a ese ordenador servidor desde el cliente? (\\192.168.1.70\)
¿Puedes copiarlo utilizando el explorador de windows? (abrir dos ventanas C:\ORIGEN y \\192.168.1.70\C\TEMP\, y luego arrastrar y copiar)

escafandra 10-08-2011 16:17:20

Quizás te interese esto.

Saludos.

mRoman 10-08-2011 18:36:07

Gracias escafandra.....la verdad si esta interesante y talvez sin tanto problema....
A TODOS GRACIAS POR AYUDARME....

Les comento que ya esta funcionando, la verdad desconozco como es que pasó, pero considero que en el momento que estaba haciendo la prueba estaba en mi laptop conectado a internet de manera inalambrica y la IP que les puse en mi código era precisamente la IP de la red inalambrica....

Lo que hice fué conectar en RED otra laptop (LAN) y les asigne IP`s a ambas para esta RED y funciono !.....

Para lo anterior solo faltó asignarle derechos a la carpeta compartida del servidor, dando click derecho y en propiedades dentro de la pestaña de "Compartir", seleccioné la casilla que dice "Permitir que los usuarios de la red cambien mis archivos". Anteriormente no le habia seleccionado esto y pues no copiaba nada.

Acerca del error que mandaba, despues de postear, sigue consultando mas hilos en "San Google" y me encontre con una instruccion GetLastError, el cual lo capture y me dio un número, el 52, lo consulte en una tabla de errores del CopyFile y decia, obviamente en inglés, algo de que habia un nombre duplicado en la RED o algo asi y que no podia copiar... asi que fue entonces donde conecte la otra laptop a mi laptop para crear una RED LAN....y ahi fué donde ya funciono.

En estos momento ya tengo un EJECUTABLE en producción corriendo en los equipos de la oficina y funciona correctamente. Desde cualquier maquina cliente se pueden cargar los archivos y el sistema los copia a una carpeta compartida en el servidor.....

El problema fué de direcciones IP, ademas de compartir la carpeta, configurarla para que los usuarios de la red permitan realizar cambios a mis archivos de esa carpeta.

Les agradezco mucho su interes y su tiempo para con mi problema, pero al parecer ya esta resuelto.

El problema

mRoman 10-08-2011 18:39:14

Asi es duilioisola con la direcciòn IP no copiaba nada....pero se la quitaba y efectivamente copiaba los archivos a mi disco duro.

mRoman 10-08-2011 18:44:27

El codigo final de la solucion....
 
este es el còdigo final para cualquier otro amigo forero que este en las mismas circuntancias.

Código Delphi [-]
 if cArchivoAsociado<>'' then
                begin
//                    CopyFile(PChar(cArchivoAsociado),Pchar('c:\FORMATOS\'+ExtractFileName(oDlgFile.FileName)),false);
                    if CopyFile( PChar(cArchivoAsociado),Pchar('\\'+ipServer+'\FORMATOS'+'\'+dsVentas.FieldByName('LECHER').AsString+  '_'+dsVentas.FieldByName('DIA').AsString+dsVentas.FieldByName('MES').AsString+dsVentas.FieldByName('  ANIO').AsString+ExtractFileExt(oDlgFile.FileName) ),FALSE) then
                    begin
                            cArchivoAsociado:='\\'+ipServer+'\FORMATOS'+'\'+dsVentas.FieldByName('LECHER').AsString+'_'+dsVentas  .FieldByName('DIA').AsString+dsVentas.FieldByName('MES').AsString+dsVentas.FieldByName('ANIO').AsStr  ing+ExtractFileExt(oDlgFile.FileName);
                            ShowMessage('El archivo se copió correctamente')
                    end else begin
                           ShowMessage(Variant(GetLastError));
                    end;

                end;

Lilauth 24-04-2013 20:33:30

Gracias Miguel Román por colgar el código final. Me caba de resolver medio problema :)

mRoman 25-04-2013 19:12:38

De nada...
 
Cita:

Empezado por Lilauth (Mensaje 459216)
Gracias Miguel Román por colgar el código final. Me caba de resolver medio problema :)

Que tal Lilauth....no tienes porque....para eso estamos en este foro. No dejes de consultar y de postear de vez en cuando con soluciones para los demas.

Que estes bien....

Bye.


La franja horaria es GMT +2. Ahora son las 03:40:19.

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