Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871

    [access] classifica valori in caselle di testo

    Ho una tabella con 2 campi: CODICE e SCONTO
    Il campo SCONTO può avere 5 tipi valore, a seconda del codice. I valori del campo SCONTO possono però variare.
    Se ad esempio oggi ho:
    CODICE = 1 SCONTO = 10
    CODICE = 2 SCONTO = 20
    CODICE = 3 SCONTO = 30
    CODICE = 4 SCONTO = 40
    CODICE = 5 SCONTO = 50

    Domani posso avere:
    CODICE = 1 SCONTO = 30
    CODICE = 2 SCONTO = 10
    CODICE = 3 SCONTO = 60
    CODICE = 4 SCONTO = 25
    CODICE = 5 SCONTO = 80

    Premesso questo, la mia domanda è:

    In una form ho bisogno di visualizzare:
    dentro la CASELLA1 sempre il valore di SCONTO più alto
    dentro la CASELLA2 sempre il valore immediatamente inferiore alla CASELLA 1
    dentro la CASELLA3 sempre il valore immediatamente inferiore alla CASELLA 2
    dentro la CASELLA4 sempre il valore immediatamente inferiore alla CASELLA 3
    dentro la CASELLA5 sempre il valore immediatamente inferiore alla CASELLA 4

    In pratica una "classifica" degli sconti, dal più alto al più basso, ma sempre posizionati in ordine decrescente nelle CASELLE 1, 2, 3, 4, 5
    Come posso fare?
    Thanks
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Fammi capire bene. Questa tabella ha quindi solo 5 record? Se devi aggiornare gli sconti vai a modificare il valore numerico dei record già esistenti?
    Se è così i 5 valori sono sempre diversi o ce ne possono essere di uguali?

    Non vorrei dire una sciocchezza ma mi sembra che il predicato top di access non permetta di specificare un offset come in mysql, dove ad esempio per estrarre il secondo valore più alto puoi usare limit 1,1, per il terzo valore più alto limit 2,1 e così via.
    Credo si debba ricorrere a delle query annidate ma sarei lieto di essere smentito.

  3. #3
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Originariamente inviato da nicola75ss
    Fammi capire bene. Questa tabella ha quindi solo 5 record? Se devi aggiornare gli sconti vai a modificare il valore numerico dei record già esistenti?
    Se è così i 5 valori sono sempre diversi o ce ne possono essere di uguali?

    Non vorrei dire una sciocchezza ma mi sembra che il predicato top di access non permetta di specificare un offset come in mysql, dove ad esempio per estrarre il secondo valore più alto puoi usare limit 1,1, per il terzo valore più alto limit 2,1 e così via.
    Credo si debba ricorrere a delle query annidate ma sarei lieto di essere smentito.
    Si, la tabella ha solo 5 record e vado ad aggiornare sempre il valore esistente.

    In realtà la mia domanda è stata fatta per effettuare un "escamotage" per ottenere un determinato valore, quindi forse mi puoi aiutare a trovare una soluzione migliore.
    Mi spiego meglio:
    con questo codice vado a compilare una Form estraendo dalla tabella "tab_art_vend1" dove il codice ARTICOLO corrisponde a quello da me inserito nella form ed il LISTINO è uguale a quello inserito in un altro campo della stessa form:
    codice:
    Public Function cerca3() As Boolean
    
    Dim FRM As Form
    Set FRM = Forms("Pannello").vendite.Form
    
    Set ws = DBEngine.Workspaces(0)
    Set db = CurrentDb
    
    strSQL = "SELECT * FROM Tab_Art_Vend1 WHERE Articolo= '" & FRM!CODICE1 & "' And LISTINO = '" & Forms!pannello!Testo461 & "'"
    
    Set RS = db.OpenRecordset(strSQL)
    
    If RS.EOF Then
    GoTo errLogon
    End If
    Forms!pannello.vendite!barcode1 = RS!BarCodeVen
    Forms!pannello.vendite!descrizione1 = RS!Descri
    Forms!pannello.vendite!prezzo1 = RS!Prz
    Forms!pannello.vendite!Disp1 = RS!Attuale
    Forms!pannello.vendite!sconto1 = RS!sconto1
    Forms!pannello.vendite!Testo50 = RS!CodIVA
    Forms!pannello.vendite!Testo58 = RS!listino
    Forms!pannello.vendite!Testo67 = RS!CatMerc
    
    
    
    RS.Close
    db.Close
    Exit Function
    In realtà la mia esigenza è quella di estrarre dalla tabella sempre l'articolo il cui CODICE corrisponde a quello da me inserito nella form, ma (siccome ho diversi articoli con lo stesso CODICE ma con sconti diversi) di estrarmi quello con lo SCONTO più alto.
    Quindi dovrei modificare la parte che ho evidenziato in grassetto nel codice, ma non so come fare.
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Se ho ben capito ti serve una query del genere

    codice:
    select * 
    from 
    (select codice&'-'&max(sconto) as maggiore from tabella
    group by codice) as tab1
    left join tabella as tab2 
    on tab1.maggiore = tab2.codice&'-'&sconto
    where codice = 1
    Al posto di 1 metti il codice di cui stai cercando lo sconto maggiore.

  5. #5
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    ho provato con:

    codice:
    strSQL = "SELECT * FROM Tab_Art_Vend1 WHERE Articolo= '" & FRM!CODICE1 & "' And SCONTO = '" & Dmax("[sconto]","tab_art_vend1") & "'"
    Ma mi da l'errore "Tipi di dati non corrispondenti nell'espressione criterio"
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  6. #6
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Originariamente inviato da nicola75ss
    Se ho ben capito ti serve una query del genere

    codice:
    select * 
    from 
    (select codice&'-'&max(sconto) as maggiore from tabella
    group by codice) as tab1
    left join tabella as tab2 
    on tab1.maggiore = tab2.codice&'-'&sconto
    where codice = 1
    Al posto di 1 metti il codice di cui stai cercando lo sconto maggiore.
    Non c'è modo di inserirlo nel mio codice che ho postato?
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Prima prova la query in visualizzazione sql adattando i nomi dei campi al tuo contesto. Almeno vedi se la query ti restituisce ciò che ti aspetti.

  8. #8
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Originariamente inviato da nicola75ss
    Prima prova la query in visualizzazione sql adattando i nomi dei campi al tuo contesto. Almeno vedi se la query ti restituisce ciò che ti aspetti.
    Mi da "Tipi di dati non corrispondenti nell'espressione criterio"
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da Bugu
    Mi da "Tipi di dati non corrispondenti nell'espressione criterio"
    Carica da qualche parte (ad esempio su http://www.myfreefilehosting.com/) una tabella ridotta priva di dati sensibili in maniera da poterla provare.
    La query che ti ho scritto fa esattamente ciò che hai chiesto e l'ho testata prima di postarla. Starai sbagliando qualcosa.

  10. #10
    Utente di HTML.it L'avatar di Bugu
    Registrato dal
    Nov 2007
    Messaggi
    871
    Può essere che dipenda dal fatto che l'estrazione del dato si basa su 2 tipi di dati diversi?
    Cioè: il codice articolo è in formato testo, mentre lo sconto è in formato numerico.
    Ho fatto un pò di prove e sembrerebbe così.

    se ad esempio nel mio codice funzionante
    codice:
    strSQL = "SELECT * FROM Tab_Art_Vend1 WHERE Articolo= '" & FRM!CODICE1 & "' And LISTINO = '" & Forms!pannello!Testo461 & "'"
    vado a sostituire così
    codice:
    strSQL = "SELECT * FROM Tab_Art_Vend1 WHERE Articolo= '" & FRM!CODICE1 & "' And SCONTO = '" & Forms!pannello!Testo461 & "'"
    e nel Testo461 metto il valore 50 (che è uno degli sconti possibili per quell'articolo) a questo punto me lo deve trovare, mentre mi da sempre l'errore "Tipo di dati non corrispondenti nell'espressione criterio"

    Addirittura mi da lo stesso errore anche se metto nel codice un valore preciso:
    codice:
    strSQL = "SELECT * FROM Tab_Art_Vend1 WHERE Articolo= '" & FRM!CODICE1 & "' And SCONTO = '" & 50 & "'"
    Può essere perchè deve fare una doppia ricerca su un valore di testo ed uno numerico?
    Linux User
    ---------
    Solo due cose sono infinite: l'universo e la stupidità umana, e non sono tanto sicuro della prima.

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.