Newsgroup: it.comp.lang.visual-basic
Titolo: problema stranisssimo su query funzionante

salve ragazzi ho problema con questa riga
GRIGLIA_PRODOTTI.AddItem ControllaNull(RS("PRODOTTI.DATA_CONSEGNA")) & vbTab 
& ControllaNull(RS("CLIENTI.RAGSOC")) & vbTab & 
ControllaNull(RS("PRODOTTI.COMUNE")) & vbTab & 
ControllaNull(RS("MODELLI.DESCRIZIONE")) & vbTab & 
ControllaNull(RS("PRODOTTI.ID_MATRICOLA"))
mi da l'errore: Impossibile trovare l'oggetto nell'insieme corrispondente al 
nome o al numero richiesto.
eppure la query è giusta e funzionante se apro sql query analyzer
la query in questione è questa:
SELECT PRODOTTI.DATA_CONSEGNA, CLIENTI.RAGSOC, PRODOTTI.INDIRIZZO, 
PRODOTTI.COMUNE, MODELLI.DESCRIZIONE , PRODOTTI.ID_MATRICOLA FROM MARCHE 
INNER JOIN MODELLI ON MARCHE.ID_MARCA = MODELLI.ID_MARCA INNER JOIN FAMIGLIE 
ON MODELLI.ID_FAMIGLIA = FAMIGLIE.ID_FAMIGLIA INNER JOIN PRODOTTI ON 
MODELLI.ID_MODELLO = PRODOTTI.ID_MODELLO INNER JOIN SFAMIGLIE ON 
FAMIGLIE.ID_FAMIGLIA = SFAMIGLIE.ID_FAMIGLIA INNER JOIN CLIENTI ON 
PRODOTTI.ID_CLIENTE = CLIENTI.ID_CLIENTE ORDER BY PRODOTTI.DATA_CONSEGNA
e il codice questo:
Private Sub TMS_BUTTON6_Click()
    If Trim(txtRIC_RAGSOC.Text) <> "" And Trim(txt_IDricCLIENTE.Text) = "" 
Then
        MsgBox "Cliente non riconosciuto nell'anagrafica.", vbExclamation + 
vbOKOnly, "Attenzione!"
        Exit Sub
    End If
    'ricerca: ragione sociale, modello, marca
    SQL = ""
    If IsNull(txtRIC_MODELLO.Text) = True And IsNull(txtRIC_RAGSOC.Text) = 
True Then
        SQL = "SELECT PRODOTTI.DATA_CONSEGNA, CLIENTI.RAGSOC, 
PRODOTTI.INDIRIZZO, PRODOTTI.COMUNE, " & _
              "MODELLI.DESCRIZIONE , PRODOTTI.ID_MATRICOLA " & _
              "FROM MARCHE INNER JOIN " & _
              "MODELLI ON MARCHE.ID_MARCA = MODELLI.ID_MARCA INNER JOIN " & 
_
              "FAMIGLIE ON MODELLI.ID_FAMIGLIA = FAMIGLIE.ID_FAMIGLIA INNER 
JOIN " & _
              "PRODOTTI ON MODELLI.ID_MODELLO = PRODOTTI.ID_MODELLO INNER 
JOIN " & _
              "SFAMIGLIE ON FAMIGLIE.ID_FAMIGLIA = SFAMIGLIE.ID_FAMIGLIA 
INNER JOIN " & _
              "CLIENTI ON PRODOTTI.ID_CLIENTE = CLIENTI.ID_CLIENTE " & _
              "ORDER BY PRODOTTI.DATA_CONSEGNA"
    Else
        SQL = "SELECT PRODOTTI.DATA_CONSEGNA, CLIENTI.RAGSOC, 
PRODOTTI.INDIRIZZO, PRODOTTI.COMUNE, " & _
              "MODELLI.DESCRIZIONE , PRODOTTI.ID_MATRICOLA " & _
              "FROM MARCHE INNER JOIN " & _
              "MODELLI ON MARCHE.ID_MARCA = MODELLI.ID_MARCA INNER JOIN " & 
_
              "FAMIGLIE ON MODELLI.ID_FAMIGLIA = FAMIGLIE.ID_FAMIGLIA INNER 
JOIN " & _
              "PRODOTTI ON MODELLI.ID_MODELLO = PRODOTTI.ID_MODELLO INNER 
JOIN " & _
              "SFAMIGLIE ON FAMIGLIE.ID_FAMIGLIA = SFAMIGLIE.ID_FAMIGLIA 
INNER JOIN " & _
              "CLIENTI ON PRODOTTI.ID_CLIENTE = CLIENTI.ID_CLIENTE WHERE "
        If txtRIC_MODELLO.Text <> "" Or IsNull(txtRIC_MODELLO.Text) = False 
Then SQL = SQL & " PRODOTTI.ID_MODELLO = " & txt_IDricMODELLO.Text & " AND"
        If txtRIC_RAGSOC.Text <> "" Or IsNull(txtRIC_RAGSOC.Text) = False 
Then SQL = SQL & " PRODOTTI.ID_CLIENTE = " & txt_IDricCLIENTE.Text & " AND"
        SQL = Left(SQL, Len(SQL) - 3)
        SQL = SQL & "ORDER BY PRODOTTI.DATA_CONSEGNA"
    End If
    Carica_Griglia_RICERCA
End Sub
Private Sub Carica_Griglia_RICERCA()
    Svuota_Griglia_RICERCA
    Set RS = ADOConn.Execute(SQL)
    If Not RS.EOF Then
        Do While Not RS.EOF
            GRIGLIA_PRODOTTI.AddItem 
ControllaNull(RS("PRODOTTI.DATA_CONSEGNA")) & vbTab & 
ControllaNull(RS("CLIENTI.RAGSOC")) & vbTab & 
ControllaNull(RS("PRODOTTI.COMUNE")) & vbTab & 
ControllaNull(RS("MODELLI.DESCRIZIONE")) & vbTab & 
ControllaNull(RS("PRODOTTI.ID_MATRICOLA"))
            RS.MoveNext
        Loop
    Else
        MsgBox "La ricerca non ha prodotto nessun risultato. Riprovare 
modificando i criteri di selezione.", vbExclamation + vbOKOnly, 
"Attenzione!"
    End If
    RS.Close
End Sub
Private Sub Svuota_Griglia_RICERCA()
    With GRIGLIA_PRODOTTI
        .Clear
        .Rows = 2
        .Cols = 6
        .ColHeaderCaption(0, 0) = "DATA CONSEGNA": .ColHeaderCaption(0, 1) = 
"CLIENTE"
        .ColHeaderCaption(0, 2) = "INDIRIZZO": .ColHeaderCaption(0, 3) = 
"COMUNE"
        .ColHeaderCaption(0, 4) = "PRODOTTO": .ColHeaderCaption(0, 5) = 
"[ID]"
        .ColWidth(0, 0) = 1500: .ColWidth(1, 0) = 4000
        .ColWidth(2, 0) = 3000: .ColWidth(3, 0) = 2000
        .ColWidth(4, 0) = 3500: .ColWidth(5, 0) = 500
    End With
End Sub 

ControllaNull(RS("PRODOTTI.ID_MATRICOLA"))
Io proverei a rinominare i campi in uscita dalla query con una serie
di AS, cioč PRODOTTI.DATA_CONSEGNA AS DATA_CONSEGNA, CLIENTI.RAGSOC AS
RAGSOC, ecc. Ovviamente i nuovi nomi dei campi li devi valutare tu per
non creare duplicazioni.
Ciao
-- 
Fritz
Togli *ERASE* per rispondere in e-mail.


[snip]
Mamma mia... che accozzaglia di codice :)
Allora, la teoria è questa.
Se metti in join due tabelle quando recuperi il nome del campo, se il nome è 
ambiguo, cioè contenuto in entrambe le tabelle devi usare la sintassi 
<nometabelle>.<nomecampo>.
Altrimenti solo <nomecampo>.
Resta valido il consiglio di Fritz, così nel caso in cui alla SELECT 
aggiungi un nuovo campo non corri il rischio di dover cambiare il "richiamo" 
del recordset.
Ciao 

 "richiamo" del recordset.
provo... 

 ha scritto nel messaggio 
news:9c2oa2hn25acm3qcp...@4ax.com...

GRAZIE, era quello il problema...