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

    creare un database virtuale

    Salve, sto realizzando un applicazione in c++ per la gestione di magazzino dei prodotti acquistati, che deve prevedere anche la possibilità di gestire i pagamenti, tenendo presente della possibilità di pagare con acconti e più forniture contemporaneamente (per esempio pagare a fine mese tutte le forniture avute).

    ho questi DB

    codice:
    tabella FORNITORE:
    
    Cod | Nome | Indirizzo | Piva | Telefono
        |      |           |      | 
    
    Cod= PrimariKey, Intero
    Nome=Alfanumerico(40)
    Indirizzo=AlfaNumerico(50)
    Piva=Alfanumerico(11)
    Telefono=Alfanumerico(15)
    
    
    tabella MAGAZZINO:
    
    Cod | Cod_forn | Cod_accorpa |  Quantita | Unitario | Totale | Data
        |          |          |          |          |        |   
    
    Cod= PrimariKey, Intero
    Cod_forn=Intero, che si riferisce al campo Cod della tabella fornitori
    Cod_accorpa= Intero, che si riferisce al campo Cod della tabella accorpa
    Quantita=Intero
    Unitario=Valuta
    Totale=Valuta
    Data=Date
    
    
    tabella ACCONTI:
    
    Cod| Cod_accorpa | Acconto | Data | Note
        |         |          |      |   
    
    Cod= PrimariKey, Intero
    Cod_accorpa= Intero, che si riferisce al campo Cod della tabella accorpa
    Acconto=Valuta
    Data=Date
    Note=Alfanumerico(150)
    
    tabella ACCORPA:
    
    Cod | Totale
        |             |
    
    Cod= PrimariKey, Intero
    Totale= Valuta
    La tabella Fornitore è l'anagrafica del fornitore
    La tabella magazzino sono invece i vari movimenti di fornitura
    La tabella Acconti invece sono invece i vari pagamenti dati ai fornitori
    La tabella Accorpa invece serve per avere una relazione fra magazzino e acconti, infatti in questo modo posso unire insieme più forniture (per pagare più forniture per esempio) e unire più pagamenti (per usare gli acconti)

    il mio problema sta nel avere una nuova tabella che racchiuda tutto quanto, del tipo:

    codice:
    Fornitore | dal | al | Totale | Da saldare
        |         |          |      |
    dove il campo dal è il riferimento della data della prima fornitura
    il campo al invece è il riferimento della data dell'ultima fornitura
    il campo Totale invece è la somma dei costi delle varie forniture (se più di una)
    il campo da saldare invece è la differenza fra il campo totale e la somma degli acconti.



    Volevo un vostro aiuto perchè non so proprio come andare avanti


    Grazie mille

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma e' un progetto "accademico" o e' di "produzione"?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    non specifichi quale database stai usando. Inoltre non è chiaro quale problema di programmazione in c++ hai incontrato.
    Se invece ti riferisci ad un problema di SQL tieni presente che questi problemi non si risolvono creando una nuova tabella ma facendo una query mirata sulle tabelle esistenti (a patto che il tutto sia stato progettato correttamente), utilizzando i costrutti join, left join, union e così via.
    Però non so se in questo forum si discute di SQL
    ciao
    sergio

  4. #4
    Ma e' un progetto "accademico" o e' di "produzione"?
    sto facendo un programmino per l'azienda in cui lavoro.

    non specifichi quale database stai usando. Inoltre non è chiaro quale problema di programmazione in c++ hai incontrato.
    Se invece ti riferisci ad un problema di SQL tieni presente che questi problemi non si risolvono creando una nuova tabella ma facendo una query mirata sulle tabelle esistenti (a patto che il tutto sia stato progettato correttamente), utilizzando i costrutti join, left join, union e così via.
    Però non so se in questo forum si discute di SQL
    ciao
    sergio
    Per creare quella tabella virtuale, uso tutto le 4 tabelle scritte prima, per esempio

    fornitori è il campo nome della tabella fornitori
    dal e al sono presi dal campo data della tabella magazzino
    totale è preso dal campo totale della tabella accorpa
    da saldare è la differenza tra gli acconti presi dalla tabella acconto e il totale preso dalla tabella accorpa.

    il problema è in sql, cioè avere come risultato una nuova tabella con questi campi:
    codice:
    Fornitore | dal | al | Totale | Da saldare
        |         |          |      |

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Devi costruire la tua SELECT con una o piu' JOIN ...

    Ma quale DB utilizzi ? E perche' in C++ ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Devi costruire la tua SELECT con una o piu' JOIN ...
    è proprio li che ho il problema.. anche perchè in alcuni campi deve presentare la somma di più record di un altro db (per esempio gli acconti)

    Ma quale DB utilizzi ?
    avevo iniziato con paradox, ma sono passato a mysql

    E perche' in C++ ?
    sto usando c++ builder, quindi sono in ambito visuale, perchè è il linguaggio che conosco di più.

  7. #7
    Meglio se posti la definizione delle tabelle in SQL, in modo che siano facilmente ricreabili da chi magari potrà tentare d'aiutarti.
    A naso il tuo problema può essere risolto con una view.

  8. #8
    allora,
    magazzino è la tua tabella primaria. Se ho capito la struttura del tuo data base eliminerei la tabella accorpa, che fa solo confusione, matieni solo ACCONTI che strutturerei in questa maniera
    fornitore | acconto | data | note
    A questo punto la tua query risulta strutturata così
    (prendila con le pinze perchè è fatta a memoria)

    select fornitore,
    dal(**),
    al(**),
    sum(M.totale) as totale,
    sum(M.totale)-sum(A.acconto(*)) da_saldare
    from magazzino as M
    join acconti as A
    on M.fornitore=A.fornitore
    group by fornitore
    order by fornitore

    (*) - bisogna fare attenzione qui in quanto se per alcuni fornitori non è stato fatto alcun acconto mysql ritorna NULL che nella operazione dà un risultato NULL, allora devi inserire un if di cui non mi ricordo esattamente la sintassi ma dovrebbe essere sum(if(A.acconto is NULL, 0, A.acconto)), guardalo sul manuale.
    (**) anche qui guarda il manuale, dovrebbe esserci qualcosa come max o min, anche relativo ad una data.

    ciao
    sergio

  9. #9
    in questo modo però non tiene conto del periodo di riferimento e mi accumula tutti gli acconti x un fornitore, invece a me serve separare mese x mese, quindi per esempio dovrebbe restituirmi rossi mario dal 01/03/2008 al 31/03/2008 totale 300,00 € da saldare 250,00€, rossi mario dal 01/04/2008 al 30/04/2008 totale 150,00 da saldare 150,00.

  10. #10
    hai provato con max e min, anche se accettano una stringa per come è rappresentata la data in mysql max e min ritorna la data più alta e più bassa.
    ciao
    sergio

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 © 2024 vBulletin Solutions, Inc. All rights reserved.