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 15-07-2006
Vinicio Vinicio is offline
Miembro
 
Registrado: jul 2006
Posts: 16
Poder: 0
Vinicio Va por buen camino
Problema copiando Archivo de BD en Paradox... T.T

Hola Colegas Amigos...

Estoy haciendo un wizzard para entrenamientos dinamicos en delphi , se oye muy aca pero la verdad es algo demasiado sencillo, el problema k tengo es a la hora de copiar un archivo de base de datos de paradox a otra carpeta... el archivo si se copia pero el contenido de la tabla no, es decir los datos de la misma, se copia el archivo pero sin registros de datos!!!! y en la ubicacion original si estan los datoss...cabve mencionar k el proceso de copiado lo hago en tiempo de ejecucion al termonar de llenar la tabla.. anexo el codigo para ver si alguno me puede dar una opinon o si saben por ke causa motivo razon o circunstancia se presenta este problema k me tiene my agoviadoo....T.T
de antemano muchas gracias...

codigo delphi:

if Scene=2 then
begin
U_DM.DataModule1.Table1.Open;
U_DM.DataModule1.Table1.Close;
CopyFile(PChar('C:\wizzard\Molde.db'),PChar('C:\'+Nombre_Carpeta+'\'+Nombre_Carpeta+'.db'),TRUE)
end
Else
Scene:=Scene+1;
limpia();
end;
Responder Con Cita
  #2  
Antiguo 15-07-2006
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
Dices que copias la tabla al terminar de llenarla así que supongo que en un principio está vacía y posiblemente al momento de copiar el archivo en disco aún no se termina de grabar. Quizá usando Table1.FlushBuffers te ayude.

// Saludos
Responder Con Cita
  #3  
Antiguo 15-07-2006
Vinicio Vinicio is offline
Miembro
 
Registrado: jul 2006
Posts: 16
Poder: 0
Vinicio Va por buen camino
Nu creo k sea eso >_<

jeje no creo k el problema sea eso, lo kpasa es k mando a insertar un registro en la tabla cada vez k e crea una escena, son 30 escenas en total, y cuando se termina la ultima escena entonces es donde se supone debo copiar el archivo de BD a otra carpeta, la base de datos en su ubicacion original si esta llena, es decir si tiene todos los datos k anteriormente le inserte.... el problema es k cuando la copio los datos no se copian es decir solo se copia la tabla vacia...!! T.T no se k pueda ser ...:S
Lei en otro mensaje de un pr0oblema parecido donde decial algo de cerrar el archivo antes de copiarlo, mencionaban una funcion LockFile, pero nu se como usarla si alguien sabe porfavor diganme... u otra solucion cualkiera k esta sea
Muchas gracias por tu respuesta men XD...
seguire intentando...
Responder Con Cita
  #4  
Antiguo 15-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿pero lo has probado?... decir "no creo que sea eso" no es una buena respuesta para alguien que está intentando ayudarte.

Yo también creo que vaya por esa línea el problema, pero ¿para qué voy a darte una respuesta si "tu crees que no es eso"?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 15-07-2006
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
CopyFile copia un archivo cualquiera, independientemente de si es una tabla de paradox o la música de mi compadre. Así que si no hay registros en la copia es porque no se está copiando el archivo que pensamos o bien porque los cambios aún no se guardan, para lo cual serviría el FlushBuffers. Pero el caso es que no hay manera que CopyFile copie una tabla sin registros.

// Saludos
Responder Con Cita
  #6  
Antiguo 15-07-2006
Vinicio Vinicio is offline
Miembro
 
Registrado: jul 2006
Posts: 16
Poder: 0
Vinicio Va por buen camino
Hola...

Hola amigos..

Primero k nada una disculpa por la expreson "Creo k no es eso", siendo sincero kreo k no fue la correcta, y una vez mas siendo sincero no eh probado el FlushBuffer, lo k pasa es k el proyecto esta en otra parte de donde estoy ahora...
Tambien encontre esto k kreo k se relaciona con mi problema en otro post de este mismo foro...
Julià T. vbmenu_register("postmenu_11653", true);
Conde nado
Fecha de Ingreso: May 2003
Localización: en el teclado
Mensajes: 311


El problema de que se rompan los archivos puede ser que en el momento que estes copiando un archivo *.db o qualquier otro que sea tabla o base de datos, esté abierto por alguna aplicación y no se haya volcado la información que contiene en la memória de la aplicación a la tabla/base de datos.

Los ficheros los debes copiar cuando las tablas esten completamente inactivas, o bien con un Bachmove cuando estén en qualquier estado.

Quisiera saber k opinan, y si saben algo de el llamado "Bachmode", por k siendo sincero la tabla de paradox en su ubicacion original si esta llena, lo se por k cada vez k inserto la reviso y si estan los datos , es mas antes de copiar el archivo en al otra carpeta reviso y si esta llena...no se si sera cuestion de cerrar el archivo antes de copiarlo o algo asi....
Ustedes k opinan???

y una vez mas una disculpa, no fue mi intencion expresarme asi, de hecho hace ya muhco tiempo k consulto este foro y siempre me ayuda...
estoy muy agradecido de k existan este tipo de foros pues a nosotros los programadores nos es de mucha ayuda

De antemano gracias...
Responder Con Cita
  #7  
Antiguo 16-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Siguiendo la línea de roman, usa FlushBuffers en el AfterPost, despues cierra la tabla y la copias.

Si aún sigue dando fallos, puedes ir por la caché de escritura de windows en segundo plano, por defecto está activa y no fuerza la escritura a disco.

Acabo de subir el truco 352 que permite ver el estado de la caché en windows y desactivarla.

En cuanto al TBatchMove, es un método del TTable, simplemente tienes que darle un Dataset con los datos a insertar, y el método de inserción, (la tabla de destino debe existir, es decir, usa el Database desktop para copiarla, y despues borra sus registros):

En el siguiente ejemplo, creo una Qry seleccionando los datos, y despues se añaden a la tabla tblFacturasH (histórico de facturas).

Ten cuidado con el orden al insertar registros si usas relaciones Master-Detail, como siempre, primero se inserta en el Maestro y despues en el Detalle:
Código Delphi [-]

    qry := Tquery.Create(NIL);
    try
      qry.DatabaseName := DTM.tblFacturas.DatabaseName;
      qry.SessionName  := DTM.tblFacturas.SessionName;
      qry.SQL.Clear;
      qry.SQL.Add('select * from  Factura where nfactura = ' + QuotedStr('22235') + ';');
      qry.Prepare;
      qry.Open;
      if not qry.IsEmpty then
        dtmH.tblFacturasH.BatchMove(qry, batAppendUpdate); 
// pasamos la factura desde el qry al tblFacturasH
      qry.Close;
    finally
      FreeAndNil(qry);
    end; // finally

Estudia los parámetros que lleva el BatchMove para usar el que necesites.

Saludos y suerte.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 16-07-2006 a las 10:28:00.
Responder Con Cita
  #8  
Antiguo 17-07-2006
Vinicio Vinicio is offline
Miembro
 
Registrado: jul 2006
Posts: 16
Poder: 0
Vinicio Va por buen camino
Hola...

Hola amigos...

Ya intente con el Flushbuffer en el metodo afterpost del query y de ahi cierro la tabla e inbtento copiar con copyfile, pero aun sigue copiandome el archivo vacio, y los datos solo se kedan en su ubicacion original...

Tambien intente con el batchmove, pero con este necesito tener una tabla creada en el datamodule y estipulado el alias etc etc.. lo k yo keria o necesitaba era solo copiar un archivo .db de una ubicacion a otra en tiempo de ejecucion...

E intentado copiar el archivo de otra forma y me dice k no se peude copiar por k este esta en uso por otra aplicacion...

Habia leido tambien en este foro k una posible solucion seria hacer un lockfile al archivo .db, copiarlo y despues darle un unlock, pero no se usar estas funciones...

Alguien tiene otra idea...
Yo por lo pronto seguire intentano...
Responder Con Cita
  #9  
Antiguo 18-07-2006
Vinicio Vinicio is offline
Miembro
 
Registrado: jul 2006
Posts: 16
Poder: 0
Vinicio Va por buen camino
Por fin resulto!!!

Je je je... Por fin me salio esto amigos, intente de todo, y al final una combinacion de todas sus sugerencias fue lo k me ayudo, estoy muy agradecido y muchas gracias a todos los k me tubieron paciencia y me mandaron sus sugerencias, a final termine utilizando el BatchMove el flush buffer

Muchas 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
Problemas con Archivo PARADOX.DIR Coco_jac Varios 1 14-07-2006 21:48:26
Archivo (VAL) Paradox david duarte Conexión con bases de datos 7 04-10-2005 13:35:07
Saber windows esta copiando o elimniando archivo mauriciofox API de Windows 0 25-02-2005 05:21:14
Problema copiando Aplicacion en Delphi 4 throtmax Conexión con bases de datos 1 09-02-2004 14:47:24
Copiando archivos cone220 API de Windows 3 23-06-2003 14:43:28


La franja horaria es GMT +2. Ahora son las 14:13:41.


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