Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [DELPHI 2010] Dimensione file allocato

    ebbene sì, ancora io

    La situazione è la seguente:

    Form1.q1ZPRFILE.Active := True;
    Form1.q1ZPRFILE.SaveToFile(Form1.NomeFile);

    dove Form1.q1ZPRFILE è un TBlobField di un oggetto TSQLQuery.

    il mio problema è questo:

    il SaveToFile può durare parecchio, anche svariati minuti se chi si collega al DB è in remoto via internet e io avrei bisogno di sapere a che punto è del DL.

    il SF viene eseguito in un thread apposito quindi il programma che lo ha eseguito è in grado di operare e io speravo che andando ad analizzare ogni tot tramite un TTimer la dimensione del file che si sta salvando con un

    fsFile := TFileStream.Create(NomeFile, fmOpenRead or fmShareDenyNone);
    try
    Result := fsFile.Size;

    potessi vedere il progresso ma il programma mi risponde picche dicendo che (ovviamente) il file è allocato da un altro processo.

    Come Posso fare?

  2. #2
    quì sono ancora arenatissimo

    nessuna idea?

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Re: [DELPHI 2010] Dimensione file allocato

    Originariamente inviato da FengHuang
    il SaveToFile può durare parecchio, anche svariati minuti se chi si collega al DB è in remoto via internet e io avrei bisogno di sapere a che punto è del DL.
    Non mi pare una buona idea collegarsi tramite Internet al database, sia per una questione di sicurezza che di performance, a prescindere dal database utilizzato.

    Meglio predisporre un server che si colleghi "localmente" al database e restituisca - via Web Service, JSON, socket TCP, ecc. - il file richiesto; invocando il servizio, ad esempio con Indy Components, si può monitorare il processo di download (perché in quel caso è un *vero* download).

    Originariamente inviato da FengHuang
    io speravo che andando ad analizzare ogni tot tramite un TTimer la dimensione del file che si sta salvando [...] ma il programma mi risponde picche dicendo che (ovviamente) il file è allocato da un altro processo.
    Mentre stai salvando il file, oltre a risultare questo "bloccato", è probabile che fino a quando non viene chiuso (sbloccato) al termine della procedura, questo risulti anche di dimensione zero.

    Secondo me, dovresti strutturare in modo diverso questa architettura.

    Se possiedi una versione di Delphi 2010 superiore alla Professional, ad esempio, potresti fare uso di DataSnap.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4

    Re: Re: [DELPHI 2010] Dimensione file allocato

    Originariamente inviato da alka
    Non mi pare una buona idea collegarsi tramite Internet al database, sia per una questione di sicurezza che di performance, a prescindere dal database utilizzato.

    Meglio predisporre un server che si colleghi "localmente" al database e restituisca - via Web Service, JSON, socket TCP, ecc. - il file richiesto; invocando il servizio, ad esempio con Indy Components, si può monitorare il processo di download (perché in quel caso è un *vero* download).
    in origine era così in effetti poi abbiamo avuto tutta un'altra serie di problemi e dopo svariati tentativi son passato alla connessione e DL via DB...
    diciamo che per ora sono abbastanza "vincolato" a fare così anche se non è proprio splendido...


    Originariamente inviato da alka Mentre stai salvando il file, oltre a risultare questo "bloccato", è probabile che fino a quando non viene chiuso (sbloccato) al termine della procedura, questo risulti anche di dimensione zero.
    confermo, quantomeno, se chiedo le proprietà a wincozz durante il DL mi restituisce 0...

    Originariamente inviato da alka
    Se possiedi una versione di Delphi 2010 superiore alla Professional, ad esempio, potresti fare uso di DataSnap
    Ovvero? io ho una Enterprise...

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da FengHuang
    diciamo che per ora sono abbastanza "vincolato" a fare così anche se non è proprio splendido...
    In tal caso, devi agire manualmente sullo Stream da cui scarichi i dati: invece di fare un salvataggio diretto nello Stream associato al file, eseguire delle Read/Write per copiare i dati "a blocchi" rendicontando poi nell'interfaccia quanti byte hai trasferito, fino al loro esaurimento.

    Se utilizzi i metodi Load/Save, l'operazione sarà "atomica", cioè gestirà internamente questo processo senza consentirti di conoscerne lo stato.

    Originariamente inviato da FengHuang
    Ovvero? io ho una Enterprise...
    Vedi la documentazione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Originariamente inviato da alka
    Se utilizzi i metodi Load/Save, l'operazione sarà "atomica", cioè gestirà internamente questo processo senza consentirti di conoscerne lo stato.
    Direi che se non c'è deroga a questo status-quo mi hai risposto

    o passo al read-write via stream oppure carico una progress-bar ciclica giusto per far vedere l'attività e sto così.

    Grazie per ora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.