Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    89

    confronto tra date

    Salve. Non sono espertissimo di VB6 però fino ad un paio di anni fa lo usavo comunque. Ora sono un pò arrugginito e avrei bisogno di un aiuto. Dunque: In una tabella di un .mdb ho un campo DATAISCRIZ che contiene record di tipo "testo". Questo campo viene riempito tramite textbox da programma secondo il formato gg/mm/aaaa, ma nel db, ripeto, è un campo di tipo testo e non data. Ora sono costretto - per richiesta del cliente - a modificare il programma in modo che interrogando il db la mia query estragga tutti i record che hanno il campo DATAISCRIZ con una data più vecchia di 12 mesi rispetto alla data attuale ( quella del momento in cui l'utente usa il programma ). Quindi, interrogando oggi 08/01/2006, la query mi deve estrarre tutti i records di quella tabella che presentino il campo DATAISCRIZ che vanno da gennaio 2005 all'indietro ( dic 2004, nov. 2004, ott 2004 ). Questo perchè il cliente vuole sapere chi degli iscritti al suo centro sportivo non è in regola con l'iscrizione ( rispetto al mese corrente ), iscrizione che ovviamente è valida un anno e va rinnovata ogni 12 mesi.
    Io avevo fatto così ( "last" è il nome della tabella ):

    Dim dtDataattuale as date

    dtDataattuale = Date

    strSQL = "SELECT * FROM last WHERE DateDiff("m", CDate(DATAISCRIZ), dtDataattuale) > 12"
    Set RS = DBArchivio.OpenRecordset(strSQL)

    'poi tutto il resto del codice ch visualizza i risultati in una Listview

    Il programma mi dà errore ai doppi apici del "mese" della funzione DateDiff. Io credo che la funzione da usare per il mio problema sia proprio DateDiff, ma non so proprio come costruire la query. Quello che interessa come discriminante è il mese ( chi ha rinnovato l'iscrizione 13 mesi fa e oltre è in ritardo, e deve essere visualizzato nella Listview ). Il giorno non è importante.
    Grazie dell'aiuto e scusate il poema!

  2. #2
    Ciao..ma come fai a dire con precisione che l'errore viene segnalato ai doppi apici del mese "m" ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    89
    mi da la riga della SQL in rosso e mi evidenzia la "m" del mese della funziona DateDiff. Ho provato mettendo gli apici singoli e l'errore scompare ma quando eseguo il programma mi da errore dicendo:

    "Errore di run-time '3061'.
    Parametri insufficienti. Previsto 1".

    E' come se la SQL così come composta è errata ( probabilmente a causa delle funzioni DAteDiff e Cdate ) e l'oggetto RS non riceve nulla in argomento.

    Come si può costruire la query per risolvere il mio problema?

    THANKS!!!

  4. #4
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    il problema esula dall'apposizione di apici singoli o doppi.

    è ovvio che in VB se chiudi gli apici, la sintassi corretta vorrebbe che l'istruzione termini, o che ci sia un concatenamento di stringhe con l'operatore &

    ma a parte questo, ho la netta impressione che la tua query sia stata creata con Access e copiata pari pari in VB...

    Questo è un problema.
    perchè il motore Jet che credo tu stia usando, non riconosce la funzione DateDiff, che è peculiare di Access.
    a mio avviso devi organizzare la query in altro modo.

    Boolean

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    89
    Che tu ci creda o no Boolean, non ho creato e copiato alcunchè da ACCESS. Ciò che vedi è ciò che ho "cogitato". Sono felice del tuo avviso circa il caso di costruire in altro modo la query ma se avessi saputo come farlo probabilmente non sarei venuto a disturbare voi tutti in questo forum! Attendo aiuti concreti grazie!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    89
    Scusa Boolean, non era per far polemica ma è che quando uno pone un quesito dubitando egli stesso del modo in cui ha costruito la propria query, si attende qualcosa di più in aiuto oltre che un semplice: "prova a reimpostare la query in altro modo". Perdona la risposta d'impeto precedente ^__^

  7. #7
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    ciao giaffa,

    la mia non era neanche minimamente un rimprovero, o una critica
    spesso prendo anche io le query che produco con Access per utilizzarle in VB... ma ovviamente hanno bisogno di un "adattamento"...
    era questo che cercavo di dirti.

    comunque, non ho ben chiaro cosa vuoi ottenere da questa query, ma probabilmente queste righe ti danno modo di capire il sistema da adottare, qualora quello che ho scritto non sia conforme a quello che vuoi ottenere:

    codice:
    cfrDate = A = DateAdd("m", -12, Date)
    strSQL = "SELECT * FROM last WHERE DATAISCRIZ > " & cfrDate
    fammi sapere, eventualmente descrivendomi il problema che hai

    Boolean

  8. #8
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, boolean, da quello che ha scritto giaffa non penso che vada bene la tua soluzione.
    Prova a riscrivere la query cosi:
    codice:
    Dim dtDataattuale as date
    
    dtDataattuale = Date
    
    strSQL = "SELECT * FROM last WHERE DateDiff(" & """m"", CDate(DATAISCRIZ), " & dtDataattuale & ") > 12"
    Set RS = DBArchivio.OpenRecordset(strSQL)
    Jupy

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    89
    Mi spiace tediarvi ma nessuna delle due soluzioni funziona. Quella di Boolean dà errore, nel senso che dice che manca un parametro ( come nel caso da me descritto a monte di questa discussione ). Per quanto riguarda la seconda soluzione così come è posta non dà errore di run-time ma si ottiene un errore logico, nel senso che la query non trova nulla in db quando invece ci sono record che corrispondono alla richiesta. Allora, cerco di spiegare meglio cosa voglio ottenere:

    Ogni mese, il titolare del centro sportivo, col programma da me realizzato due anni fa vuole ora poter fare questa ricerca. Premesso che il programma gli consente di registrare durante il mese corrente chi è in regola con il pagamento della retta mensile, vorrebbe poter vedere chi, tra questi in regola con la retta mensile, non è in regola con la tassa d'iscrizione annuale ( che vale 12 mesi ). Per far ciò si può utilizzare un campo di una tabella, il campo DATAISCRIZ appunto, che viene aggiornata dall'utente del programma ogniqualvolta il socio rinnova l'iscrizione. Il campo DATAISCRIZ è di tipo "testo" con il seguente formato gg/mm/aaaa. Ora, secondo me, il problema è che quando si va a fare la query da questo campo, in effetti si pesca in un campo testo, e non di tipo data, e la funzione Cdate inserita nella SQL evidentemente non riesce a funzionare o funziona male. Quando io faccio la query, devo pescare tutti quei record che rispetto alla data attuale ( quella del momento in cui l'operatore usa il programma ) abbiano un campo DATAISCRIZ più vecchio di 09/01/2005, per fare un esempio riferito ad oggi. Quindi, tutti quei records che presentano una DATAISCRIZ più vecchia di 09/01/2005 devono essere estrapolati dalla query e poi visualizzati in una LIstview ( che peraltro già funziona perfettamente ). Se per esempio, un tizio ha pagato la sua ultima iscrizione il 03/02/2005, non deve essere visualizzato tra i non in regola, perchè la discriminante assunta è il mese, non il giorno. Quindi, siccome ha pagato l'ultima volta a febbraio 2005, in effetti sono trascorsi solo 11 mesi e quindi è ancora in regola. Quando l'interrogazione verrà rifatta anche solo il 1° febbraio 2006, allora anch'egli dovrà essere estrapolato e visualizzato tra i non paganti. Spero di aver chiarito sufficientemente il problema. AIUTOOOOOOOOOOOOOOOOOOOOOOOO ^__^

  10. #10
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    il problema innanzitutto è quello di convertire il campo della data di iscrizione da formato testo a Data!
    credo che sia soprattutto per questo che non funzioni la soluzione che ti ho dato anche se, a dire il vero, non ho la possibilità di provarla.

    come pretendi di fare un controllo sulla data se quallo che confronti NON è una data?!

    Boolean

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.