Popolare una query

di il
17 risposte

Popolare una query

Buongiorno,
ho creato un database con cinque tabelle con relazione tra loro uno a molti e molti a molti e da queste ho ricavato una query da utilizzare per visualizzare i dati attraverso una sottomaschera. Ho inserito delle caselle di testo e caselle combinate nella maschera principale affinché l'utente possa inserire dati all'interno delle tabelle. L'inserimento è eseguito attraverso la pressione di un pulsante che esegue un codice contenente un istruzione sql "INSERT INTO" per ogni singola tabella.
Il problema che mi si presenta è che, sebbene i dati vengono immessi nelle tabelle, la query non viene popolata e pertanto la sottomaschera non visualizza i dati inseriti dall'utente.
Ho sicuramente omesso di fare qualcosa. Quale potrebbe essere il problema?
Grazie.

17 Risposte

  • Re: Popolare una query

    @eddy1973, PURTROPPO, per PRIMA COSA ... DEVI studiare un po' di "Teoria Realzionale dei Dati" ed ACQUISIRE la terminologia tecnica NECESSARIA per farti comprendere. Un qualunque libro su Access, che costi dai 40 euro in su, dovrebbe contenere i concetti fondamentali.

    Scarta i libri che cosatno troppo poco: generalmente sono inutili.

    Per quanto riguarda la terminologia:

    1) una query NON SI POPOLA: non vuol dire nulla. Si popola UNA TABELLA, mediante una opportuna "INSERT...INTO..."
    2) la query INTERROGA le tabelle ed eventualmente IL RISULTATO DELLA query viene usato per POPOLARE una form di visualizzazione

    Forse e' questo (il punto 2) ) che volevi intendere.

    Per prima cosa ASSICURATI che la query che generi RITORNI effettivamente qualcosa, interrogando DIRETTAMENTE il database.
  • Re: Popolare una query

    Lo so che il concetto "popolare per una query" è improprio (poiché è un'interrogazione) ma quello che volevo intendere è che le tabelle vengono popolate attraverso l'immissione di dati attraverso "INSERT INTO" ma i campi della query rimangono vuoti, a meno di inserire in dati nelle tabelle manualmente. Inserendo i dati manualmente nelle tabelle appaiono nella sottomaschera.
    Il Punto é questo.
  • Re: Popolare una query

    Anche "i campi della query rimangono vuoti" è una frase impropria. Per fare capire bene il tuo problema devi esprimerti correttamente e tecnicamente e non "intendere" quello che tu intendi ma altri non possono immaginare.

    Detto questo, è possibile che la INSERT fallisca perché è scritta male? Come è fatta questa INSERT?
  • Re: Popolare una query

    Ti indico il codice che esegue l'INSERT INTO da pulsante:
    Private Sub cmd_ins_prot_Click()
    
     Dim strsql As String
    
    If IsNull(Me.txtdata_camp) Or IsNull(Me.txttipo_camp) Or IsNull(Me.txttipo_an) Or IsNull(Me.txtente_rich) Or IsNull(Me.txtdescr_camp) Or IsNull(Me.txtdata_rich) Or IsNull(Me.txtprot_rich) Then
    ins_incompleto = MsgBox("Uno o più campi risulatano vuoti!", vbExclamation)
     Exit Sub
    Else
    
    strsql = "INSERT INTO Analisi" & "(Tipo_Analisi,Tipo_Campione) values ('" & Me.txttipo_an & "','" & Me.txttipo_camp & "')"
    db.Execute strsql
    DoCmd.SetWarnings False
    Debug.Print strsql
    
    strsql = "INSERT INTO Ente_Richiedente" & "(Denominazione_Ente) values ('" & Me.txtente_rich & "')"
    db.Execute strsql
    DoCmd.SetWarnings False
    Debug.Print strsql
    
    strsql = "INSERT INTO Protocollo" & "(Data_Protocollo,Testo_Protocollo) values ('" & Me.txtdata_rich & "','" & Me.txtprot_rich & "')"
    db.Execute strsql
    DoCmd.SetWarnings False
    Debug.Print strsql
    
    strsql = "INSERT INTO Dettaglio_Campioni (Numero_Certificato, Data_Certificato, Data_Campione, Descrizione_Campione) values ('" & Me.txtnum_cert & "','" & Me.txtdata_cert & "','" & Me.txtdata_camp & "','" & Me.txtdescr_camp & "')"
    db.Execute strsql
    DoCmd.SetWarnings False
    Debug.Print strsql
    
    strsql = "INSERT INTO Utenti" & "(Username) values ('Admin')"
    db.Execute strsql
    DoCmd.SetWarnings False ' disattiva il msg di avviso accodamento di riga in tabella
    Debug.Print strsql
    
    End If
    
    Form_SM_Main.Requery
    
    End Sub
  • Re: Popolare una query

    Mi correggo: nel copy/paste è scomparso
    Set db = CurrentDb 
    ma nel file di access è presente.
  • Re: Popolare una query

    Ma le singole INSERT funzionano? Hai controllato una per una le tabelle coinvolte per vedere in quali mancano i record?
    Le date sono di tipo stringa nelle tabelle?
    Le tabelle non sono relazionate? Non vedo ID o campi simili tra le varie registrazioni ...

    P.S. Fra l'altro, tutte le INSERT dovrebbero stare in una transazione
  • Re: Popolare una query

    Cosa intendi per stare unica transazione? qualcosa del tipo:
    
    strsql ="INSERT INTO  tabella1,...…………….," and "
    strsql = strsql & "INSERT INTO tabella2,...……." and "
    ………….
    ………...
    
    ho provato ma indica sempre errore di mancanza (;) nella stringa sql.
    Nelle tabelle i record vengono tutti inseriti attraverso il codice.
    Le tabelle sono relazionate.
    L'unica cosa sarebbero i campi ID che non ho incluse nelle INSERT INTO. Ma quali valori dovrei assegnarli? non dovrebbero aggiornarsi in automatico quando inserisco i valori nei campi?
    La query funziona qualora aggiungo i valori manualmente alle tabelle e via via ai fogli dati secondari secondo le relazioni d'integrità referenziale definite.
  • Re: Popolare una query

    Per le transazioni devi studiare un po' prima ... informati con calma.

    Per gli ID, stai parlando dei contatori automatici (delle chiavi primarie) o degli ID che stanno in una tabella per relazionarsi con altre tabelle (chiavi esterne)? Facci vedere lo schema relazionale con i campi delle varie tabelle ...
  • Re: Popolare una query

    Intendo gli ID delle chiavi primarie di quelle per creare le relazioni.
    In allegato lo screenshot dello schema delle relazioni tra tabelle.
    Allegati:
    26735_f497b2a5e676e25b3db238516121733d.png
    26735_f497b2a5e676e25b3db238516121733d.png
  • Re: Popolare una query

    Forse non riesco ad afferrare il problema. In sostanza mi sento di dire che generalmente i dati si inseriscono in maschere e/o sottomaschere. Queste, altrettanto generalmente, poggiano su tabelle.
    Il fatto che tu poi voglia vedere qualcosa di organicamente utile attraverso le query (e magari maschere che poggiano su query), direi di effettuarlo come una operazione "in seconda battuta".
    Parlo per me: fare tutto insieme attraverso le query, si rischiano problemi simili a quelli che hai esposto.
  • Re: Popolare una query

    Forse ho sbagliato l'approccio…
    Pensavo che tutto si potesse fare utilizzando una maschera che permette, ad un utente loggato, di poter immettere dati all'interno di tabelle ed estrarre poi dati utilizzando una query collegata ad una sottomaschera. Forse sarebbe meglio estrarre i dati in una tabelle riassuntiva anziché una query?
    Cosa mi consiglieresti di fare?
  • Re: Popolare una query

    eddy1973 ha scritto:


    Cosa mi consiglieresti di fare?
    Ti dò il mio consiglio logico/filosofico.
    1. I dati si INSERISCONO nella maschere e/o sottomaschere che poggiano sulle omonime tabelle. Dunque questi dati che digiti andranno automaticamente ad alimentare le tabelle.
    2. Dopo tante digitazioni di dati...ti fermi...respiri un po' e ragioni su quali dati vuoi VEDERE nel modo a te più congeniale. Ecco che qui entrano in gioco le query. Le crei, organizzi, visualizzi come meglio credi e puoi anche decidere che siano base per ulteriori maschere per VISUALIZZARE i risultati.

    Come puoi notare io preferisco scindere le due operazioni in fasi ben distinte. Tieni pure presente che il rettangolo del monitor ha le sue limitate dimensioni e pensare di "ammassare" dati da inserire con altri da vedere...rischi anche di confonderti le idee.
  • Re: Popolare una query

    Nelle righe strsql = "..." mancano sempre i campi che creano le relazioni, è per questo che non riesci a ricostruire i dati tramite query.
    Ad esempio la riga
    strsql = "INSERT INTO Ente_Richiedente" & "(Denominazione_Ente) values ('" & Me.txtente_rich & "')"
    dovrebbe cambiare in
    strsql = "INSERT INTO Ente_Richiedente" & "(Denominazione_Ente, ID_Analisi) values ('" & Me.txtente_rich & "', " & me.cboIDAnalisi & ")"
    dove cboIDAnalisi dovrebbe essere il controllo casella combinata da dove reperire l'ID_Analisi relativa a quella selezionata.
    Se alleghi il file, privo di dati sensibili, è più facile capire che cosa hai fatto e aiutarti.
  • Re: Popolare una query

    Grazie Stifone dell'indicazione ricevuta. Appena possibile modifico il codice. Se ho delle difficoltà allegherò il file.
    Utilizzerò il consiglio di Osvaldo ma una cosa soltanto….. lo so che collegando le tabelle alle maschere e/o sottomaschere avviene l'immissione automatica dei dati, ma il meccanismo l'ho impostato cosi in modo da permettere all'utente di eseguire l'immissione di dati non in automatico, ma attraverso la pressione di un pulsante che esegue il comando sql INSERTO INTO.... dopo aver controllato i dati inseriti leggendo dalla maschera e all'occorrenza modificarli con un altro pulsante qualora commesso un errore di digitazione.
    Ho pensato in questo modo forse perché provengo da una logica di programmazione un po' distante da quella utilizzata per i database.
Devi accedere o registrarti per scrivere nel forum
17 risposte