+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: INSERT INTO & UPDATE

  1. #1
    Gianm non è in linea Novello
    Post
    9
    Il mio problema qs:
    Ho 3 tabelle una rappresenta un magazzino (A) facciamo che sia formata da ID e quantità, un altra gli ordini che vorrei fare nell'anno (B) contiene un ID dell'ordine, data, ID prodotto, Quantità, e priorità nella terza metto gli ordini per la giornata dove distinguo una quantità da produrre e una da prelevare (in base al magazzino).
    La sintassi è:
    INSERT INTO [C] ( IDOrdine, IDProdotto, QOrdine, QMagazzino, Priorità, Qeffettiva )
    SELECT ['B].CodiceOrdine, A.IDCodice, ['B].QOrdine, A.QMagazzino, ['B].Priorità, IIf(['B].[QOrdine]>=[A].[Qmagazzino],['B].[QOrdine]-[A].[Qmagazzino],0)
    FROM A INNER JOIN ['B] ON A.IDCodice = ['B].Prodotto
    WHERE B.Data=1;

    ecco, tutto funziona salvo una cosa.... se ho due ordini uguali nella stessa giornata e quantità ie 50 a magazzino, tutti e due decidono che possono produrne ['B].quantità - 50 invece logicamente solo il primo potrà farlo!
    E' un po' complicato da spiegare.....
    cmq in sostanza vorrei spostare gli ordini da B&A in C uno per volta e che quando faccio insert into mi faccia contemporaneamente l'update del magazzino... cioè quando la condizione iif è vera oltre a fare ['B].[QOrdine]-[A].[Qmagazzino] aggiornasse a.qmagazzino...
    Inoltre come posso fare in modo di inserirli uno per volta???? (ad esempio potrei usare un do/loop con l'insert into e update)
    è possibile???? Qualcuno ha qualche altra idea???
    Grazie

  2. #2
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Secondo me c'è un errore di impostazione del tuo DB.
    il Magazzino sembra un programma Semplice da realizzare ma non lo è.
    Primo devi dividere la movimentazione del magazzino dagli ordini (Creare la tabella per la movimentazione e le tabelle per gli ordini)
    Gli ordini avranno 2 tabelle fondamentali una l'intestazione dell'ordine e l'altro il materiale ordinato. tutti gli ordini Sia quelli giornalieri che quelli annui risiederanno nella stessa tabella, avranno un campo che ti dirà che tipo di ordine è giornaliero, annuo Ecc. Una campo per sapere se in corso se l'hai evaso ecc.

    e 1 tabella per la movimentazione
    inseguito tramite le maschere è possibile richiare un ordine ed evaderlo chiudere l'ordine ed creare il relativo movimento

    Questa è un idea.
    Ma se sei già avanti con il lavoro se spieghi un po meglio il problema forese riesco ad aiutarti.

  3. #3
    Gianm non è in linea Novello
    Post
    9
    Il mio non è un programma gestionale ma uso il data base per un simulatore...
    in pratica programmo la produzione a monte, dopodichè ogni giorno dico al sistema cosa realizzare e in che quantità produrre (occupando quindi det risorse) e in che quantità prelevare (occupando ie solo il muletto) poi assegnati questi attributi gestisce tutto il simulatore.
    Questa è quindi la prima query che mi mette gli ordini pianificati in una tabella temporanea da cui uno ad uno li vado a pescare e li esplodo nei sottoprodotti aggiornando costantemente il magazzino con dei cicli do/loop. Il problema è che, mettendoli tutti assieme, ciascun ordine legge lo stesso valore di magazzino. Così se io inserisco assieme un ordine:
    IDOrdine| IDProdotto | Quantità:
    1| 2| 100;
    2| 2| 200;
    e in magazzino ho già 100 pezzi di 2 quella query, unita a una successiva, che decide quanto produrne e quanto prelevarne (basandosi su quella che ho chiamato Qeffettiva) mi dice:
    dell'ordine 1 me ne produci 0 e prelevi 100; dell'ordine 2 ne produci 100 e prelevi 100
    ma quei 100 che sono a magazzino o li preleva l'ordine 1 o il 2! Io vorrei allora che l'1 aggiornasse il magazzino a 0 così che il 2 lo vede vuoto e produce 200 anzichè fare 100 prodotti e 100 prelevati.... tutto questo nela passaggio dalla Pianificazione alla tabella temporanea.
    A me come logica pareva funzionare anche se è la mia prima esperienza sia di SQL che di Access che di VBA... però poi ho trovato sto baco per cui nn posso lanciare 2 ordini uguali lo stesso giorno....

  4. #4
    vb6_ non è in linea Scolaretto
    Post
    469
    Ciao, se ho capito bene devi far capire al tuo programma il concetto di "impegnato" cioè:

    Q.ta disponibile a magazzino dell'articolo 1 = 100 pz
    Ordine 1 articolo 1 preleva 100 pz (impegnali per l'ordine 1)
    Ordine 2 articolo 1 "produci" 200 pz perchè a magazzino ce ne sono zero (gli unici 100 gli hai impegnati prima)

    Giusto?
    Se è così potresti:

    do
    1- Pescare il primo ordine dalla tabella temporanea "magazzino" originale e if q.tà trovata <> 0 then stoccare l'informazione nella tabella ordini else "produci" i pezzi che ti servono e stocca l'informazione nella tabella produzione
    2- Aggiornare la tabella temporanea "magazzino" (- 100 pz.)
    loop until.......quel che vuoi

    Ci siamo + o - ?

    Ciao

  5. #5
    Gianm non è in linea Novello
    Post
    9
    Si, funzionare funziona. Tra l'altro facevo già qualcosa di simile in un altra parte di codice... [img]smileys/smiley41.gif[/img]
    peccato che un altro ciclo mi rallenta tutto ancora di più...
    cmq per ora l'importante è che vada!
    Grazie per l'aiuto!

+ Rispondi al Thread

Discussioni simili

  1. [ACCESS] UPDATE tabella con VBA
    Da The Gang nel forum Access
    Risposte: 2
    Ultimo Post: 05-10-2006, 16:32
  2. [Access]Update multipla
    Da Vanessa nel forum Access
    Risposte: 1
    Ultimo Post: 10-03-2006, 19:34
  3. Insert MySql
    Da fmc_alfredo nel forum PHP
    Risposte: 6
    Ultimo Post: 16-10-2005, 18:55

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi