Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [Delphi - MySQL - Rave Reports] Database connection a MySQL in Rave Reports

    Buongiorno a tutti, leggendo un pò di documentazione di Rave Reports, sono venuto a conoscenza del metodo di connessione "Driver Data View": utilizzando Delphi 2010 ed avendo db MySQL ho pensato quindi di creare una connessione dbExpress e quindi richiamarla con una "Database Connection" in Rave.

    Qui sorge il problema...nel senso che impostando gli stessi parametri (ho già anche provato a copiare le dll nella dir Nevrona\Rave8\DataLinks) ottengo l'errore:

    Connection Error TDBXError - Unknown driver: MYSQL

    Sapete dirmi dove sbaglio o cosa manca?

    Grazie,
    Maurizio

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Una domanda: la connessione al database MySQL funziona nella tua applicazione?
    Per dirla in un altro modo, è solo il report che non riesce a collegarsi al DB?

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

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

  3. #3
    Ciao!

    Si, nell'applicazione tutto gira bene, di per se anche i report funzionano, ma con questo inconveniente: prendendo per esempio un'archivio fatture, ho creato un frame per la visualizzazione/gestione del documento; ogni volta creo un'istanza di questo frame e visualizzo la scheda; nel frame ho i componenti TDataSetProvider e TClientDataSet che si collegano al TSQLDataSet del datamodule; ho inoltre il componente TRvDataSetConnection ed ho creato il collegamento ai dati nel report mediante un Direct Data View.

    Se apro una sola scheda fatture, quindi ho un solo documento aperto, nessun problema perchè visualizzo correttamente i dati nel report: ma se apro 2 fatture o più (ogni scheda la apro come nuova pagina di un TPageControl) nel report si visualizzano sempre e solo i dati della prima scheda fatture aperte in ordine cronologico.

    E' per questo che pensavo di usare il metodo Driver Data View per gestire "indipendentemente" l'accesso ai dati dal report.

    La strada è quella giusta o c'è una soluzione differente per me sconosciuta?

    Grazie,
    Maurizio

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Il componente TRvDataSetConnection a quale DataSet è collegato?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Nel DataModule ho 2 TSQLDataSet, uno per il documento ed uno per le voci del documento.

    In ogni istanza del frame ho una serie TDataSetProvider, TClientDataSet e TRvDataSetConnection collegata ad ognuno dei TSQLDataSet.

    Quindi i 2 TRvDataSetConnection sono collegati ai 2 TClientDataSet.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Mco2983
    Nel DataModule ho 2 TSQLDataSet, uno per il documento ed uno per le voci del documento.
    Questo è giusto, perché i due TSQLDataSet ti consentono di eseguire le query per estrarre i dati.

    Originariamente inviato da Mco2983
    In ogni istanza del frame ho una serie TDataSetProvider, TClientDataSet e TRvDataSetConnection collegata ad ognuno dei TSQLDataSet.
    Il TDataSetProvider e il TClientDataSet sono collegati correttamente.

    Originariamente inviato da Mco2983
    Quindi i 2 TRvDataSetConnection sono collegati ai 2 TClientDataSet.
    Il TRvDataSetConnection è collegato al ClientDataSet oppure al SQLDataSet: se si tratta del primo, è corretto, altrimenti va modificato.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #7
    Ok, quindi dovrei essere nella situazione corretta perchè ogni TRvDataSetConnection è collegato ad un TClientDataSet.

    Sapresti dirmi come mai però se ho più istanze aperte del frame quando eseguo il report mi considera sempre solo la prima in ordine di apertura (es. se apro le ft n. 8, 15 e 23 e faccio un'anteprima di stampa vedo sempre e solo i dati della n. 8)?

    Grazie,
    Maurizio

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Mco2983
    Sapresti dirmi come mai però se ho più istanze aperte del frame quando eseguo il report mi considera sempre solo la prima in ordine di apertura (es. se apro le ft n. 8, 15 e 23 e faccio un'anteprima di stampa vedo sempre e solo i dati della n. 8)?
    E' possibile che il DataSet sia già aperto quando esegui l'operazione, e che quindi mantenga i dati acquisiti precedentemente.

    Assicurati di fare un Close, o di mettere la proprietà Active a False prima di reimpostarla a True.

    Occorre poi analizzare come selezioni la fattura specifica quando devi reperirne i dati.

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

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

  9. #9
    Per selezionare ogni singola fattura, ho impostato un Param nel TSQLDataSet (è una query del tipo "SELECT * FROM WHERE CampoID = arametro"): alla creazione dell'istanza del frame, imposto il parametro quindi attivo il TClientDataSet.

    Per cui se tipo apro 3 fatture, ho 3 istanze aperte e di conseguenza 3 istanze del TClientDataSet aperte: è questo il problema? Come potrei agire in alternativa?

    Grazie!
    Maurizio

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Mco2983
    Per selezionare ogni singola fattura, ho impostato un Param nel TSQLDataSet (è una query del tipo "SELECT * FROM WHERE CampoID = arametro"): alla creazione dell'istanza del frame, imposto il parametro quindi attivo il TClientDataSet.

    Per cui se tipo apro 3 fatture, ho 3 istanze aperte e di conseguenza 3 istanze del TClientDataSet aperte: è questo il problema? Come potrei agire in alternativa?
    Diciamo che come implementazione la trovo molto pericolosa, soprattutto se all'interno dei Frame applichi addirittura delle modifiche: nel momento in cui vai ad aggiornare la fattura originale, potresti avere l'identificativo della fattura precedente, facendo fallire l'operazione.

    In questo caso, secondo me, è bene dotare il Frame del proprio TSQLDataSet specializzato, lasciando nel DataModule i DataSet più generici.

    Può darsi che questo risolva automaticamente anche il problema riscontrato sui report. In caso negativo, ciascun report potrebbe avere un proprio DataSet su cui lavorare, magari un TSimpleDataSet (per evitare di disporre di nuovo tutta la terna di componenti DataSet/Provider/CDS solo per la stampa).

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

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

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.