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

    [Delphi] Query da BDE a dbExpress

    Ciao a tutti...
    ho una query piuttosto complessa:

    codice:
    SELECT Aree.CODICE, Aree.DESCRIZIONE, Sezioni.CODICE, Sezioni.DESCRIZIONE, Argomenti.CODICE, Argomenti.DESCRIZIONE, Punticontrollo.CODICE, Punticontrollo.DESCRIZIONE, Aree.ID_AREA, Sezioni.ID_SEZ, Argomenti.ID_ARG, Punticontrollo.ID_PUNTI, Aree.PESO, Aree.VALOREDIRIFERIM, Sezioni.PESO, Sezioni.VALOREDIRIFERIM, Argomenti.PESO, Argomenti.VALOREDIRIFERIM, Punticontrollo.PESO, Punticontrollo.VALOREDIRIFERIM
    FROM AREE Aree
       INNER JOIN SEZIONI Sezioni
       ON  (Aree.ID_AREA = Sezioni.ID_AREA)  
       INNER JOIN ARGOMENTI Argomenti
       ON  (Argomenti.ID_SEZ = Sezioni.ID_SEZ)  
       INNER JOIN PUNTICONTROLLO Punticontrollo
       ON  (Punticontrollo.ID_ARG = Argomenti.ID_ARG)  
    ORDER BY Aree.CODICE, Sezioni.CODICE, Argomenti.CODICE, Punticontrollo.CODICE
    Sto convertendo un'applicazione con database GDB - Interbase con BDE in un'applicazione con i componenti dbExpress.

    Il problema arriva all'esecuzione di questa query... possibile che dbExpress mi restituisca solo 14 record (contro le 2600 e passa di BDE)?
    Stefano

  2. #2
    Nello specifico vi spiego qual è il problema...

    codice:
      private
        ID_BASE, i, maxLungh, tipoGlobale: integer;
        totString, totValRif, totPesi: array of String;
    
    [...]
    
    procedure TfReportQuestionarioCompleto.Stampa();
    var
     s: integer;
     tempStringArea, tempStringSezione, tempStringArgomento, tempStringPunto: string;
    begin
     qTotDatabase.Close;
     qTotDatabase.Open;
     SetLength(totString, qTotDatabase.RecordCount * 2);
     SetLength(totValRif, qTotDatabase.RecordCount * 2);
     SetLength(totPesi, qTotDatabase.RecordCount * 2);
     s := 0;
     tempStringArea := '';
     tempStringSezione := '';
     tempStringArgomento := '';
     tempStringPunto := '';
     while not qTotDatabase.EOF do
     begin
      if (qTotDatabase['CODICE'] <> tempStringArea) then
      begin
       totString[s] := 'A'+ qTotDatabase['codice'] +'  '+ UpperCase(qTotDatabase['descrizione']);
       totValRif[s] := IntToStr(qTotDatabase['valorediriferim']);
       totPesi[s] := IntToStr(qTotDatabase['peso']);
       tempStringArea := qTotDatabase['codice'];
      end else
      if (qTotDatabase['CODICE_1'] <> tempStringSezione) then
      begin
       totString[s] := 'S  '+ qTotDatabase['CODICE_1'] +'  '+ qTotDatabase['DESCRIZIONE_1'];
       totValRif[s] := String(qTotDatabase['VALOREDIRIFERIM_1']);
       totPesi[s] := String(qTotDatabase['PESO_1']);
       tempStringSezione := qTotDatabase['CODICE_1'];
      end else
      if (qTotDatabase.FieldByName('CODICE_2').AsString<>tempStringArgomento) then
      begin
       totString[s] := 'R    '+qTotDatabase.fieldByName('codice_2').AsString+'  '+qTotDatabase.fieldByName('DESCRIZIONE_2').AsString;
       totValRif[s] := qTotDatabase.FieldByName('VALOREDIRIFERIM_2').AsString;
       totPesi[s] := qTotDatabase.FieldByName('PESO_2').AsString;
       tempStringArgomento := qTotDatabase.fieldByName('CODICE_2').AsString;
      end else
      if (qTotDatabase.FieldByName('CODICE_3').AsString <> tempStringPunto) then
      begin
       totString[s] := 'P      '+qTotDatabase.FieldByName('CODICE_3').AsString+'  '+qTotDatabase.fieldByName('DESCRIZIONE_3').AsString;
       totValRif[s] := qTotDatabase.FieldByName('VALOREDIRIFERIM_3').AsString;
       totPesi[s] := qTotDatabase.FieldByName('PESO_3').AsString;
       tempStringPunto := qTotDatabase.FieldByName('CODICE_3').AsString;
       qTotDatabase.Next;
      end else qTotDatabase.Next;
      Inc(s);
     end;
     maxLungh := s;
     mainString.Caption := 'CIAO';
     Preview;
    end;
    Questo codice è inserito in un Quick Report e funzionava alla perfezione con BDE... i record restituiti erano corretti. Ora invece ho un sacco di problemi e spesso mi viene restituito un Invalid pointer operation.

    Avete qualche idea? :master:
    Stefano

  3. #3
    Giovini programmatori, prestate aiuto ad un giovine programmatore
    Stefano

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Gli errori che riporti sono troppo vaghi e il problema andrebbe affrontato un po' alla volta. Non sempre il porting può essere portato a termine con tale disinvoltura senza sapere tutti i dettagli della tecnologia utilizzata.

    Su quali righe vengono riportati gli errori?
    Affrontane uno alla volta, isolando il codice relativo e verificando la configurazione dei componenti e la query eseguita: non posso prendere tutto il codice che hai postato e analizzarlo riga per riga alla ricerca di un'eventuale errore, no?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Yes
    Se ti va partiamo dalla query.
    Eseguendo semplicemente la Query, con BDE e i relativi componenti il risultato è di più di 2600 record, mentre con dbExpress di soli 14 record.

    Secondo te da che cosa potrebbe essere motivato?
    Stefano

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da peste1
    Eseguendo semplicemente la Query, con BDE e i relativi componenti il risultato è di più di 2600 record, mentre con dbExpress di soli 14 record.
    Secondo te da che cosa potrebbe essere motivato?
    Quale componente usi per l'esecuzione della query?
    La query viene definita tramite codice?
    Qual è il codice?

    Dettagli, dettagli, dettagli...

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

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

  7. #7
    Il componente è la TSQLQuery di dbExpress.
    La Query è impostata direttamente nel controllo anche se ho provato direttamente dal codice (il risultato è lo stesso).
    Stefano

  8. #8
    Alkino mio aiutami
    Stefano

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 © 2025 vBulletin Solutions, Inc. All rights reserved.