Autore Topic: [Risolto] SQLite3: campi con lo stesso nome, ma in tabelle diverse  (Letto 570 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
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:
« Ultima modifica: 25 Gennaio 2013, 23:40:01 da Picavbg »
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: SQLite3: campi con lo stesso nome, ma in tabelle diverse
« Risposta #1 il: 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:
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: SQLite3: campi con lo stesso nome, ma in tabelle diverse
« Risposta #2 il: 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.



Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: SQLite3: campi con lo stesso nome, ma in tabelle diverse
« Risposta #3 il: 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:
:ciao: