Newsgroup: it.comp.appl.access
Titolo: Ancora Stored Procedure...

Ciao a tutti.
Ho una maschera che ottiene il recordsource con una stored. Sulla stessa 
maschera vorrei aggiungere un comando attraverso il quale filtrare 
ulteriormente i dati. Ho pensato di usare questa routine, ma sono stato 
troppo 'ottimista':
Forms!CreaServizio!Calendario.recordsource = NomeStoredDaEseguire
Come devo fare?
Ciao e grazie per il prezioso aiuto 

 ha scritto nel messaggio 
news:46cc0d46$0$36439$4faf...@reader5.news.tin.it...

Ciao Agos,
Il manuale di Access dice:
----
È possibile impostare la proprietà RecordSource utilizzando la finestra 
delle proprietà della maschera o del report, una macro o Visual Basic.
Per impostare tale proprietà in Visual Basic, utilizzare un'espressione 
stringa.
----
Quidi
----
Forms!CreaServizio!Calendario.recordsource = "NomeStoredDaEseguire"
----
Ciao
--
Giorgio Rancati
[Office Access MVP] 

-------------------------------------------------------------------------


Ciao Giorgio


OK, mancavano le virgolette. Ma adesso il problema 
è un altro: non riesco ad indicare correttamente il criterio di selezione 
su un campo di tipo 'DateTime' contenente orari in questo formato:  
30/12/1899 7.30.00. Dovrei filtrare nel campo 'OraInizio' i valori inferiori 
alle ore 12.00. La Stored è questa, dov'è l'errore?




ALTER PROCEDURE [dbo].[SelezionaEsterniMattina] 



@DataIns DateTime


AS


SELECT GIORNO AS Expr1, ID, GIORNO, IDAgente, 
Ufficio, Servizio, OraInizio, OraFine, Reperibile, Turno, Zona, Viabilità, 
NoteServizio, Turnazione, 


TurnoReperibilità, TipoAssenza, Assente, 
AssegnazioneAutom, OraInizRientro, OraFineRientro, DettaglioServ, TurnoRiposo, 
TurnoRiduzioneOrario, 


Turdom, Turmart, Progetto, OraInizio AS Expr2, 
Servizio AS Expr3, Assente AS Expr4


FROM dbo.ArchivioServizi


WHERE (OraInizio < CONVERT(DATETIME, '2007-08-22 
12:00:00', 102)) AND (GIORNO = @DataIns) AND (Servizio = 'Ctrr')


AND (Assente = 'False' OR


Assente IS NULL)


 


Ciao, grazie di nuovo, Agos


 
 



Assente IS NULL)
 dovresti dire anche cosa devi passare nel parametro @DataIns e cosa 
contengono i campi OraInizio e Giorno.
Da quello che posso intuire in @Datains passi una data senza la parte ora e 
i campi OraInizio e Giorno contendono rispettivamente la sola parte ora e la 
sola parte data.
quindi la Sp diventa (metto solo la where)
----
WHERE OraInizio < '12:00:00'
  AND  GIORNO = @DataIns
  AND  Servizio = 'Ctrr'
  AND (Assente = 'False' OR
       Assente IS NULL
        )
----
poi inserisci la Sp nella proprietà origine record passando la data nel 
formato che il manuale di T-SQL definisce ISO, questo per evitare 
incompatibilità con la lingua con cui si autentica l'utente a Sql Server.
----
Forms!CreaServizio!Calendario.recordsource = "NomeStoredDaEseguire " + 
Format(Date(),"'yyyymmdd'")
----
Se non ho indovinato fornisci maggiori dettagli.
:-)


Ciao Giorgio.
Vado con ordine:
Nel parametro @DataIns passo una data 'pescata' da un form;
I campi OraInizio e Giorno contegono dati del tipo DateTime:
esempio OraInizio: 30/12/1899 7.30.00
esempio Giorno: 10/09/1999 0.00.00
Ora semplifico la situazione così mi spiego meglio.
La vista che segue, che utilizzo per i miei esperimenti, funziona...
SELECT     GIORNO, OraInizio, OraFine, IDAgente
FROM         dbo.ArchivioServizi
WHERE     (GIORNO = CONVERT(DATETIME, '2004-01-15 00:00:00', 102))
... ma se sulla stessa vista aggiungo il filtro dell'ora, come appresso 
indicato, non funziona più,  non filtra alcun record (e ciò non è possibile 
perché ve ne sono)...
SELECT     GIORNO, OraInizio, OraFine, IDAgente
FROM         dbo.ArchivioServizi
WHERE     (GIORNO = CONVERT(DATETIME, '2004-01-15 00:00:00', 102)) AND 
(OraFine = CONVERT(DATETIME, '2007-08-23 07:30:00', 102))
... e non funziona neanche se scrivo:  (OraFine = '07:30:00')
Non v'è dubbio, pertanto, che dipende dal formato del parametro 'OraInizio', 
ma le mie 'conoscenze' non mi permettono di risolvere il problema (ho sempre 
usato Access e solo da poco i progetti di Access con SQL Server).
Quindi il problema adesso non è tanto far funzionare la Stored, quanto 
piuttosto imparare a filtrare le date e gli orari.
Può essere utile sapere che per ottenere le due viste qui sopra ho usato il 
'Query Designer' di <Microsoft SQL Server Management Studio Express>
Grazie per l'aiuto
Ciao Agos

 Grazie per l'aiuto
se le ore sono memorizzate con il riferimento data0 di Access allora dovrai 
attenerti alla stessa convenzione.
----
 SELECT     GIORNO, OraInizio, OraFine, IDAgente
 FROM         dbo.ArchivioServizi
 WHERE     GIORNO =  '20040115' AND
 (OraFine = '18991230 07:30:00'
----
Sql Server ha il riferimento della data0 impostato a '19000101'
Spero che i dati immessi nel database provengano solo da fonte ODBC 
altrimenti ti ritrovi un pasticcio di ore, alcune che hanno data0 = 18991230 
altre che hanno data0 = 19990101


Ciao Giorgio
La tabella è stata trasferita da un db access su SQL Server
Grazie alle indicazioni che mi hai fornito, le stringhe SQL che seguono 
funzionano entrambe correttamente
SELECT     GIORNO, OraInizio, OraFine, IDAgente
FROM         dbo.ArchivioServizi
WHERE     (OraInizio = '18991230 07:30:00') AND (GIORNO = CONVERT(DATETIME, 
'2006-09-22 00:00:00', 102))
SELECT     GIORNO, OraInizio, OraFine, IDAgente
FROM         dbo.ArchivioServizi
WHERE     (OraInizio = '18991230 07:30:00') AND (GIORNO = '20060922 
00:00:00')
Peraltro, per un problema analogo, mi sono impantanato anche nel creare un 
report in Visual Basic 6,
dove il parametro giorno è pescato da un form. Non ho ancora verificato, ma 
credo che questa sia la soluzione anche in quel caso.
Ti ringrazio del prezioso aiuto. Mi hai risolto un grosso problema e credo 
di aver capito qualcosa in più.
Ciao e grazie di nuovo
Agos