Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[VB] Referenziare un campo database in un recordset

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[VB] Referenziare un campo database in un recordset

Messaggioda DilanDog » mar nov 29, 2005 12:52 pm

Facile, posto che rs sia la variabile di tipo recordset già aperto tramite una query, il campo "descrizione" (ad esempio) si può referenziare in due modi:

Valore = rs!Descrizione
o
Valore = rs.fields("Descrizione")

Se invece nella Query compaiono più campi con lo stesso nome, perché contiene ad esempio un join tra più tabelle, per avere il valore dello stesso campo bisogna scrivere in questo modo:

Valore = rs.fields("Nometabella.Descrizione")

Ecco il mio problema: ho una query complessa che in base ad alcune opzioni può includere o meno altre tabelle, per cui il famoso campo dell'esempio "descrizione" può essere a volte l'unico presente nella query, altre volte no perché c'è una tabella con lo stesso campo definito. Mi ritrovo quindi a dover utilizzare una struttura condizionale di questo tipo:

if unatabella then
Valore = rs.fields("descrizione")
else
Valore = rs.fields("nometabella.descrizione")
end if

Ma possibile che non esista un metodo universale per fare riferimento ad un campo sia che sia l'unico nella query sia che ce ne sia più di uno con lo stesso nome?????? [:(!]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Robby78 » mar nov 29, 2005 1:50 pm

non sono sicuro di aver capito bene la tua domanda; io ci provo...
potresti modificare la tua istruzione select, usando gli alias in questo modo:

anzichè
Codice: Seleziona tutto
Select Descrizione From Tabella1

oppure
Codice: Seleziona tutto
Select Descrizione From Tabella2


potresti usare questa sintassi:

Codice: Seleziona tutto
Select Descrizione As Pippo From Tabella1

oppure
Codice: Seleziona tutto
Select Descrizione As Pippo From Tabella2


In questo modo puoi richiamare il campo descrizione in questo modo:
Codice: Seleziona tutto
valore=rs!Pippo

sia che si tratti di Tabella1 che di Tabella2.

P.S. stai attento che se il campo è null ti ritorna un errore; dovresti fare un controllo, oppure gestire l'errore.

P.S.2 in alcuni tipi di database non devi usare "As". Se ti dà errore la query, prova a toglierlo
Povera patria! Schiacciata dagli abusi del potere di gente infame, che non sa cos'è il pudore - Franco Battiato
ricordati di pensare! - mia mamma
Avatar utente
Robby78
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3829
Iscritto il: gio gen 08, 2004 5:25 pm
Località: Emilia Romagna

Messaggioda DilanDog » mer nov 30, 2005 12:59 pm

Robby78 ha scritto:non sono sicuro di aver capito bene la tua domanda; io ci provo...
potresti modificare la tua istruzione select, usando gli alias in questo modo:

anzichè
Codice: Seleziona tutto
Select Descrizione From Tabella1

oppure
Codice: Seleziona tutto
Select Descrizione From Tabella2


potresti usare questa sintassi:

Codice: Seleziona tutto
Select Descrizione As Pippo From Tabella1

oppure
Codice: Seleziona tutto
Select Descrizione As Pippo From Tabella2


In questo modo puoi richiamare il campo descrizione in questo modo:
Codice: Seleziona tutto
valore=rs!Pippo

sia che si tratti di Tabella1 che di Tabella2.

P.S. stai attento che se il campo è null ti ritorna un errore; dovresti fare un controllo, oppure gestire l'errore.

P.S.2 in alcuni tipi di database non devi usare "As". Se ti dà errore la query, prova a toglierlo


potrebbe essere un escamotage al quale non avevo pensato, l'unico problema è che in questo modo dovrei specificare tutti i campi da includere nella query uno per uno, mentre siccome mi servono tutti al
momento utilizzo la sintassi "nometabella.*"

Per ora comunque ho risolto con un escamotage differente, facendo diventare una variabile il riferimento al nome del campo in modo da utilizzare una sola espressione condizionale in un solo punto che determina se sto usando una sola tabella o più tabelle, però ero curioso di capire se c'era un metodo alternativo per referenziare i campi nei recordset...e a quanto ho capito non esiste [cry]

Grazie comunque per il suggerimento [8D]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano


Messaggioda Robby78 » mer nov 30, 2005 1:31 pm

aspetta... mi pare che tu possa richiamare i vari campi anche così:
Codice: Seleziona tutto
Valore = rs.fields(Index)

con index che è un progressivo che va da 0 al numero di campi che selezioni.
Se selezioni i campi esplicitamente, l'index rispetta l'ordine che tu gli hai dato, altrimenti "credo" che rispecchi la struttura della tabella...
Povera patria! Schiacciata dagli abusi del potere di gente infame, che non sa cos'è il pudore - Franco Battiato
ricordati di pensare! - mia mamma
Avatar utente
Robby78
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3829
Iscritto il: gio gen 08, 2004 5:25 pm
Località: Emilia Romagna

Messaggioda DilanDog » mer nov 30, 2005 5:52 pm

Robby78 ha scritto:aspetta... mi pare che tu possa richiamare i vari campi anche così:
Codice: Seleziona tutto
Valore = rs.fields(Index)

con index che è un progressivo che va da 0 al numero di campi che selezioni.
Se selezioni i campi esplicitamente, l'index rispetta l'ordine che tu gli hai dato, altrimenti "credo" che rispecchi la struttura della tabella...


Questa la sapevo, ma è più complicato che con il nome del campo assegnato ad una variabile. La query cambia continuamente, i campi al suo interno anche, rischio di visualizzare il prezzo totale al posto di quello unitario o viceversa....e non è bello [:-D]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Robby78 » gio dic 01, 2005 9:11 am

...allora mi arrendo [:-D]
se trovi la soluzione, postala qui, che ormai mi hai incuriosito!
Povera patria! Schiacciata dagli abusi del potere di gente infame, che non sa cos'è il pudore - Franco Battiato
ricordati di pensare! - mia mamma
Avatar utente
Robby78
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3829
Iscritto il: gio gen 08, 2004 5:25 pm
Località: Emilia Romagna


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising