Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2015
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 21
bitbow Va camino a la fama
Busqueda recursiva

Debes realizar la busqueda recursiva de archivos, hay muchos ejemplos de esto.

Enalces foro:
http://www.clubdelphi.com/foros/showthread.php?t=7181
http://www.clubdelphi.com/foros/showthread.php?t=86325

Saludos.
Responder Con Cita
  #2  
Antiguo 22-03-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Bueno pues use la funcion de neftali:

Código Delphi [-]
 procedure FindFiles(StartDir, FileMask: string; recursively: boolean; var FilesList: TStringList);
  const
    MASK_ALL_FILES = '*.*';
    CHAR_POINT = '.';
  var
    SR: TSearchRec;
    DirList: TStringList;
    IsFound: Boolean;
    i: integer;
  begin
    if (StartDir[length(StartDir)] <> '\') then begin
      StartDir := StartDir + '\';
    end;
  
    // Crear la lista de ficheos en el directorio StartDir (no directorios!)
    IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
    // MIentras encuentre
    while IsFound do  begin
      FilesList.Add(StartDir + SR.Name);
      IsFound := FindNext(SR) = 0;
    end;
  
    FindClose(SR);
  
    // Recursivo?
    if (recursively) then begin
      // Build a list of subdirectories
      DirList := TStringList.Create;
      // proteccion
      try
        IsFound := FindFirst(StartDir + MASK_ALL_FILES, faAnyFile, SR) = 0;
        while IsFound do
        begin
          if ((SR.Attr and faDirectory) <> 0) and
            (SR.Name[1] <> CHAR_POINT) then
            DirList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
        end;
        FindClose(SR);
  
        // Scan the list of subdirectories
        for i := 0 to DirList.Count - 1 do
          FindFiles(DirList[i], FileMask, recursively, FilesList);
      finally
        DirList.Free;
      end;
    end;
  end;

Ahora bien mi aplicacion de terminal de puesto de venta tiene un modulo con un edit con la cantidad de ticket(1 por archivo) y un progress bar para programar despues.

El caso es que en el evento OnShow del form llamo a

Código Delphi [-]
procedure TForm10.FormShow(Sender: TObject);
var
StartDir, FileMask: string;
recursively: boolean;
FilesList: TStringList;
x,cant:integer;
begin

 StartDir:=ExtractFilePath(Application.ExeName) + 'tickets';

FindFiles(StartDir, FileMask, recursively, FilesList);




end;

pasandole los parametros Stardir, pero debo crear el objeto fileslist?

Luego debo agregar obviamente el codigo que quiero se ejecute al encontrar un archivo dentro del while.
Código Delphi [-]
procedure FindFiles(StartDir, FileMask: string; recursively: boolean; var FilesList: TStringList);
  const
    MASK_ALL_FILES = '*.*';
    CHAR_POINT = '.';
  var
    SR: TSearchRec;
    DirList: TStringList;
    IsFound: Boolean;
    i,x: integer;
    a:TServerMethods1Client;
    l:integer;
    fechae,horae,nombrearchivo,nombrecopia:string;
    cantidad,importe,preciou,efectivo,vueltoouble;
    idc,ids,idprodu,numero:Integer;
    nuevoticket:string;
  begin

    if (StartDir[length(StartDir)] <> '\') then begin
      StartDir := StartDir + '\';
    end;
    FilesList.Create;
 //    FileMask:='.xml'
    // Crear la lista de ficheos en el directorio StartDir (no directorios!)
    IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
    // MIentras encuentre

    while IsFound do  begin

      FilesList.Add(StartDir + SR.Name);

      IsFound := FindNext(SR) = 0;

    end;

     if FilesList.Count<>0 then
      begin
         for  x:=FilesList.Count - 1 downto 0 do
           begin

                  Form10.Etick.Text:=IntToStr(FilesList.Count);
                  nombrearchivo:=SR.Name;
                  ShowMessage(nombrearchivo);
                  ClientModule1.cdsticketpendiente.LoadFromFile(nombrearchivo);
                  nombrecopia:=ExtractFileName(Application.ExeName) + 'ticketscopia\' + nombrearchivo;
                  CopyFile(Pchar(nombrearchivo),Pchar(nombrecopia),True);
                  idc:=1;
                  ids:=1;
                  numero:=1;
                  importe:=ClientModule1.cdsticketpendiente.FieldByName('total').Value;
                  fechae:=ClientModule1.cdsticketpendientefechae.AsString;
                  horae:=ClientModule1.cdsticketpendientehorae.AsString;
                  efectivo:=ClientModule1.cdsticketpendienteefectivo.AsFloat;
                  vuelto:=efectivo - importe;
                  a.nuevoticket(numero,ids,idc,importe,efectivo,vuelto,fechae,horae);

           end;
      end;
      FilesList.Destroy;

    // Recursivo?
    if (recursively) then begin
      // Build a list of subdirectories
      DirList := TStringList.Create;
      // proteccion
      try
        IsFound := FindFirst(StartDir + MASK_ALL_FILES, faAnyFile, SR) = 0;
        while IsFound do
        begin
          if ((SR.Attr and faDirectory) <> 0) and
            (SR.Name[1] <> CHAR_POINT) then
            DirList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
        end;
        FindClose(SR);

        // Scan the list of subdirectories
        for i := 0 to DirList.Count - 1 do
          FindFiles(DirList[i], FileMask, recursively, FilesList);
      finally
        DirList.Free;
      end;
    end;
  end;
Responder Con Cita
  #3  
Antiguo 23-03-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: 19.441
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
Hola.
No entiendo muy bien lo que estás haciendo con el procedimiento.

Justo está hecho en un procedimiento para que puedas utilizarlo donde quieras y reaprovecharlo. Si modificas el procedimiento y le añades cosas como estas ya no será "reaprovechable":

Código Delphi [-]
    Form10.Etick.Text:=IntToStr(FilesList.Count);
    nombrearchivo:=SR.Name;
    ShowMessage(nombrearchivo);
    ClientModule1.cdsticketpendiente.LoadFromFile(nombrearchivo);
    nombrecopia:=ExtractFileName(Application.ExeName) + 'ticketscopia\' + nombrearchivo;
    ...

Utiliza el procedimiento para buscar todos los ficheros que hay en el directorio que cumplen unas condiciones. Una vez realizada la búsqueda, utiliza un bucle para hacer el trabajo que necesites... (y coloca tu código ahí)

Código Delphi [-]
  // Crear la lista que vamos a utilizar
  TS := TStringList.Create();
  // Buscar ficheros en disco.
  FindFiles(pathDeBusqueda, '*.xml', False, TS); 
  // Para cada fichero encontrado, realizamos el trabajo necesario...
  for i := 0 to (TS.Count - 1) do begin
    // Extraer nombre del fichero. en TS[i] está el path completo  
    fName := ExtractFileName(TS[i]);
    ....
    
    AQUI HAZ LO QUE QUIERAS CON EL FICHERO....
    
    
  end;
  // liberar la lista
  TS.Free;
__________________
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
  #4  
Antiguo 23-03-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Te comento que logre cargar los ficheros xml en el dataset, pero en el xml el metodo savetofile no guarda los internalCalc y los Aggregates, por lo que el dataset ticketspendientes por ej debe contener los mismos campos que el de ticket que se usa a diario.

con la diferencia de que el subtotal de cada registro de compra: precio * cantidad debe ser recalculado, luego mi total si es aggregate.:

Código Delphi [-]
FindFiles(pathDeBusqueda, '*.xml', False, TS);
  Etick.Text:=IntToStr(TS.Count);
  // Para cada fichero encontrado, realizamos el trabajo necesario...
  for i := 0 to (TS.Count - 1) do begin
    // Extraer nombre del fichero. en TS[i] está el path completo
    fName := pathDeBusqueda + ExtractFileName(TS[i]);
    if (ClientModule1.SQLConnection1.Connected) then
     begin

          
          with ClientModule1.cdsticketpendiente do
            begin

              LoadFromFile(fname);
              Open;

              First;
              while not Eof do

                begin
                Edit;
                FieldByName('subtotal').AsFloat:=FieldByName('precio').AsFloat * FieldByName('cantidad').AsFloat;
                 Post;
                 Next;
                end;

              end;

          importe:=ClientModule1.cdsticketpendientetotal.Value;
          fechae:=ClientModule1.cdsticketpendientefechae.AsString;

          horae:=ClientModule1.cdsticketpendientehorae.AsString;

          efectivo:=ClientModule1.cdsticketpendienteefectivo.AsFloat;
          vuelto:=efectivo - importe;


          a:=TServerMethods1Client.Create(ClientModule1.SQLConnection1.DBXConnection);
          a.nuevoticket(numero,ids,idc,importe,efectivo,vuelto,fechae,horae);
          ClientModule1.cdsticketpendiente.EmptyDataSet;

           ClientModule1.cdsticketpendiente.Close;
     TS.Free;

  end
Me dice : list index of bounds(1)
Debo cargar los otros campos?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como enviar mensaje usando BB PIN elvymena Internet 0 24-11-2010 18:05:02
Enviar documento usando el fax de Windows epuigdef Varios 5 17-10-2008 08:55:27
enviar un correo usando php skinnerpro PHP 1 19-10-2007 22:33:41
Ayuda para enviar pdf por fax, usando Delphi 7 manolop Varios 6 15-03-2007 12:48:19
Enviar fax usando el fax de windows 2000 server DrMatasanos Varios 0 21-05-2003 10:17:37


La franja horaria es GMT +2. Ahora son las 15:49:50.


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