Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    problemi script con campo data/ora

    Salve,

    ho un database access in cui c'è presente una tabella mensa con i seguenti campi: tipoPato, DataPasto, Ref_Ospite.

    La maschera relativa, funziona in modo che all'inserimento del Ref_ospite, si registra il pasto.
    Adesso il mio problema è che il secondo giorno, quando effettuo di nuovo il pasto per lo stesso ospite,
    mi compare l'alert "pasto già effettuato". Posto di seguito lo script

    [code]

    Private Sub IDOspite_AfterUpdate()
    On Error GoTo Err_IDOspitePasto
    Dim MsgAlert As Variant
    Dim TipoPasto As String
    Dim OraAttuale As Date


    'If Not IsNull(Me![IDOspite].Value) Then .....eventuale controllo da inserire

    Dim inizioColazione As Date
    Dim fineColazione As Date
    Dim inizioPranzo As Date
    Dim finePranzo As Date
    Dim inizioCena As Date
    Dim fineCena As Date

    inizioColazione = Format(#6:00:00 AM#, "h:m:s")
    fineColazione = Format(#11:14:00 AM#, "h:m:s")
    inizioPranzo = Format(#11:15:00 AM#, "h:m:s")
    finePranzo = Format(#4:14:00 PM#, "h:m:s")
    inizioCena = Format(#4:15:00 PM#, "h:m:s")
    fineCena = Format(#10:00:00 PM#, "h:m:s")

    OraAttuale = Format(Me.OraAttuale, "h:m:s")
    TipoPasto = ""
    If (inizioColazione < OraAttuale) And (OraAttuale <= fineColazione) Then
    TipoPasto = "colazione"
    ElseIf (inizioPranzo < OraAttuale) And (OraAttuale <= finePranzo) Then
    TipoPasto = "pranzo"
    Else
    TipoPasto = "cena"
    End If


    With Me.Recordset
    .FindFirst "[ID] = " & Str(Nz(Me![IdOspite].Value, 0))
    If .NoMatch Then
    MsgBox "Identificativo ospite non trovato"
    Me.Nome = ""
    Me.Cognome = ""
    Me.Nazione = ""
    Me.IdOspite = ""
    DoCmd.GoToControl ("IDOspite")
    Me.Requery
    Exit Sub
    Else

    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open "Select * From Mensa where [ref_ospite] = " & Str(Nz(Me![IdOspite].Value, 0)) & " and TipoPasto ='" & TipoPasto & "'", _
    CurrentProject.Connection, adOpenKeyset, adLockOptimistic

    If Not rs.EOF Then
    MsgBox "Esiste già un pasto (" & TipoPasto & ") per questo ospite."
    Me.IdOspite.SetFocus
    'Exit Sub
    Else
    rs.AddNew
    rs("ref_ospite") = Me.IdOspite
    rs("TipoPasto") = TipoPasto
    rs("DataPasto") = Format(Now(), "dd/mm/yyyy")
    rs("OraPasto") = Me.OraAttuale
    rs.Update
    End If

    rs.Close
    Set rs = Nothing

    End If
    End With


    'End If
    DoCmd.GoToControl ("IDOspite")



    Exit_IDOspitePasto:
    Exit Sub


    Err_IDOspitePasto:
    MsgBox Err.Description
    Resume Exit_IDOspitePasto

    End Sub

    [\code]


    pensate che aggiungendo il ciclo if riguardante la definizione del tipo pasto, in un altro ciclo if riguardante la data, risolvo ? grazie anticipatamente.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mi sembra chiaro che nella SELECT devi includere anche la data, altrimenti i risultati non ne tengono conto.


    P.S. Non sono "script" ma "programmi".

    P.P.S. Il tag \code è sbagliato
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    scusa per l'errore \code.
    per quanto riguarda il select, io dico select * from mensa where.... devo anche aggiungere al where: mensa.data=now ?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non proprio così ma il concetto è quello
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non proprio così ma il concetto è quello

    Scusami se sono inopportuno, ma ho fatto la modifica che mi hai suggerito :

    codice:
     rs.Open "Select * From Mensa where [ref_ospite] = " & Str(Nz(Me![IdOspite].Value, 0)) & "    and DataPasto = '" & Date & "  and OraPasto = '" & Time & "    and TipoPasto ='" & TipoPasto & "'",
    che errore c'é ? mi sembra apposto ma non gli va a genio

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh, come fa a sembrarti a posto?

    Dopo DataPasto c'è un apice ma non c'è alla chiusura e così anche per OraPasto.
    In più i dati DataPasto e OraPasto sono dei testi nel DB? Se è così, attenzione al formato che usi perché se è diverso ovviamente il record non viene trovato.

    Infine, scusa ma che senso ha usare l'orario? E' ovvio che sarà comunque diverso tra un pasto e l'altro !
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Mi sembra chiaro che stai usando VB6 + database Access.
    Devi sapere che la formattazione delle query cambia a seconda del database utilizzato.
    Ergo, la tua query è sbagliata, in tal senso, oltre al fatto che contiene errori.

    Pertanto, devi usare un Command con Parametri per non arrovellarti sul come debbano essere formattati i dati. Se poi un domani cambi database, devi correggere tutte le query.
    Usando il Command, no!

    Guardati l'articolo con esempio che vedi nella mia firma su ADODB.


  8. #8
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Beh, come fa a sembrarti a posto?

    Dopo DataPasto c'è un apice ma non c'è alla chiusura e così anche per OraPasto.
    In più i dati DataPasto e OraPasto sono dei testi nel DB? Se è così, attenzione al formato che usi perché se è diverso ovviamente il record non viene trovato.

    Infine, scusa ma che senso ha usare l'orario? E' ovvio che sarà comunque diverso tra un pasto e l'altro !
    no, il campo DataPasto è di tipo Data/ora e cosi' anche il campo OraPasto, inoltre hanno come valori predefiniti rispettivamente, date() e time(), infatti mi da l'errore: "dati non corrispondenti nell'espressione criterio".

    L'orario lo uso per definire quando inizia e quando finisce un determinato TipoPasto e quindi se in un intervallo di tempo, la stessa persona, passa due volte, non può usufruire del pasto.

  9. #9
    Quote Originariamente inviata da mefisto_ax Visualizza il messaggio
    no, il campo DataPasto è di tipo Data/ora e cosi' anche il campo OraPasto, inoltre hanno come valori predefiniti rispettivamente, date() e time(), infatti mi da l'errore: "dati non corrispondenti nell'espressione criterio".

    L'orario lo uso per definire quando inizia e quando finisce un determinato TipoPasto e quindi se in un intervallo di tempo, la stessa persona, passa due volte, non può usufruire del pasto.

    Penso di aver risolto. ho trasformato DataPasto eOraPasto in tipo testo e credo che vada. TI faccio sapere domani.

  10. #10
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da mefisto_ax Visualizza il messaggio
    Penso di aver risolto. ho trasformato DataPasto eOraPasto in tipo testo e credo che vada. TI faccio sapere domani.
    Scusa la franchezza, ma fare questo è una grande porcheria (nel senso informatico del termine).

    I campi Data/Ora li hanno fatti apposta.

    Se fai questa operazione, poi ti troverai con un sacco di problemi irrisolvibili proprio perché qualsiasi tipo di ordinamento e qualsiasi condizione di filtro andrà a farsi benedire.
    Ed allora rimpiangerai di averlo fatto.

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.