Newsgroup: it.comp.appl.access
Titolo: tipo variabile nella fuzione

ciao a tutti
in questa funzione.......
 
Public Function fctImpPredProd(myForm) 
Dim x As Long, x1 As Long, x2 As Long
 
myForm!CboBan = IIf(x = False, 1, x)
myForm!CboUM = IIf(x2 = False, 1, x2) 
myForm!CboConf = IIf(x1 = False, myForm!CboConfezione, x1)
 
ho usato come variabile Long, trattandosi della colonna della casella combinata;
e' forse meglio Variant?
 
inoltre e' corretto usare false in mncanza di valori?
 
grazie

Ma chi valorizza quelle variabili..?
Quella funzione scritta così è inutile ed assurda... quante forma hai con tre combo chiamate così..? 3 o 4 oppure solo 1..?
 
Magari se leggi la guida capisci meglio che la proprietà Column di una combo/list restituisce un Vartype di tipo string quindi magari devi rivedere le considerazioni ...
 
@Alex


ciao Alex
quello mostrato era solo un esempio.
Questa è il codice completo: 
 
Public Function fctImpPredProd(myForm)
 
' da richiamare con: Call fctImpPredProd(Me)
 
  Dim Rst As DAO.Recordset
  Dim strSql As String
  Dim X As Long, x1 As Long, x2 As Long
 
  strSql = "SELECT * FROM TbImpostazioni WHERE IdProdotto =" & myForm!CboProdotto
  Set Rst = CurrentDb().OpenRecordset(strSql)
 
  If Not Rst.EOF Then
    Rst.MoveFirst
    X = Rst!IdBancale
    x1 = Rst!IdConfezione
    x2 = Rst!IdUnitàMisura
 
  End If
 
  strSql = "SELECT * FROM TbImpostazioni WHERE IdCliente =" & cliCriterio()
  Set Rst = CurrentDb().OpenRecordset(strSql)
 
  If Not Rst.EOF Then
    Rst.MoveFirst
    X = Rst!IdBancale
    x2 = Rst!IdUnitàMisura
 
  End If
 
  strSql = "SELECT * FROM TbImpostazioni WHERE IdProdotto1 =" & myForm!CboProdotto & _
    " And IdCliente1 =" & cliCriterio()
  Set Rst = CurrentDb().OpenRecordset(strSql)
 
  If Not Rst.EOF Then
    Rst.MoveFirst
    X = Rst!IdBancale
    x1 = Rst!IdConfezione
    x2 = Rst!IdUnitàMisura
 
  End If
 
  myForm!CboBancale = IIf(X = False, 1, X)
  myForm!CboUnitàMisura = IIf(x2 = False, 1, x2) 'va prima della confezione, perchè in assenza della stessa, l'Unità Misura non viene inserita
  myForm!CboConfezione = IIf(x1 = False, myForm!CboConfezione, x1)
 
  Set Rst = Nothing
 
End Function

 
....
 
Franco, non serve a nulla una funzione di quel tipo.
 
Oltretutto contiene una enormità di errori.
 
Esempio:
 
If Not Rst.EOF Then
    Rst.MoveFirst
    X = Rst!IdBancale
    x1 = Rst!IdConfezione
    x2 = Rst!IdUnitàMisura 
 
Estrai un RS da un ID(Univoco) selezionato, quindi primo non può NON ESISTERE, di conseguenza se esiste è UNIVOCO a cosa serve il MOVEFIRST...?
 
Ma la cosa più grave è che tu esegui 3 Test... e li esegui tutti e 3, per che motivo lo sai solo tu..., ma di certo non sai quale ha restituito o valorizzato le variabili...
 
Boh....
@Alex


ciao Alex e grazie
 
ho ho una tbimpostazioni cosi composta
Idimpostazioni contatore
IdCliente numerico (duplicati non ammessi)
idCliente1 numerico (duplicati ammessi)
IdProdotto numerico (duplicati non ammessi)
IdProdotto1 numerico (duplicati ammessi)
IdBancale numerico (duplicati ammessi)
IdConfezione numerico (duplicati ammessi)
IdUnitàMisura numerico (duplicati ammessi)
 
ho fatto tre query perchè non sono riuscito con una
sola ad ottenere il risultato.
 
La prima query mi restituice le impostazioni
generiche, che valgono per tutti;
mentre le ultime due sono persolanlizzate.
 
In pratica i valori dell'ultima query prevalgono
su quelle precedenti, cosi la seconda prevale sulla prima.
 
grazie ancora per l'aiuto.

Franco non si fanno queste cose... nel modo più assoluto...NO.
Devi scrivere le condizioni in modo che la prioritaria se verificata ESCLUDA altri controlli... 
 
@Alex


grazie Alex


ciao Alex
ho poi fatto cosi:
 
Public Function fctImpPredProd(myForm)
 
' da richiamare con: Call fctImpPredProd(Me)
 
  Dim Rst As DAO.Recordset
  Dim strSql As String
  Dim X As Variant, x1 As Variant, x2 As Variant
 
  strSql = "SELECT * FROM TbImpostazioni" _
    & " WHERE IdProdotto1 =" & myForm!CboProdotto.Value _
    & " And IdCliente1 =" & cliCriterio()
  Set Rst = CurrentDb().OpenRecordset(strSql)
 
  If Not Rst.EOF Then
    X = Rst!IdBancale
    x1 = Rst!IdConfezione
    x2 = Rst!IdUnitàMisura
    GoTo Fine
 
  End If
 
  strSql = "SELECT First(TbImpostazioni.IdBancale) As IdBancale," _
    & " Last(TbImpostazioni.IdConfezione) As IdConfezione," _
    & " First(TbImpostazioni.IdUnitàMisura) As IdUnitàMisura" _
    & " From TbImpostazioni" _
    & " WHERE IDProdotto =" & myForm!CboProdotto.Value _
    & " OR IdCliente=" & cliCriterio()
  Set Rst = CurrentDb().OpenRecordset(strSql)
 
  If Not Rst.EOF Then
    X = Rst!IdBancale
    x1 = Rst!IdConfezione
    x2 = Rst!IdUnitàMisura
 
  End If
 
Fine:
  myForm!CboBancale.Value = IIf(IsNull(X), 1, X)
  myForm!CboUnitàMisura.Value = IIf(IsNull(x2), 1, x2) 'va prima della confezione, perchè in assenza della stessa, l'Unità Misura non viene inserita
  myForm!CboConfezione.Value = IIf(IsNull(x1), myForm!CboConfezione.Value, x1)


 Oltretutto contiene una enormità di errori.
 
 
Eh, vedi che a qualcosa serve
Seguendo la teoria 'del mezzo pieno', serve a scoprire che era piena di 
errori
 


in effetti Alex avava ragione
;-)


questa è corretto definirla Function?


No


grazie