Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di yyzyyz
    Registrato dal
    Oct 2001
    Messaggi
    1,653

    [vb6] confronto date

    Ciao ragazzi, il mio problema è il seguente , ho una tabella1 di un db access dove all'interno vi sono due campi di nome "Dal" e "Al" , volevo sapere se ce un modo per far si che quando creo un nuovo record che rientra in uno dei 2 intervalli "Dal" "Al" mi avvisi con un messaggio.
    esempio:

    codice:
         dal                al
    01/01/2000     15/01/2000
    20/01/2000     26/01/2000
    se ora creo un nuovo record con campo dal 14/01/2000 al 15/01/2000 mi dovrebbe dire che quel periodo è gia' occupato.

    grazie x eventuali aiuti.

  2. #2
    Utente di HTML.it L'avatar di StegcO
    Registrato dal
    Aug 2008
    Messaggi
    371
    Ciao,

    missà che devi fare un ciclo confrontando ogni campo Dal-Al presente nel DB con i valori che stai in quel momento cercando di inserire.
    /

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Più semplicemente, potresti creare una query in cui specifichi nella clausola WHERE dell'istruzione SELECT le condizioni che consentono di valutare se il valore ricade o meno nell'intervallo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it L'avatar di yyzyyz
    Registrato dal
    Oct 2001
    Messaggi
    1,653
    grazie x le risposte,
    StegcO se fosse cosi avrei un controllo solo sulle date uguali dal e al, con che regola farei il ciclo?

    Alka se faccio una select mi estrappola i dati a me interessa un confronto + inserimento.

    Sul mio form ho 2 textbox che sono collegate ai campi Dal-AL, praticamente devo fare un confronto sul range / intervallo che mi generano i campi DAL - AL con le 2 textbox,
    questo quando creo un nuovo record.
    Mi dovrebbe evitare di creare nuovi record se sono dentro quel range (Dal-AL).


  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Prima devi verificare

    codice:
    SELECT COUNT(*) AS Quanti
    FROM Tabella
    WHERE (#01/14/2000# BETWEEN dal AND al) AND (#01/15/2000# BETWEEN dal AND al)
    e se la query ti restituisce Quanti=0 allora inserisci il record.

    In realtà credo che ti basterebbe verificare solo la prima data, perchè (se non ho capito male) in effetti mi pare che tu stia confrontando dei periodi, per cui se anche una sola delle date rientra in un qualsiasi periodo (dal-al) dei record non dovrai inserire il nuovo record.


  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da yyzyyz
    Alka se faccio una select mi estrappola i dati
    Appunto. I dati restituiti ti servono per capire se puoi aggiungere il record con l'intervallo (se non vi sono altri record con periodi analoghi) oppure no.

    Vedi l'esempio che ti ha riportato gibra.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di yyzyyz
    Registrato dal
    Oct 2001
    Messaggi
    1,653
    grazie x il tips Gibra, infatti stavo lavorando ad una cosa del genere, con la tua stringa ricevo un errore di sistassi su rsTmp.Open sql (errore di runtime bla bla ....forse sbaglio io).

    codice:
    Private Sub Command1_Click()
    ' salva record
    Call connettiTmp
    mydal = Format(CDate(Txtfield(1).Text), "mm/dd/yyyy")
    myal = Format(CDate(Txtfield(2).Text), "mm/dd/yyyy")
    ''' x test
    'mydal = Format(CDate(Txtfield(1).Text), "yyyy/mm/dd")
    'myal = Format(CDate(Txtfield(2).Text), "yyyy/mm/dd")
    
    'sql = "select * FROM tabella1 where (dal between '" & mydal & "' and '" & myal & "')"
    'sql = "select * FROM tabella1 where (dal between #" & mydal & "# and #" & myal & "#)"
    'sql = "select * FROM tabella1 where (dal>=#" & mydal & "# and dal<=#" & myal & "#)"
    'sql = "SELECT COUNT(*) AS Quanti From Tabella1 WHERE" & _
          "(dal BETWEEN #" & mydal & "# AND #" & myal & "#) AND " & _
          "(al BETWEEN #" & mydal & "# AND #" & myal & "#)"""
    sql = "SELECT * From tabella1 WHERE" _
           & "(dal BETWEEN #" & mydal & "# AND #" & myal & "#) AND " _
           & "(al BETWEEN #" & mydal & "# AND #" & myal & "#)"""
          
    Debug.Print sql
    If rsTmp.State = 1 Then rsTmp.Close
    rsTmp.Open sql
    
    ' datagrid2 solo x il debug
    Set DataGrid2.DataSource = rsTmp
    
    If rsTmp.RecordCount = 0 Then
            ' aggiungi record
            With rs
            .AddNew
            .Fields!nome = Txtfield(0).Text
            .Fields!dal = Txtfield(1).Text
            .Fields!al = Txtfield(2).Text
            .Update
             End With
        Else
            MsgBox "periodo non valido", vbCritical
        End If
    rsTmp.Close
    CnTmp.Close
    Set rsTmp = Nothing
    Set CnTmp = Nothing
    End Sub
    diciamo che con questa stringa sembra ke funzioni e non a volte popola in modo corretto altre volte no.
    codice:
    'sql = "select * FROM tabella1 where (dal between #" & mydal & "# and #" & myal & "#)"
    esempio, nel db ho un record dal 09/02/2011 al 13/02/2011, se inserisco sul form
    dal 10/02/2011 al 13/02/2011 mi da rsTmp.RecordCount=0 invece di 1 .. pkkè

    Avete qualke dritta ?

    grazie a tutti.

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da yyzyyz
    grazie x il tips Gibra, infatti stavo lavorando ad una cosa del genere, con la tua stringa ricevo un errore di sistassi su rsTmp.Open sql (errore di runtime bla bla ....forse sbaglio io).
    Tu dici? Credo anch'io...

    Originariamente inviato da yyzyyz
    Avete qualke dritta ?
    Sì, rileggi meglio la mia query perchè tu stai facendo tutt'altro.


  9. #9
    Utente di HTML.it L'avatar di yyzyyz
    Registrato dal
    Oct 2001
    Messaggi
    1,653
    scusa Gibra hai perfettamente ragione (la fretta), allora ora sto ulizzo questa e sembra ke vada bene.

    codice:
    sql = "select * FROM tabella1 where (#" & mydal & "# between dal and al) OR " _
        & "(#" & myal & "# between dal and al)"
    il problema è che se ho una prenotazione dal 09/02/2011 al 13/02/2011 e prenoto
    dal 08/02/2011 al 14/02/2011 la query non va piu bene xche non mi riconosce il periodo precedente.

    La query ke utilizzo vabene solo se uno dei due campi "Dal o "Al" rientra nei range di date trovati dall'interrogazione del db. se si potesse fare quest'ultimo controllo sarebbe perfetto

  10. #10
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da yyzyyz
    il problema è che se ho una prenotazione dal 09/02/2011 al 13/02/2011 e prenoto
    dal 08/02/2011 al 14/02/2011 la query non va piu bene xche non mi riconosce il periodo precedente.

    La query ke utilizzo vabene solo se uno dei due campi "Dal o "Al" rientra nei range di date trovati dall'interrogazione del db. se si potesse fare quest'ultimo controllo sarebbe perfetto
    Ma questo è un caso diverso da quello prospettato inizialmente, quindi occorre aggiungere un ulteriore controllo sulla condizione, bastava ragionarci un po' su:

    codice:
    WHERE (#02/08/2000# BETWEEN dal AND al) AND (#02/14/2000# BETWEEN dal AND al)
    OR (#02/08/2000# <= dal) AND (#02/14/2000# >= al)
    Se mi permetti :
    non capisco perchè ti ostini a costruire gli enunciati SQL in quel modo,
    quando usando i Command e relativi parametri di ADO non saresti costretto a fare tutti quei 'salti mortali' per formattare le date (Format, CDate, ...) che incasinano solo la lettura e la manutenzione del codice.

    Leggi il mio articolo che vedi in firma e capirai quanta fatica stai facendo per niente.



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.