Stringa costruita con Dlooukp restituisce due valori.....

di il
9 risposte

Stringa costruita con Dlooukp restituisce due valori.....

Ciao a tutti

Sto riscontrando una cosa che non capisco (e che non mi è mai successa)

Premessa (riducendo il numero di campi):

2 tabelle : 

TabellaA: IDStato (contatore), Descrizione (testo)

TabellaB: IDCitta (contatore), IDStato (numerico), Descrizione (testo)

Relazione: TabellaA Uno-a-Molti TabellaB

Esempio dati

TabellaA: 1 - Spagna

TabellaB: 1 - 1 - Madrid

Nella maschera di interesse, da una list box su query (SELECT IDCitta, IDStato,Descrizione FROM TabellaB), una volta selezionata la città vorrei che in una textbox che uso come intestazione comparisse, nell'esempio, “Madrid - Spagna”.

Su doppio click nella list box ho inserito come codice:

Me.txtIntestazione=DLookup("Destinazione", "TabellaB", "IDCitta=" & Forms!frmPrincipale!lstTappe01.Column(0) & " - " & DLookup("Descrizione", "TabellaA", "IDStato=" & Forms!frmPrincipale!lstTappe01.Column(1))

Il problema è che mi vengono restituite 2 righe :

Madrid

Madrid - Spagna

mentre io mi aspetterei solo la riga combinata. Di conseguenza, nella textbox mi ritrovo scritto solo “Madrid”  (ma se la allungo mi vengono visualizzate le 2 righe)

Ma perchè 2 righe?

Andrea

9 Risposte

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    1. Perchè non hai nominato TabellaA = Stati e TabellaB = Città (diretttamente)? Così si capisce meglio.
    2. Hai indicato un nome campo Destinazione che non compare in alcuna delle tabelle da te indicate.
    3. Cosa devi fare veramente? Quelle caselle combinate (o caselle di riepilogo?) puoi gestirle molto meglio che usando DLookup.

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    Scusa ma se nella query che alimenta la Combo metti in JOIN la TabellaB e la TabellaA, e la dove usi la FK riferita alla TabA vai a sostituire il nome dello Stato sfruttando così la naturale capacità di AutoLookUp dei dati…?
    Nella combo ti apparirà Madrid + Spagna

    Se poi vuoi che la combo visualizzi solo il campo descirttivo metti a Zero(0) la LARGHEZZA della Colonna ID Numerico e nella Query generi un campo Calcolato con [DescrizioneTabA]+" (" + [DescrizioneTabB] + “)” ed otterrai [Madrid (Spagna)]

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    12/06/2023 - OsvaldoLaviosa ha scritto:


    1. Perchè non hai nominato TabellaA = Stati e TabellaB = Città (diretttamente)? Così si capisce meglio.
    2. Hai indicato un nome campo Destinazione che non compare in alcuna delle tabelle da te indicate.

    1) Concordo…..ma il neurone spesso va in conflitto con se stesso…..

    2) Errore di sbaglio, nella TabellaB (le città) è “Destinazione” e non “Descrizione”

    12/06/2023 - @Alex ha scritto:


    Scusa ma se nella query che alimenta la Combo metti in JOIN la TabellaB e la TabellaA, e la dove usi la FK riferita alla TabA vai a sostituire il nome dello Stato sfruttando così la naturale capacità di AutoLookUp dei dati…?
    Nella combo ti apparirà Madrid + Spagna

    Se poi vuoi che la combo visualizzi solo il campo descirttivo metti a Zero(0) la LARGHEZZA della Colonna ID Numerico e nella Query generi un campo Calcolato con [DescrizioneTabA]+" (" + [DescrizioneTabB] + “)” ed otterrai [Madrid (Spagna)]

    Ok ho fatto come mi hai suggerito e ottenuto dalla query la visualizzazione (nella listbox) sia della città che dello stato (su 2 colonne separate, mi va benissimo al momento) (in pratica le colonne totali della listbox sono 3: IDCitta (nascosta), Citta, Stato (in quest'ordine)

    Però quello che voglio ottenere (come detto nel primo post) è che, una volta selezionata la riga della listbox, mi andrà a richiamare tutti i dati della TabellaB (le città) visualizzandoli nella maschera, e come “intestazione” della maschera mi popola la textbox con nome della città “trattino” stato.

    Per fare questo, a questo punto ho cambiato l'evento SuDoppioClick in:

    Forms!frmPrincipale!txtIntestazione = Forms!frmPrincipale!lstTappe01.Column(1) & " - " & Forms!frmPrincipale!lstTappe01.Column(2) 

    Mi aspetterei di ottenere:

    Madrid - Spagna

    e invece ancora quello che ottengo è:

    Madrid

    Madrid - Spagna

    E' solo UNA riga di codice…..non esistono ritorni a capo o altre righe….non capisco perchè….

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    Ciao.
    Controlla nelle proprietà della casella di testo che access non abbia salvato in automatico il valore predefinito con la città Madrid.

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    12/06/2023 - fratac ha scritto:


    Ciao.
    Controlla nelle proprietà della casella di testo che access non abbia salvato in automatico il valore predefinito con la città Madrid.

    Uhmmm no, ma per essere sicuro, ho cancellato la textbox e l'ho ricreata daccapo.

    Il risultato non è cambiato.

    Però è successa una cosa strana: ho casualmente invertito i riferimenti alle 2 colonne della listbox da

    Forms!frmPrincipale!txtIntestazione = Forms!frmPrincipale!lstTappe01.Column(1) & " - " & Forms!frmPrincipale!lstTappe01.Column(2) 

    a

    Forms!frmPrincipale!txtIntestazione = Forms!frmPrincipale!lstTappe01.Column(2) & " - " & Forms!frmPrincipale!lstTappe01.Column(1) 

    In pratica ho invertito 1 e 2. Ho ottenuto sempre la doppia riga ma invertita:

    Madrid - Spagna

    Madrid

    Preciso che se debuggo come

    Debug.Print Forms!frmPrincipale!lstTappe01.Column(1) & " - " & Forms!frmPrincipale!lstTappe01.Column(2)

    ottengo sempre e comunque le due righe (anche quella invertita); ne deduco quindi che il problema non è legato alla textbox ma in qualche modo al campo con il nome della città…..

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    12/06/2023 - Jocman ha scritto:


    Preciso che se debuggo come

    Debug.Print Forms!frmPrincipale!lstTappe01.Column(1) & " - " & Forms!frmPrincipale!lstTappe01.Column(2)

    ottengo sempre e comunque le due righe (anche quella invertita); ne deduco quindi che il problema non è legato alla textbox ma in qualche modo al campo con il nome della città…..

    ma daiiiiiiii    !!!!!    ;))

    Fai vedere come hai popolato la ComboBox

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    Per me devi fare tutto più semplicemente così:
    1. La tua listbox deve avere come Origine riga una SELECT organizzata così (uso il linguaggio della visualizzazione struttura query, a me più familiare):
    - importa le tabelle Stati e Citta (presuppongo ci sia già la relazione uno-a-molti)
    - organizza 2 campi nella griglia sottostante
    IDCitta
    CittaStato: [Destinazione] & “ - " & [Denominazione]

    2. Numero colonne: 2
    Larghezza colonne: 0cm;10cm

    3. Salva tutto

    Dovresti ottenere quello che hai richiesto (sperando io abbia capito!).

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    Correzione:

    quando ho sbagliato e invertito gli indici delle colonne non ho ottenuto 

    Madrid - Spagna ma Spagna - Madrid  (piccola precisazione).

    Stamattina, dopo aver letto anche il consiglio di Osvaldo, ho provato a creare la query come da lui suggerito (e che in fondo era come quella che stavo usando sulla falsa riga di quanto già suggerito da @Alex, ma con un campo in meno)

    Fatto sta che continuavo ad avere lo stesso “problema”.

    Visto che non cambiava nulla, ho deciso di cancellare la tabella delle città (dopo l'errata inversione delgi indici di colonna mi sembra ovvio che il problema era quella tabella) e crearla ex novo, creando nuovamente eattamente gli stessi campi (nome e tipologia) e ripopolandoli (dopotutto questo DB è ancora in fase embrionale, i dati sono pressocchè nulli, e mi è costato 10 minuti di “fatica”).

    Ho sostituito questa tabella nelle relazioni e nelle query (sia quella mia, sia quella suggerita da @Alex, sia quella suggerita da Osvaldo) e il problema NON si è ripresentato.

    La query di base della listbox è:

    SELECT tblCitta.IDCitta, tblCitta.Destinazione, tblStati.Descrizione, [Destinazione] & " - " & [Descrizione] AS Citta
    FROM tblStati INNER JOIN tblCitta ON tblStati.IDStato = tblCitta.IDStato;

    che è praticamente la stessa che usavo prima.

    Eppure non ho cambiato assolutamente nulla nelle impostazioni dei campi della tabella (lascio quelli di default)

  • Re: Stringa costruita con Dlooukp restituisce due valori.....

    Come non detto.

    Il problema si ripresenta.

    Ma ho scoperto dove succede.

    Il problema principale è che sono un idiota.

    A parte questo, mi sono accorto che quando ho scritto la query di inserimento dei dati nella tabella tblCitta, per visualizzarmela un pò più comoda nel VBA editor, ogni campo andavo a capo (la cosa mi facilita un pò i controlli visualmente)

    Beh, per farla breve, nel punto della query in cui registravo il nome della città invece di

    DBEngine(0)(0).Execute ("INSERT INTO tblCitta (.............) VALUES (" & Me.txtIDStato & "," & Me.txtDestinazione & "'," & _    etc etc etc etc 

     Ho inserito 

    DBEngine(0)(0).Execute ("INSERT INTO tblCitta (.............) VALUES (" & Me.txtIDStato & "," & Me.txtDestinazione & "'," & vbNewLine & _    etc etc etc etc 

    Non so perchè, ma invece del solo underscore per andare a capo gli ho inserito pure un vbNewLine……e giustamente lui nel campo andava a capo…..

    Scusatemi……e grazie del tempo che mi avete dedicato

    Andrea

Devi accedere o registrarti per scrivere nel forum
9 risposte