Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [vb6]SQL e inserimento record in una tabella mediante Recordset

    Mi ritrovo di nuovo qui a chiedere aiuto. Ho creato un form che mi deve permettere di aggiornare una tabella in un db Access.
    Ho le varie textbox che, alla pressione di un commandbutton, associo ad alcune variabili:

    codice:
    idfattura = Val(txtID.Text)
       numfattura = txtNumFattura.Text
       datafattura = txtDataFattura.Text
       fornitoreX = txtFornitore.Text
       importo = txtImporto.Text
    Poi apro la connessione con il database (connessione che funziona e che è stata proprio presa da questo forum seguendo le istruzioni in rilievo in questa sezione) e creo la stringa SQL:

    codice:
    Rs.Open "INSERT INTO Fattura(Id_Fattura, Num_Fattura, Data, Fornitore, Importo) 
    VALUES ('" & id_fattura & "','" & numfattura & "','" 
    & datafattura & "','" & fornitoreX & "','" & importo & "');"
    Poi azzero le textbox:
    codice:
    txtNumFattura.Text = ""
       txtDataFattura.Text = ""
       txtFornitore.Text = ""
       txtImporto.Text = ""
    e chiudo la connessione.

    Vorrei sapere dove devo inserire il comando che mi permette di posizionarmi sull'altro record. Ho provato a mettere rs.movenext subito dopo l'istruzione rs.open ma mi da errore "L'operazione non è consentita se l'oggetto è chiuso"
    Altre volte mi da errore dicendomi che si è tentato di duplicare l'identificatore univoco (che di fatto corrisponde all'ID della fattura, generato e incrementato automaticamente).
    Qualcuno saprebbe aiutarmi?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In che senso "posizionarti sull'altro record"?

    E poi ...

    1) se hai un ID (contatore automatico) nella tabella, questo *non* deve essere incluso nella INSERT perche' il DB lo genera da solo ...

    2) non e' necessario utilizzare il recordset per la INSERT, ma puoi usare la Execute dell'oggetto connection

  3. #3
    nel database il campo Id Fattura è appunto un contatore che viene ovviamente incrementato automaticamente.
    Togliendo dalla stringa sql il campo Id fattura, VB mi restituisce l'errore:


    Riguardo il secondo punto da te indicato in cui mi consigliavi di non usare il recordset, io ho una procedura per la connessione al database e la variabile usata per la connessione si chiama cn.
    Mi potresti indicare l'operazione da compiere??
    grazie.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per l'errore ... sei sicuro di aver tolto dalla INSERT sia il nome del campo Id che la variabile in cui passavi il valore dell'Id ?

    Per la Execute, scrivi

    cn.Execute "INSERT ... e tutto il resto"

    senza usare recordset

  5. #5
    eh si. la superficialità è stata quella di aver tolto solamente il nome dell'attributo e non la valorizzazione (il valore della variabile).
    Per quanto riguarda la gestione della visualizzazione dell'id della fattura ho fatto così:

    al caricamento del form:
    codice:
    Var = 0
    
    Call connetti
    Rs.Open "SELECT MAX(Id_Fattura) AS Val_max FROM Fattura"
    Var = Rs.Fields("Val_max")
    txtID.Text = Var + 1
    Call chiudi
    mentre ogni volta che premo il tasto "Inserisci"
    codice:
    txtid.text=txtid+1
    Può andare bene come codice??

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non hai usato

    cn.Execute ...

    Perche'?

    Per quanto riguarda l'Id, a cosa ti serve visualizzarlo?

  7. #7
    cn.execute l'ho utilizzato per inserire le nuove fatture proprio come mi hai suggerito tu!

    La visualizzazione dell'id mi serve per comodità personale.
    Praticamente dal commercialista ogni fattura viene registrata con un numero progressivo (1,2,3,...,n) indipendente dal numero della fattura. Ecco perchè mi serve la visualizzazione dell'id che ho messo in una textbox bloccata, nel senso che l'utilizzatore non può farci modifiche.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usi un file mdb in formato Access 2000 ?

  9. #9
    si. Il formato del database è mdb di access 2000.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Okay ... allora, subito dopo la

    cn.Execute "INSERT ..."

    scrivi

    Set rs = New Recordset
    Set rs = cn.Execute("SELECT @@IDENTITY AS newID")
    newID = rs.Fields("newID").Value
    rs.Close
    Set rs = Nothing

    dando per scontato che

    1) hai dichiarato un oggetto rs come Recordset (Dim rs As Recordset)

    2) hai dichiarato una variabile newID come Long (Dim newID As Long)

    La prima Set e l'ultima puoi evitarle se hai un recordset gia' istanziato e che puoi utilizzare ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.