Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    61

    [vb6] e cancellazione record access

    Salve raga
    Allora;
    Ho un una tabella articoli, e una tabella scarico.

    Nella tabella articoli c'e' un campo " esistenza" che e' l'esatta giacenza dell articolo.

    Quando memorizzo uno scarico praticamente sottroggo il valore della quantita scaricata nel documento nell' "esistenza" della tabella articoli.
    Se magari ho sbagliato ad effettuare lo scarico seleziono l' articolo e lo cancella eseguendo una query opposta a quella dell inserimento.
    Se pero devo cancellare direttamente l' intero documento non ci riesco :
    Io avevo provato cosi :

    Dim X As Integer
    X = 0
    Do While X < cn.Execute(rps).RecordCount
    ' rps e una query che mi da tutti i record del documento selezionato'
    X = X + 1
    Dim sqe As String
    sqe = " update articoli set esistenza ='" & Val(txtscarico.Text) + Val(txtesistenza.Text) & "' WHERE descrizione='" & txtdescrizione.text & "'"
    cn.Execute (sqe)
    cn.Execute(rps).MovePrevious
    Loop
    Dim rpr As String
    rpr = " delete * from scarico where numero =" & ndoc & ""
    cn.Execute (rpr)
    Dim rcc As String
    rcc = "SELECT DISTINCT numero,data from scarico"
    Set datagrid1.DataSource = cn.Execute(rcc)
    datagrid1.Width = 4300
    Sto provando praticamente prima a sommare di nuovo tutti gli scarichi del documenti all' esistenza negli articoli , dopodiche cancello tutto il documento.
    Non mi da errore nell' esecuzione , ma mi aggiorna solamente un solo articolo e non tutti quelli del documento.
    Altra domanda :
    In termini pratici e' meglio avere una tabella articoli con un campo esistenza che si aggiorna in base allo scarico ed al carico, oppure quando si apre un form "magazzino" e' meglio creare una query che somma i carichi e gli scarico al volo ???

    grazie ancora per l' attenzione
    Saluti
    Help me

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Leggere il tuo post non è stato facile, oltre a mancare di chiarezza nell'esposizione, non hai nemmeno formattato il codice, per cui la difficoltà nel leggere è aumentata.

    Da quello che ho capito io (se ho capito),
    quando elimini un documento vuoi aggiornare il campo esistenza di ogni articolo, ricaricando il valore precedentemente scaricato dal documento.

    per prima cosa mi chiedo il perchè di questa istruzione:
    Do While X < cn.Execute(rps).RecordCount
    che esegue la query ad ogni iterazione (non ha alcun senso!).
    Piuttosto dovresti fare così:
    codice:
    Dim nRec as long 
    nRec = rps.RecordCount
    Do While X < nRec
       '...
    Loop
    Ma secondo me invece il loop dovrebbe essere impostato così...
    (non conoscendo le tue tabelle, te lo scrivo in pseudo-codice):
    codice:
    Do While Not rps.EOF
        cn.Execute("UPDATE articoli SET esistenza = esistenza + qta-da-recuperare.... WHERE ....")
        rps.movenext
    Loop
    Rem Ora posso eliminare il documento
    cn.Execute("DELETE * FROM tabella where IDDocumento = " & idDocumento)
    Usare Do While Not rps.EOF è importante soprattutto perchè la proprietà RecordCount restituisce un valore corretto solo se la connessione è impostata sul cursore lato client. Lato server, invece, restituisce sempre -1.
    Ora, quando si eseguono operazioni di INSERT ed UPDATE è indispensabile inglobarle in una transazione (cn.BeginTrans/cn.CommitTrans), ma questo è reso possibile SOLO se si imposta il cursore della connessione su adUseServer .

    Le transazioni sono fondamentali, altrimenti si rischia molto (dati inconsistenti, perdita di dati, ecc.). Metti che ti si spenga il pc proprio in quel momento...

    Per concludere...
    Il fatto che ti aggiorni UN solo articolo è ovvio, questa istruzione legge sempre gli stessi dati
    codice:
    sqe = " update articoli set esistenza ='" & Val(txtscarico.Text) + Val(txtesistenza.Text) & _
        "' WHERE descrizione='" & txtdescrizione.text & "'"
    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    61
    Ciao Gibra , grazie per la risposta.
    Prima cosa , anche se non sono stato molto chiaro hai capito benissimo cio che intendevo.

    Ti dico , non sono un esperto, e sinceramente cio che ho imparato oltre che sui libri base, e' stato qui .

    Per assurdo avendo determinate conoscenze e volendo sviluppare applicativi per lo piu gestionali ( come avrai intuito) ho deciso di cominciare ( anche se non sono ancora in grado di farlo) piccoli programmini atti piu che altro a farmi capire le problematiche che potrei riscontrare nella creazione di applicazioni anche piu complesse.
    Quando qualcosa non riesce , mi informo, leggo , chiedo e quando risolvo metto nel cassetto.
    Detto cio, mi trovo daccordo che :

    Do While X < cn.Execute(rps).RecordCount
    che esegue la query ad ogni iterazione (non ha alcun senso!).
    Piuttosto dovresti fare così:
    codiceim nRec as long
    nRec = rps.RecordCount
    Do While X < nRec
    '...
    Loop

    e ancora piu giusto :

    Do While Not rps.EOF
    cn.Execute("UPDATE articoli SET esistenza = esistenza + qta-da-recuperare.... WHERE ....")
    rps.movenext
    Loop
    Rem Ora posso eliminare il documento
    cn.Execute("DELETE * FROM tabella where IDDocumento = " & idDocumento)

    Per cio che concerne le transazioni, non lo sapevo anche se comunque avevo pensato ad uno spegnimento accidentale del pc e avrei dovuto capire come fare nel caso succedesse.
    Studiero'

    Grazie Gibra a presto .

    P.s. come si mettono i riquadri :|

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Cosa intendi per riquadri? La formattazione del testo?
    Se è questo, ti basta selezionare il testo da 'formattare' e poi fai clic sul pulsante adeguato che sta sopra alla finestra di edit del post.
    Ad esempio, per formattare il codice devi usare il pulsante #.

    Se con il mouse passi sui pulsanti (e ti fermi!) il tooltip che appare ti spiega a cosa servono...


    Ciao

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.