Il linguaggio di programmazione Delphi
 

Condizione per una query

Stark 3 Nov 2016 21:05
Non riesco ad esprimenre questa condizione:
Voglio estrarre tutti i records dove il campo BANCA o il campo CONTRO di un
dataset (contenente tutti i movimenti) sono uguali al campo BANCA di un
secondo dataset (Piano dei conti), purchè il campo H in questo dataset sia
NULL.

Ho provato come segue, ma estrae sbagliato. Praticamente non rileva la
condizione PIANO.H IS NULL :

Select ...from MOV join PIANO B
ON (MOV.'Contro' = PIANO.'banca' or MOV.'Banca' = PIANO.'banca') and
PIANO.H IS NULL

Allora ho provato a cambiare la condizione e ad estrarre i records dove
Piano.H = 'X', e questa funziona:
Select ...from MOV join PIANO B
ON (MOV.'Contro' = PIANO.'banca' or MOV.'Banca' = PIANO.'banca') and
PIANO.H='X'

Ma a me serve la prima. Ci ho lavorato almeno un paio di ore e non ne esco.
Uso il BDE, ma la query concettualmente non dovrebbe essere troppo diversa.
Qualcuno ci capisce ?

Aggiungo un esempio per spiegare meglio a chi avesse la voglia di aiutarmi.

Esempio PianoConti:
BANCA H
AAA
BBB
CCC X

Esempio Movimenti:
BANCA CONTRO
AAA EEE da estrarre perchè valore BANCA è presente su
PianoConti
EEE AAA da estrarre perchè valore CONTRO è presente su
PianoConti
YYY GGG non estrarre perchè nè BANCA nè CONTRO presenti su
PianoConti
NNN CCC non estrarre perchè il campo H non è null
Giacomo Degli Esposti 4 Nov 2016 10:24
On Thursday, November 3, 2016 at 9:05:18 PM UTC+1, Stark wrote:
> Non riesco ad esprimenre questa condizione:
> Voglio estrarre tutti i records dove il campo BANCA o il campo CONTRO di un
> dataset (contenente tutti i movimenti) sono uguali al campo BANCA di un
> secondo dataset (Piano dei conti), purchè il campo H in questo dataset sia
> NULL.
>
> Ho provato come segue, ma estrae sbagliato. Praticamente non rileva la
> condizione PIANO.H IS NULL :

Ricordo che il BDE dava qualche problema con il NULL...

Prova a mettere nella tabella '' al posto di NULL, in modo che
la condizione diventi (Piano.H = '')

E comunque controlla che non sia gia' cosi'... se inserisci i
dati da codice allora sei sicuro che sia NULL ma se usi dei
componenti grafici (DBEdit, DBGrid...) in passato ricordo
che a volte questi inserivano autonomamente dei valori di ''
nelle tabelle BDE.

ciao
Giacomo
Stark 4 Nov 2016 15:22
Prova a mettere nella tabella '' al posto di NULL, in modo che
la condizione diventi (Piano.H = '')
Giacomo

No, il problema non è is null (e comunque ho provato anche H='').
Praticamente la query estrae un conto dove nel dataset 'Piano' il campo H
non è vuoto, mentre dovrebbe ignorarlo.
Ho provato a mettere Piano.H tra i campi della query (oltre che nelle
condizioni) e risulta vuoto anche se nel dataset non lo è.

La condizione è espressa così:
ON (MOV.'Contro' = PIANO.'banca' or MOV.'Banca' = PIANO.'banca') and PIANO.H
IS NULL

Se la semplifico così:
ON MOV.'Contro' = PIANO.'banca' and PIANO.H IS NULL
o così:
ON MOV.'Banca' = PIANO.'banca' and PIANO.H IS NULL

allora va bene, così come va sempre bene se invece di cercare i casi in cui
H is null, cerco i casi opposti (H='X')

Ho provato tutte le combinazioni e l'unica che sbaglia è quella che mi
serve...
LuigiPaolo 4 Nov 2016 23:26
"Stark" <starkwedderr@gmail.com> ha scritto nel messaggio
news:nvi5ij$uls$1@gioia.aioe.org...
> Prova a mettere nella tabella '' al posto di NULL, in modo che
> la condizione diventi (Piano.H = '')
> Giacomo
>
Prova con Trim(Piano.H='')
oppure UpperCase(Piano.H='')
oppure ancora
Piano.H='' or Piano.H=' ';
Voltolini Luigi


---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Stark 5 Nov 2016 16:28
Prova con Trim(Piano.H='')
oppure UpperCase(Piano.H='')
oppure ancora
Piano.H='' or Piano.H=' ';
Voltolini Luigi
---
Provate tutte, ma niente .. Ho trovato alcune i*****sincrasie nella sintassi:
per esempio ho verificato che se semplicemente sostituisco 'is null' con una
delle espressioni che mi hai suggerito non viene estratto niente, ma
modificando la condizione da
ON (M.'banca' = Piano.'banca' or M.'Contro' = Piano.'banca') and Piano.H =
''
in
ON (M.'banca' = Piano.'banca' or M.'Contro' = Piano.'banca') where Piano.H =
''

allora la estrazione viene eseguita, anche se continua ad estrarre records
dove Piano.H non è vuoto
4ndre4 5 Nov 2016 21:19
On Saturday, 5 November 2016 15:28:21 UTC, Stark wrote:

[...]
Devi usare una LEFT join.
Stark 6 Nov 2016 09:38
Devi usare una LEFT join.
---
Provato. Ma continua ad estrarre erroneamente i records dove
M.Banca=P.Banca. Praticamente applica la condizione P.H is null solo quando
M.Contro=P.Banca. Potrebbe essere un problema del local Sql ?

Select * from M left join P ON (M.'banca' = P.'banca' or M.'Contro' =
P.'banca') and P.H is null

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione Delphi | Tutti i gruppi | it.comp.lang.delphi | Notizie e discussioni delphi | Delphi Mobile | Servizio di consultazione news.