Newsgroup: it.comp.lang.delphi
Titolo: TADOQuery & Stringa SQL

Ciao a tutti,
durante la costruzione della mia stringa sql su un oggetto TADOQuery,
ad un determinato punto mi si alza un'eccezione stranissima...
Premetto che la query durante la costruzione non è collegata ad alcun
database, e quindi logicamente è anche chiusa.
Di seguito il codice :
myQuery.SQL.Clear;
myQuery.SQL.Add('SELECT ORDINI_CLIENTI.OTPRG, ORDINI_CLIENTI.OTDTO,
                 ORDINI_CLIENTI.OTDTC, ');
myQuery.SQL.Add(' ORDINI_CLIENTI.OTCCL, CLIENTI.CLCOD, CLIENTI.CLRAG,
');
myQuery.SQL.Add(' SUM(DETTAGLIO_ORDINI_CLIENTE.ODPRZ *
                  DETTAGLIO_ORDINI_CLIENTE.ODQTA)');
myQuery.SQL.Add(' SUM(DETTAGLIO_ORDINI_CLIENTE.ODPRZ *
                  DETTAGLIO_ORDINI_CLIENTE.ODQTA - ');
myQuery.SQL.Add('  ((DETTAGLIO_ORDINI_CLIENTE.ODPRZ *
                   DETTAGLIO_ORDINI_CLIENTE.ODQTA) * ');
myQuery.SQL.Add('       DETTAGLIO_ORDINI_CLIENTE.ODSC1 / 100) - ');
myQuery.SQL.Add('  ((DETTAGLIO_ORDINI_CLIENTE.ODPRZ *
                     DETTAGLIO_ORDINI_CLIENTE.ODQTA) * ');
myQuery.SQL.Add('       DETTAGLIO_ORDINI_CLIENTE.ODSC2 / 100) - ');
myQuery.SQL.Add('  ((DETTAGLIO_ORDINI_CLIENTE.ODPRZ *
                   DETTAGLIO_ORDINI_CLIENTE.ODQTA) * ');
myQuery.SQL.Add('       DETTAGLIO_ORDINI_CLIENTE.ODSC3 / 100) - ');
myQuery.SQL.Add('  ((DETTAGLIO_ORDINI_CLIENTE.ODPRZ *
                   DETTAGLIO_ORDINI_CLIENTE.ODQTA) * ');
myQuery.SQL.Add('       DETTAGLIO_ORDINI_CLIENTE.ODSC4 / 100) ) AS ');
myQuery.SQL.Add('  (DETTAGLIO_ORDINI_CLIENTE.ODABB) ');
//appena eseguo l'istruzione successiva si alza l'eccezione
myQuery.SQL.Add('  ) AS TOT_ORD ');
myQuery.SQL.Add('   FROM (ORDINI_CLIENTI LEFT JOIN
DETTAGLIO_ORDINI_CLIENTE ');
myQuery.SQL.Add(' ON ORDINI_CLIENTI.OTPRG =
DETTAGLIO_ORDINI_CLIENTE.ODPRG)
                  LEFT JOIN ');
myQuery.SQL.Add(' CLIENTI ON ORDINI_CLIENTI.OTCCL = CLIENTI.CLCOD ');
myQuery.SQL.Add(' GROUP BY OTPRG, OTDTO, OTDTC, ');
myQuery.SQL.Add('          OTCCL, CLCOD, CLRAG');
Di seguito l'eccezione :
---------------------------
Debugger Exception Notification
---------------------------
Project STORM.exe raised exception class EAccessViolation with message
'Access violation at address 1B041FC6 in module 'msjet40.dll'. Read of
address 0005242E'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help
---------------------------
Ho provato a selezionare la stringa SQL e portarla direttamente da
object inspector nella query, e funziona...
Riesco persino ad eseguire la query.
Qualcuno può aiutarmi?
Ciao
Rino

crea una tstringlist e scrivici la query.
Poi associ alla prop sql la text della tstringlist e vedi che succede.
Domanda
 xche ricreare lo statement ogni volta? non vedo parti di essa dove
assegni parametri dati dall'utente.
Cioè, se hai una form nella quale l'utente imposta dei dati e poi li
usi per creare dinamicamente una query ok.
Ma se è sempre la stessa, a cosa serve? Forse la tua app è troppo
veloce a interrogare il db e ti serve rallentarla?
AS
AS

ti ho postato solo la parte della query che mi interessa,
la prossima volta forse.... posterò tutti il programma, per evitare
confusione ;-).....
A parte gli scherzi.... io ora provo, solo che continuo a non capire
perchè non funziona così.... non ci vedo nulla di diverso dalle altre
miliardi
di query che ho fatto fino ad oggi.....
Ciao
Rino

 miliardi di query che ho fatto fino ad oggi.....
bhe, se ci sbatto sopra la testa e non ottiengo niente io provo a fare
qualcosa di verso.
E' inutile eseguire 100 volte lo stesso codice, vedere 100 volte una AV
e non introdurre una variante se pur piccola per vedere cosa succede.
Per caso ci sono di mezzo delle dll?
Il datamodule che contiene la query è istanziato? Lo hai in
AutoCreate?
AS

 miliardi di query che ho fatto fino ad oggi.....
E non hai ancora guardato tutto: la cosa piů bella č che se scrivi la 
query incriminata su una sola riga, scrivendo il tutto in una super 
stringa e indicandola poi come testo della query, l'access violation non 
ti viene piů sollevata... (a volte č capitato anche a me :-()
Prova magari con un ADODataset invece che con un'ADOQuery.
Saluti
	Marco Bortolani
	info @ 
marcobortolani.it