Newsgroup: it.comp.lang.visual-basic
Titolo: problemi con le query

Programmo in visual basic 5 da poco tempo. Un MDB contiene piu' tabelle :
vorrei effettuare un controllo di questo genere : leggo i campi di una
tabella e man mano assegno ad una variabile il seguente valore "SELECT *
FROM [Tabella1] WHERE [field] <> [field-tabella2] ...... [field-tabella(n)]"
alla fine eseguo una query con la variabile cosi' composta. lo scopo di cio'
e' estrarre dalla tabella 1 tutti i record che non contengono alcun campo
della tabella 2.
IL PROBLEMA che mi si presenta e' questo : con la tabella 2 con pochi record
tutto ok, con la tabella 2 con molti record ERRORE : Query troppo complessa.
C' e' qualcuno che puo' aiutarmi a risolvere questo problema senza
sconvolgere il database che e' gia' in funzione e con ben 1500 record
inseriti. ?
Grazie anticipatamente.
Rispondere al NEWS-GROUP o a 
RGG...@yahoo.it

 wrote in message 86frf8$s39$1...@nslave1.tin.it...

Io, per realizzare cose di questo tipo, ricorro ad un trucco:
apro Access, vado nella scheda query, click su nova, a questo punto scelgo
l'opzione "Creazione guidata Query ricerca dati non corrispondenti".
Una volta verificata la query e visto che tutto funziona correttaemte,
selezione la visualizzazione in formato SQL, copio la stringa e la riporto
in VB.
--
-----------------------------
Bye from WildSkin
ICQ #48778908
--------------------------------------------------------------------------
Sito ufficiale del NG it_comp_lang_visual-basic
http://www.murialdo.it:8000/it_lang_vb/
--------------------------------------------------------------------------

 inseriti. ?
Da come esponi il problema mi viene piu' di qualche dubbio a risponderti.
Per esempio, parli di piu' tabelle poi esemplifichi con Tabella1 e Tabella2
e ci si ritrova con un Tabella(n) nella stringa SQL. Titubo...
Provo a riformulare cosi' puoi dirmi se ho capito.
Ipotesi 1:
2 tabelle e vuoi confrontare un campo di tabella 1 con tutti i campi di
tabella 2.
Ipotesi 2, che mi sembra la piu' plausibile:
N tabelle e vuoi confrontare un campo di tabella 1 con un solo campo di
ciascuna delle altre tabelle.
Se e' vera questa allora queste righe di codice potrebbero fare al caso tuo.
----- INIZIO -----
Public Sub Main( _
)
Dim i_Index%
Dim s_Sql$
Dim s_From$
Dim s_Where$
  ReDim s_Tabelle$(1 To 4)
  Let s_Tabelle(1) = "Tabella1"
  Let s_Tabelle(2) = "Tabella2"
  Let s_Tabelle(3) = "Tabella3"
  Let s_Tabelle(4) = "Tabella4"
  ReDim s_Campi$(LBound(s_Tabelle) To UBound(s_Tabelle))
  Let s_Campi(1) = "Campo1"
  Let s_Campi(2) = "Campo1"
  Let s_Campi(3) = "Campo1"
  Let s_Campi(4) = "Campo1"
  Let s_Sql _
    = "SELECT DISTINCTROW " _
    & s_Tabelle(LBound(s_Tabelle)) & ".*"
  For i_Index = UBound(s_Tabelle) To LBound(s_Tabelle) + 1 Step -1
    Let s_From _
      = ") LEFT JOIN " & s_Tabelle(i_Index) _
      & " ON " & s_Tabelle(LBound(s_Tabelle)) & "." &
s_Campi(LBound(s_Campi)) _
      & " = " & s_Tabelle(i_Index) & "." & s_Campi(i_Index) _
      & s_From
    Let s_Where _
      = " AND " & s_Tabelle(i_Index) & "." & s_Campi(i_Index) & " Is Null" _
      & s_Where
  Next
  Let s_From _
    = "FROM " _
    & String$(UBound(s_Tabelle) - (LBound(s_Tabelle) + 1), "(") _
    & s_Tabelle(LBound(s_Tabelle)) & Mid$(s_From, 2)
  Let s_Where = "WHERE " & Mid$(s_Where, 6)
  Let s_Sql = s_Sql & vbCrLf & s_From & vbCrLf & s_Where & ";"
  Call MsgBox(s_Sql)
End Sub
----- FINE -----
Spero di non aver preso una cantonata!
Ciao.
Maurizio