Gambas-it

Gambas3 => Programmazione => Topic aperto da: Picavbg - 25 Gennaio 2013, 17:05:09

Titolo: [Risolto] SQLite3: campi con lo stesso nome, ma in tabelle diverse
Inserito da: Picavbg - 25 Gennaio 2013, 17:05:09
In tutte le tabelle del mio DB.SQLite3 ho inserito a suo tempo il codice id autoincrementale, denominandolo "id" in ciascuna delle tabelle del DB. Quindi leggendo con un'unica query due tabelle diverse, la rilevazione del campo RecQuery!id mi fornisce sempre il codice id contenuto nella prima delle tabelle descritte nella query. Es:
Codice: gambas [Seleziona]
RecQuery = ApriDB.DB_Connection.Exec("SELECT * FROM  partmovv,movimgg WHERE partmovv.CoVoPartGlob = '" & iNumCtoIni & "' AND partmovv.DtCoPartGlob = movimgg.DtCoMovgg AND partmovv.DtSolPartGlob = movimgg.DtSolMovgg AND partmovv.OraSolPartGlob = movimgg.OraSolMovgg ORDER BY partmovv.CoVoPartGlob AND partmovv.DtCoPartGlob AND partmovv.DtSolPartGlob AND partmovv.OraSolPartGlob")
  If RecQuery.Available
    For Each RecQuery
iProgr = RecQuery!id

iProgr contiene sempre il dato letto nella tabella partmovv, mentre a me servirebbe quello presente nel corrispondente record della tabella movimgg Esiste un metodo per prelevare quello che servirebbe a me? (Naturalmente diverso dal fare una susseguente lettura  del solo record della tabella movimgg o dal ridenominare di tutti i campi "id" delle tabelle del DB)  ;)
 :ciao:
Titolo: Re: SQLite3: campi con lo stesso nome, ma in tabelle diverse
Inserito da: Picavbg - 25 Gennaio 2013, 17:22:03
Ho rivisto quanto scritto nel messaggio d'apertura e ripensando al concetto
Citazione
leggendo con un'unica query due tabelle diverse, la rilevazione del campo RecQuery!id mi fornisce sempre il codice id contenuto nella prima delle tabelle descritte nella query
ho voluto riprovare scambiando nella query l'ordine dei nomi delle due tabelle. Il campo di memoria iProgr contiene sempre il valore id della prima delle tabelle riportate nella query che questa volta é:
Codice: gambas [Seleziona]
 RecQuery = ApriDB.DB_Connection.Exec("SELECT * FROM  movimgg,partmovv WHERE ...................

Quindi, avrei risolto. Sono tuttavia sempre in attesa di altre soluzioni alternative.  :D
 :ciao:
Titolo: Re: SQLite3: campi con lo stesso nome, ma in tabelle diverse
Inserito da: Berserker79 - 25 Gennaio 2013, 20:24:13
Ciao, in realta la soluzione al tuo problema consiste nell'usare la sintassi che hai utilizzato nella parte dopo il WHERE.
Quindi, al posto di utilizzare "SELECT * FROM......" devi scrivere
"SELECT partmovv.id AS id1 , partmovv.nome_campo2 AS xx, ......, movimgg.id AS id2, movimgg.nome_campo2 AS xx,....... FROM...."
Quindi specifichi tutti i campi delle varie tabelle e per ogni campo con la parola "AS" gli assegni un alias univoco che ti identifichera ogni singola colonna.
Alla fine iProgr = RecQuery!id1 oppure iProgr = RecQuery!id2
Cmq anche se non sei tu esplicitamente ad assegnare gli alias, credo lo faccio il programma in automatico, altrimenti l'esecuzione della query dovrebbe dare errore trovando dei nomi concorrenti fra di loro.


Titolo: Re: SQLite3: campi con lo stesso nome, ma in tabelle diverse
Inserito da: Picavbg - 25 Gennaio 2013, 23:39:16
OOOooooooooooooooohhhhh! Finalmente ho capito. Avevo letto nella guida di Sqlite3 l'argomento Alias ma non l'avevo capito. Ora il tuo esempio dettagliato mi ha perfettamente illuminato. L'ho voluto mettere in pratica subito ed ha funzionato splendidamente.
Grazie, grazie, grazie!  :2birre: