Newsgroup: it.comp.appl.access
Titolo: Esempio Microsoft non funzionante.

Ho scaricato dal sito della Microsoft il database che mostra alcune
operazioni con le maschere. Il file è FrmSmp00.
Relativamente a come numerare le righe di una sottomaschera, il codice
di quel database mi da un errore di runtime non appena avvio l'esempio.
Ecco il codice in oggetto:
Option Compare Database
Option Explicit
'============================================================
' The following function is used by the subLineNumber form
'============================================================
Function GetLineNumber(F As Form, KeyName As String, KeyValue)
   Dim rs As Object
   Dim CountLines As Integer
   On Error GoTo Err_GetLineNumber
   Set rs = F.Recordset.Clone
   ' Find the current record.
   Select Case rs.Fields(KeyName).Type
      ' Find using numeric data type key value?
      Case adSmallInt, adTinyInt, adBigInt, adInteger, adDecimal,
adNumeric, adCurrency, adSingle, adDouble
         rs.FindFirst "[" & KeyName & "] = " & KeyValue
      ' Find using date data type key value?
      Case adDate
         rs.FindFirst "[" & KeyName & "] = #" & KeyValue & "#"
      ' Find using text data type key value?
      Case adChar, adVarChar
         rs.FindFirst "[" & KeyName & "] = '" & KeyValue & "'"
      Case Else
         MsgBox "ERROR: Invalid key field data type!"
         Exit Function
   End Select
   ' Loop backward, counting the lines.
   Do Until rs.BOF
      CountLines = CountLines + 1
      rs.MovePrevious
   Loop
Bye_GetLineNumber:
         ' Return the result.
         GetLineNumber = CountLines
         Exit Function
Err_GetLineNumber:
         CountLines = 0
         Resume Bye_GetLineNumber
End Function
Precisamente la riga è:
rs.FindFirst "[" & KeyName & "] = " & KeyValue
poichè KeyValue è NULL
richiamata dalla casella di testo con la seguente riga:
=GetLineNumber([Form];"pkeyOrdLineDetailID";[pkeyOrdLineDetailID])
ove i nomi tra parentesi sono i nomi dei campi della tabella
tblOrdLineDetails.
Che devo fare per evitare questo errore? Nel mio database, riadattando,
ottengo tutti 0...
Grazie :)

 ha scritto nel messaggio 
news:1119218077....@g49g2000cwa.googlegroups.com...






   On Error GoTo Err_GetLineNumber
   Set rs = F.Recordset.Clone



         Exit Function

End Function
Precisamente la riga è:

poichè KeyValue è NULL




Grazie :)
Premesso che l'esempio fornito da microsoft è perfettamente funzionante, ti 
consiglio di vedere se in pkeyOrdLineDetailID hai inserito dei valori e 
precisamente se hai utilizzato il campo con tipo contatore e chiave 
primaria.
Ovviamente puoi cambiare il nome del campo (MioIndice) purchè lo cambi anche 
nell'origine del controllo nella sottomaschera.
Ciao, Carlo

 ha scritto nel messaggio news:1119218077....@g49g2000cwa.googlegroups.com...






   On Error GoTo Err_GetLineNumber
   Set rs = F.Recordset.Clone



         Exit Function

End Function
Precisamente la riga è:

poichè KeyValue è NULL




Grazie :)
[risposta]
Prova con:
rs.FindFirst "[" & KeyName & "] = " & Nz(KeyValue,0)
Ciao.
-- 
Sergio MAZZA 

Grazie ragazzi. Oggi sono a Milano e non posso fare prove...domani vi
farò sapere.
Cmq gli esempi dovrebbero anche tenere conto di valori null....ma la M$
è la M$  :D

 ha scritto nel messaggio news:1119261393....@g44g2000cwa.googlegroups.com...
Grazie ragazzi. Oggi sono a Milano e non posso fare prove...domani vi
farņ sapere.
Cmq gli esempi dovrebbero anche tenere conto di valori null....ma la M$
č la M$  :D
[risposta]
Girando il problema; se la MS dovrebbe tenere conto di tutte gli "incidenti di percorso" che possono verificarsi sai quanto dovrebbe 
essere lungo quell'esempio?
E' ovvio che chi utilizza gli esempi (qualsiasi essi siano e provenienti da qualsiasi fonte) devi studiarli e riadattarli per le tue 
necessitą...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio
news:1119218077....@g49g2000cwa.googlegroups.com...

Scusami, ma KeyValue è il valore della chiave primaria e con Access una
chiave primaria NON può essere mai Null.
Tutto lascia pensare che il campo pkeyOrdLineDetailID NON sia la chiave
primaria dell'oggetto origine record della maschera/sottomaschera,
altrimenti non potrebbe avere, come ho scritto sopra, il valore Null.
La funzione di cui sopre presuppone invece che gli venga passato, oltre al
nome della maschera, il nome ed il valore della chiave primaria e funziona
solo a quella condizione.
Resta il fatto che con una versione italiana di Access in un computer che
abbia le Impostazioni internazionali di Windows in settate ad Italiano
standard, la funzione di cui sopra non funziona se la chiave primaria è di
tipo Data/ora; per farla funzionare occorre sostituire la riga:
rs.FindFirst "[" & KeyName & "] = #" & KeyValue & "#"
con la riga:
rs.FindFirst "[" & KeyName & "] = #" & Format(KeyValue, "mm/dd/yyyy") & "#"
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

Ciao Rob, dunque il campo pkeyOrdLineDetailID è chiave primaria della
tabella tblOrdLineDetail. La subLineNumber, ovvero la sottomaschera
inclusa in frmLineNumber, ha come origine record una query e
precisamente qryOrderLineNumbers. Forse per questo quel campo poteva
avere valore NULL.

Ciao....questa funzione mi restituisce sempre 0....

avere valore NULL.
Se vuoi usare occorre che la query che č origine record della sottomaschera
abbia una chiava primaria univoca e che non possa contenere il valore Null;
puoi ottenere questo inserendo nella query un campo calcolato una
numerazione progressiva: a tale scopo vai sul Sito Comune e nella Sezione
Queries leggi queste due FAQ:
1) 2.1 Come posso inserire nella mia query un campo progressivo? di Stefano
Bettini
2) 2.16 Come si puņ ottenere il totale progressivo di un campo in una query
e come si puņ numerare progressivamente le righe di una query? mia


Ovvero: devo basare le maschere su delle query? Forse è meglio che mi
riveda un attimino l'esempio M$ e legga le due FAQ.
Grazie :)

Grazie :)
-- 
