DAO.Recordset e inserimento dati

di il
6 risposte

DAO.Recordset e inserimento dati

Buonasera,
ho due tabelle legate da una relazione 1 a molti e voglio inserire i dati nelle due tabelle creando una sola maschera..
Tabella1: ID_1, NOME
Tabella2: ID_2, dati, ID_1

Ho creato una maschera con delle textbox dove inserisco i dati da inserire nelle tabelle e con un bottone le salvo.
Tabella1: ID_1, NOME ---> id si inserisce automaticamente, txt_nome
Tabella2: ID_2, dati, ID_1 ---> id si inserisce automaticamente, txt_dati, vorrei selezionare l'id della prima tabella


Il codice in vba è:
Private Sub btn_Salva()
  CurrentDb.Execute "INSERT INTO Tabella1 (NOME) VALUES (' " & Me.txt_nome & " ')    'inserisce correttamente i dati (ho controllato nella tabella).
  If Me.txt_dati <> "" Then  'controllo che siano inseriti i dati nella textbox. (l'if funziona e ci entra.)
       Dim id_r As DAO.Recordset
       Set id_r = CurrentDb.OpenRecordset(" SELECT  ID_1 FROM Tabella1 WHERE NOME = ' " & Me.txt_nome & " ' ")
        CurrentDb.Execute "INSERT INTO Tabella2 (dati) VALUES (id_r.Fields(0), ' " & Me.txt_dati & " ')
End if
End sub
Il primo insert funziona ma il secondo no e mi restituisce come errore: "Funzione id_r.Fields non definita nell'espressione". Qualcuno sa dirmi cosa sbaglio?
Ho pure provato ad inserire il secondo insert direttamente nella seconda CurrentDb.Execute al posto di creare id_r ma mi da errore di sintassi. Cosa sbaglio?

Grazie

6 Risposte

  • Re: DAO.Recordset e inserimento dati

    Mi verrebbe da chiederti perchè fai questa roba..., ma evito ,invitandoti a ragionarci sopra... in 3 righe ci sono 6 errori, non solo tecnici ma concettuali...!

    Prima di esporre il codice che così come presentato non giustifica alcuna azione, non è meglio se ci spieghi bene il FINE ULTIMO dell'azione...?

    Anche la strana relazione tra le 2 Tabelle andrebbe motivata...
  • Re: DAO.Recordset e inserimento dati

    Il fine è inserire dei dati nelle tabelle per una persona. Questa persona, definita nella Tabella1, può avere più dati di esami, (definiti nella Tabella2)
    la relazione dovrebbe essere 1:n (tabella1:tabella2) (sono nuova nei db è sbagliato inserirli cosi?)... Per un nome di persona (inserisco l'id non posso inserire il CF come chiave primaria)ho più dati degli esami da inserire nella seconda tabella(legata alla prima con il suo id).
    Ogni esame è un record nella tabella2 da collegare alla persona della tabella 2.
    Voglio quindi inserire esami diveri nella tabella2, cambiandoli gli id_2 ogni volta, ma si devono ricondurre sempre alla stessa persona con id_1.

    Comunque l'errore che mi compare è nel vba perchè a livello di DB l'insert funziona.

    Grazie
  • Re: DAO.Recordset e inserimento dati

    Ti suggerisco di fermarti perché dici e fai cose non commentabili tecnicamente per completa distonia con il prodotto.
    Oltretutto vedo che non comprendi gli appunti fatti.... e questo complica le cose.

    Un buon libro di come si gestiscono i dati è veramente necessario.
  • Re: DAO.Recordset e inserimento dati

    Mi puoi dare qualche consiglio? La relazione come si chiama? forse non mi sono spiegata bene.
  • Re: DAO.Recordset e inserimento dati

    meme'1992 ha scritto:


    ho due tabelle legate da una relazione 1 a molti e voglio inserire i dati nelle due tabelle creando una sola maschera..
    Tabella1: ID_1, NOME
    Tabella2: ID_2, dati, ID_1

    Ho creato una maschera con delle textbox dove inserisco i dati da inserire nelle tabelle e con un bottone le salvo.
    Tabella1: ID_1, NOME ---> id si inserisce automaticamente, txt_nome
    Tabella2: ID_2, dati, ID_1 ---> id si inserisce automaticamente, txt_dati, vorrei selezionare l'id della prima tabella
    Il titolo e il codice VBA (non ti serve) sono totalmente fuorvianti da ciò che devi fare.
    Innanzitutto non aver paura di dare nomi propri alle tabelle (chi ti legge capisce meglio), quindi Persone, Esami.
    A) Sai che (in maniera classica) potresti gestire maschera/sottomaschera Persone/Esami (tutto con procedura guidata)?
    B) Hai esplicitamente detto di voler gestire in un'unica maschera. Tale maschera dovrebbe essere solo Esami. In corrispondenza del campo IDPersona (ex ID_1) devi costruire una "casella combinata" ben congeniata dove puoi comodamende "selezionare" la Persona. Leggi per esempio qui, soprattutto il caso Cognome e Nome
  • Re: DAO.Recordset e inserimento dati

    Puoi provare modificando il codice nel seguente modo:
    
    Private Sub btn_Salva()
        CurrentDb.Execute "INSERT INTO Tabella1 (NOME) VALUES ('" & Me.txt_nome & "')"    'inserisce correttamente i dati (ho controllato nella tabella).
        If Me.txt_dati <> "" Then  'controllo che siano inseriti i dati nella textbox. (l'if funziona e ci entra.)
            Dim id_r As DAO.Recordset
            Set id_r = CurrentDb.OpenRecordset("SELECT ID_1 FROM Tabella1 WHERE NOME = '" & Me.txt_nome & "'")
            CurrentDb.Execute "INSERT INTO Tabella2 (ID_1, dati) VALUES (" & id_r!ID_1 & ", '" & Me.txt_dati & "')"
        End If
    End Sub
    
    inoltre devi fare attenzione a come scrivi in quanto scrivere '" & Me.txt_nome & "' o ' " & Me.txt_nome & " ' sono due cose differenti nel secondo caso il nome inserito verrà preceduto e seguito da uno spazio.
Devi accedere o registrarti per scrivere nel forum
6 risposte