Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [vb6]Aggiornamento db

    ciao a tutti,
    sto sviluppando un programma di gestione magazzino e sto usando un db con diverse tabelle(prodotti,vendite,acquisti).
    Quello che mi interessa è che ogni volta che si verifica una vendita o un acquisto automaticamente viene aggiornata la quantità di scorta presente nella tabella prodotti.
    Per quanto riguarda gli acquisti non ho avuto problemi.

    Ho invece un problema di aggiornamento nel momento in cui si verifica una vendita, visto che prima devo verificare che la scorta presente sia sufficiente.

    Segue la parte di codice che dovrebbe effettuare tale verifica:

    codice:
    'Verifica della quantità di prodotto disponibile
    selezione = "select scorta from prodotto where idprodotto= " + Text4 + ";"
    db.Execute selezione
    
    If scorta >= Text6 Then
    inserimento = "insert into vendite (idprodotto, idcliente, data, quantita, prezzo, iva, sconto) values ( '" & Text4 & "', '" & Text2 & "', '" & Text8 & "', '" & Text6 & "', '" & Text5 & "', '" & Text7 & "', '" & Text9 & "');"
    db.Execute inserimento
    
    'Aggiornamento tabella prodotto
    aggiornamento = "Update Prodotto set Scorta = Scorta - " + Text6 + " where idprodotto = " + Text4 + " "
    db.Execute aggiornamento
    
    Text1 = ""
    Text2 = ""
    Text3 = ""
    Text4 = ""
    Text5 = ""
    Text6 = ""
    Text7 = ""
    Text8 = ""
    Text9 = ""
    
    Else
    MsgBox "Disponibilità " & "" & Text3 & "" & " insufficiente. Quantità disponibile" scorta
    End If



    grazie

  2. #2
    Non ho capito il problema, non vorresti fare il controllo prima?

  3. #3
    voglio effettuare il controllo prima di fare l'inserimento:devo cioè controllare se il campo scorta della tabella prodotto è maggiore rispetto alla quantità inserita nella text6, perchè non posso effettuare una vendita di una quantità non disponibile(scorta<text6).Infatti se scorta<text6 devo far apparire un messaggio d'errore.

    Spero di essere stato più chiaro.

    thanx

  4. #4
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Il comando Execute di un oggetto connessione (ADODB.connection, immagino e/o spero)
    si utilizza per query che non estraggono un recordset. Le usi correttamente per
    l'inserimento e l'aggiornamento come in :

    codice:
    inserimento = "insert into vendite (idprodotto, idcliente, data, quantita, prezzo, iva, sconto) values ( '" & Text4 & "', '" & Text2 & "', '" & Text8 & "', '" & Text6 & "', '" & Text5 & "', '" & Text7 & "', '" & Text9 & "');"
    db.Execute inserimento
    
    'Aggiornamento tabella prodotto
    aggiornamento = "Update Prodotto set Scorta = Scorta - " + Text6 + " where idprodotto = " + Text4 + " "
    db.Execute aggiornamento
    Nel caso di una query di selezione non la usi correttamente. Ecco perchè non ottieni il
    valore del campo scorta come risultato della prima Execute.

    Dovresti 'recuperare' il valore della SELECT .. utilizzamdo un oggetto ADODB.RecordSet :
    codice:
    Dim scorta As Integer
    Dim rs As New ADODB.Recordset
    selezione = "select scorta from prodotto where idprodotto= " + Text4 + ";"
    rs.Open selezione, db
    ' Nota, si da per scontato l'esistenza del campo scorta nel recordset con un valore valido.
    scorta = rs.Fields("scorta").Value
    
    ' A questo punto puoi fare il controllo .....
    If scorta >= Text6 Then 
    ....
    ....
    Else
    ....
    ....
    End If
    Attento che utilizzi la proprietà predefinita (.Text) dei Text Box in modo non sicuro, senza
    controlli e non canonico. Dove per canonico intendo almeno :

    codice:
    If scorta >= Val( Text6.Text)  Then
    ....
    ....
    End If
    Ciao, Brainjar

  5. #5
    ...scusate per il ritardo,ma dopo vari tentativi continuo a non risolvere il problema.
    VVoVe:

    Il codice che mi hai suggerito Brainjar e cioè:
    codice:
    ...
    Dim rs As New ADODB.Recordset
    selezione = "select scorta from prodotto where idprodotto= " + Text4 + ";"
    rs.Open selezione, db
    ' Nota, si da per scontato l'esistenza del campo scorta nel recordset con un valore valido.
    scorta = rs.Fields("scorta").Value
    
    ' A questo punto puoi fare il controllo .....
    If scorta >= Text6 Then 
    ....
    ....
    Else
    ....
    ....
    End If

    non funziona come dovrebbe, infatti mi dà il seguente errore:

    "errore di compilazione tipo definito dall'utente non definito"

    Ho modificato la dichiarazione con
    codice:
    Dim rs As Recordset
    ma mi dà il seguente errore:
    "errore di compilazione Impossibile trovare il metodo o il membro dei dati" selezionandomi l'istruzione rs.open



    C'è un modo per risolvere questo problema?
    grazie

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.