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

    [Delphi] Problema Query DB

    Ciao a tutti/e

    ho un piccolo grande problema...

    io ho un thread che, secondo una condizione, "decide" se far fare al programma principale una Query (tramite un'oggetto TQuery) ad un db Informix oppure no...

    il problema è che, una volta che si verifica la condizione, io chiudo il mio oggetto TQuery, setto la stringa SQL e una volta che lo riapro il db mi da questo errore:

    "General SQL error. Implicit connection not allowed after an explicit connection."

    se invece del thread uso un timer funziona! ma io devo usare per forza un thread... qualche idea??? Grazie.
    ti ricordi quando da piccoli andavamo in treno? io mettevo il culo fuori dal finestrino e tu la faccia e tutti ci chiedevano se eravamo gemelli...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Per funzionare correttamente, il componente TQuery deve essere associato ad un componente TDatabase, oppure avere un alias a cui fare riferimento per sapere su quale database deve compiere l'elaborazione contenuta nello statement SQL.

    Occorre fare molta attenzione nell'uso dei componenti in circostanze che coinvolgono un meccanismo multithreading, poichè la VCL non è stata progettata per gestire questo ambito.

    Cosa significa in termini pratici? Che utilizzando un componente Database per eseguire elaborazioni sia dal thread primario sia dal thread secondario potrebbe portare a risultati imprevisti poichè entrambi i thread contengono codice che esegue metodi del componente Database condiviso da entrambi i thread; siccome i thread eseguono in modo asincrono, l'uno potrebbe interrompere l'esecuzione di una procedura a metà per eseguire il proprio codice e viceversa, portando il componente in uno stato non integro.

    La soluzione ottimale sarebbe quella di utilizzare un secondo componente Database per il thread secondario avente le stesse proprietà utilizzate dal primario, in modo che le operazioni eseguite dai due thread non si ostacolino a vicenda.

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

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

  3. #3
    sei un grande...

    ascolta (abuso della tua intelligenza ihihih)... c'è un modo di copiare un oggetto?

    cioè io devo creare una copia uguale dell'oggetto della classe main... come fò? grazie mille
    ti ricordi quando da piccoli andavamo in treno? io mettevo il culo fuori dal finestrino e tu la faccia e tutti ci chiedevano se eravamo gemelli...

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Se lo aggiungi alla Object Repository (tasto destro sul form, voce di menu Add to Repository) puoi crearne quante copie vuoi selezionando l'oggetto dalla finestra che appare con la voce di menu [File|New|Other].

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

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

  5. #5
    Se potrà servire un giorno ad una persona lontana... ... ho trovato una soluzione carina carina...

    Nei thread c'è una funzione che si chiama Synchronize che permette di sincronizzare il mio Thread con il Main Thread, così da poter eseguire delle procedure dell'ultimo che vanno a modificare dei componenti dela VCL...

    Ciao ciao!!!!

    ti ricordi quando da piccoli andavamo in treno? io mettevo il culo fuori dal finestrino e tu la faccia e tutti ci chiedevano se eravamo gemelli...

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    E' una soluzione che non ti avevo suggerito poichè se esegui un metodo che richiede lungo tempo per essere portato a termine usando la Synchronize(), il programma rimarrà bloccato come se fosse stato richiamato direttamente alla pressione di un pulsante, quindi si perde il vantaggio dell'utilizzo di un thread secondario.

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

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

  7. #7
    Sì sono d'accordo con te, ma io ho dovuto modificare un programma già fatto e non potevo fare come mi dicevi tu (ti ringrazio lo stesso!)... quindi questa è stata una scelta piuttosto forzata! cmq funziona e mi sono tolto tanti sassolini dalle scarpe...

    Grazie e Ciao!!!!
    ti ricordi quando da piccoli andavamo in treno? io mettevo il culo fuori dal finestrino e tu la faccia e tutti ci chiedevano se eravamo gemelli...

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.