INNER JOIN E DATAGRID

di il
4 risposte

INNER JOIN E DATAGRID

Salve ho un problema con un datagrid e inner join, ho tre tabelle:
1) tabella Persone contiene i campi cognome, nome, idsoggetto
2) tabella Id contiene i campi idsoggetto, idpaese
3) tabella Indirizzi contiene i campi idpaese, citta, via, numero

vorrei che la datagrid mi restituisse i valori cognome, nome, citta, via, numero relazionando le tabelle tramite idsoggetto e idpaese.

Ho utilizzato il seguente codice ma dà errori:
(cn è ADODB.Connection)
(rsGridDS è ADODB.Recordset)

rsGridDS.CursorLocation = adUseClient
Dim QueryGridDS As String
QueryGridDS = "select cognome, nome, idsoggetto from Persone INNER JOIN Id ON idsoggetto = idsoggetto INNER JOIN Indirizzi ON idpaese = idpaese where (cognome = " Rossi ")"
rsGridDS.Open QueryGridDS, cn, adOpenStatic, adLockOptimistic, adCmdText
If rsGridDS.RecordCount > 0 Then
Set DataGridDS.DataSource = rsGridDS
Else
Set DataGridDS.DataSource = rsGridDS
MsgBox "Nessun nominativo trovato tra le persone fisiche"
End If

da errore: "espressione join non supportata"

4 Risposte

  • Re: INNER JOIN E DATAGRID

    Il primo errore è questo:

    ON idsoggetto = idsoggetto

    mancano i nomi delle tabelle.
  • Re: INNER JOIN E DATAGRID

    Ho provato anche così ma non funziona

    QueryGridDS = "select cognome, nome, idsoggetto from Persone INNER JOIN Id ON Persone.idsoggetto = Id.idsoggetto INNER JOIN Indirizzi ON Id.idpaese = Indirizzi.idpaese where (Persone.cognome = " Rossi ")"
  • Re: INNER JOIN E DATAGRID

    Probabilmente idsoggetto è ambiguo nei campi della select essendo un campodi entrambe le tabelle;
    ... se però riportassi anche l'errore/problema, invece di dire solo "non funziona" ,
    sarebbe più facile per chi vuole risponderti
  • Re: INNER JOIN E DATAGRID

    MarioG ha scritto:


    Ho provato anche così ma non funziona
    Perchè, come ti avevo scritto, quello era solo il PRIMO errore.
    Ora vediamo il SECONDO errore:

    MarioG ha scritto:


    QueryGridDS = "select cognome, nome, idsoggetto from Persone INNER JOIN Id ON Persone.idsoggetto = Id.idsoggetto INNER JOIN Indirizzi ON Id.idpaese = Indirizzi.idpaese where (Persone.cognome = " Rossi ")"
    che è qui:
    where (Persone.cognome = " Rossi ")
    1. In una query non si usano i doppi apici, ma i singoli apici
    2. la stringa di ricerca contiene 2 spazi (in testa e in coda) e dubito che il valore sia indicato così.

    Infine, per le stringhe il valore va sempre formattato con i doppi apici, usando la funzione Replace().

    In sostanza, dovrebbe diventare così:
    where Persone.cognome = '" & Replace("Rossi", "'", "''") & "'" 
    In ogni caso, tutto sto discorso è sbagliato, perchè si devono usare i Command con relativi Parametri e tutti i problemi di formattazione di stringhe e date non esisterebbero, perchè è il Command che provvede a fare tutto da solo.
    Ma comunque la stringa SQL devi essere tu a scriverla correttamente, ovviamente.

    Vedi questo articolo:
    VB6: Command e Parameter in ADODB
    http://nuke.vbcorner.net/Articoli/VB60/ADOParametrieaffini/tabid/85/Default.aspx
Devi accedere o registrarti per scrivere nel forum
4 risposte