Visualizzazione dei risultati da 1 a 7 su 7

Discussione: database sql server

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    283

    database sql server

    ciao a tutti, sono passata da alcuni giorni da un database access a un database sql server.
    la maggior parte dei problemi sono riuscita a risolverli velocemente ma ho un problema che dopo due giorni non ne levo le gambe.
    ho una pagina asp che mi estrae i dati delle statistiche visite in base all'orario con access andava tutto bene adesso non funziona più e non riesco proprio a trovare la soluzione

    posto il codice che con access funziona
    -----------------------------------------------------
    'creo le variabili dell'orario

    for i = 1 to 12

    If i = 1 then
    nomeOra_1(i)="0.00.00"
    nomeOra_2(i)="2.00.00"
    nomeOra_3(i)="00.00.00 - 02.00.00"
    End If

    If i = 2 then
    nomeOra_1(i)="2.00.01"
    nomeOra_2(i)="4.00.00"
    nomeOra_3(i)="02.00.00 - 04.00.00"
    End If

    If i = 3 then
    nomeOra_1(i)="4.00.01"
    nomeOra_2(i)="6.00.00"
    nomeOra_3(i)="04.00.00 - 06.00.00"
    End If

    If i = 4 then
    nomeOra_1(i)="6.00.01"
    nomeOra_2(i)="8.00.00"
    nomeOra_3(i)="06.00.00 - 08.00.00"
    End If

    If i = 5 then
    nomeOra_1(i)="8.00.01"
    nomeOra_2(i)="10.00.00"
    nomeOra_3(i)="08.00.00 - 10.00.00"
    End If

    If i = 6 then
    nomeOra_1(i)="10.00.01"
    nomeOra_2(i)="12.00.00"
    nomeOra_3(i)="10.00.00 - 12.00.00"
    End If

    If i = 7 then
    nomeOra_1(i)="12.00.01"
    nomeOra_2(i)="14.00.00"
    nomeOra_3(i)="12.00.00 - 14.00.00"
    End If

    If i = 8 then
    nomeOra_1(i)="14.00.01"
    nomeOra_2(i)="16.00.00"
    nomeOra_3(i)="14.00.00 - 16.00.00"
    End If

    If i = 9 then
    nomeOra_1(i)="16.00.01"
    nomeOra_2(i)="18.00.00"
    nomeOra_3(i)="16.00.00 - 18.00.00"
    End If

    If i = 10 then
    nomeOra_1(i)="18.00.01"
    nomeOra_2(i)="20.00.00"
    nomeOra_3(i)="18.00.00 - 20.00.00"
    End If

    If i = 11 then
    nomeOra_1(i)="20.00.01"
    nomeOra_2(i)="22.00.00"
    nomeOra_3(i)="20.00.00 - 22.00.00"
    End If

    If i = 12 then
    nomeOra_1(i)="22.00.01"
    nomeOra_2(i)="23.59.59"
    nomeOra_3(i)="22.00.00 - 24.00.00"
    End If

    ' in questa riga c'è il problema il campo ora è un campo time(2)

    sql ="SELECT SUM(num_visite) AS visite FROM visite WHERE (anno = '"& anno &"' AND mese = '"& mese &"' AND giorno= "& giorno &" AND (cdate(ora) = #"& nomeOra_1(i) &"# OR cdate(ora) > #"& nomeOra_1(i) &"#) AND (cdate(ora) = #"& nomeOra_2(i) &"# OR cdate(ora) < #"& nomeOra_2(i) &"#))"
    ----------------------------------------------------------------------------------------

  2. #2
    dicci quale è il problema...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    283
    inizialmente mi dice che cdate non va bene e lo sostituisco con CONVERT(datetime, data, 105)

    poi non vuole i segni # e quindi li elimino

    poi dice che non va bene nomeOra_1(i) perchè non è corretto ".00" sostituisco il punto con i due punti 00:00:00 ma a questo punto non vuole i due punti ":"
    se modifico 00.00.00 con 00.00 non dà errore ma non legge correttamente l'ora e quindi estrae i record sbagliati.

  4. #4
    data e ora in mssql non vogliono # (che è solo di access) ma '

    poi se vuoi un dato orario puoi usare il ragionamento al contrario

    ... AND Hour(ora)>0 and Hour(ora)<2... per ottenere da 02:00:00.00 a 01:59:59.00

    così per tutti gli altri

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    283
    ciao optime
    grazie dell'aiuto che mi stai danto.
    ho sostituito la riga sql così


    sql ="SELECT SUM(num_visite) AS visite FROM visite WHERE (anno = '"& anno &"' AND mese = '"& mese &"' AND giorno= "& giorno &" AND (Hour(ora) = '"& nomeOra_1(i) &"' OR Hour(ora) > '"& nomeOra_1(i) &"') AND (Hour(ora) = '"& nomeOra_2(i) &"' OR Hour(ora) < '"& nomeOra_2(i) &"'))"

    però mi dà questo errore

    ----------------------------------------------------------------
    Microsoft OLE DB Provider for SQL Server error '80040e14'

    'Hour' is not a recognized built-in function name.

  6. #6
    mmmm ho fatto confusione, devi usare DATEPART http://msdn.microsoft.com/it-it/library/ms174420.aspx

    DATEPART(hour,Ora)>=0 AND DATEPART(hour,Ora)<2

    per avere tra 0.00 e 1.59


  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    283
    la tua soluzione adesso funziona optime però mi fa una selezione solo sulle ore,
    seguendo il tuo link ho fatto alcune prove e sono arrivata a questo punto

    se scrivo la riga sostituendo
    # con '
    datatime con time
    105 con 108

    adesso funziona

    sql ="SELECT SUM(num_visite) AS visite FROM visite WHERE (anno = '"& anno &"' AND mese = '"& mese &"' AND giorno= "& giorno &" AND CONVERT(time,ora,108) >= '"& nomeOra_1(i) &"' AND CONVERT(time,ora,108) <= '"& nomeOra_2(i) &"')"

    grazie mille

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.