Newsgroup: it.comp.appl.access
Titolo: Problemi con la select

ciao a tutti e Buon Natale
 
non mi spiego perche', se non spezzo
la select, dalla prima Case Is =1,2
non mi passa alla 1 o 2 successiva
Grazie
 
  Opzione = 1
Punto1:
  Select Case Opzione
    Case Is = 1, 2
    strSql = vbNullString
    strSql = strSql & "SELECT TbImpostazioni.*, "
    strSql = strSql & "Bancale, Confezione, UnitàMisura "
    strSql = strSql & "From TbUnitàMisura "
    strSql = strSql & "INNER JOIN (TbConfezioni "
    strSql = strSql & "INNER JOIN (TbBancali "
    strSql = strSql & "INNER JOIN TbImpostazioni "
    strSql = strSql & "ON TbBancali.IdBancale = TbImpostazioni.IdBancale) "
    strSql = strSql & "ON TbConfezioni.IdConfezione = TbImpostazioni.IdConfezione) "
    strSql = strSql & "ON TbUnitàMisura.IdUnitàMisura = TbImpostazioni.IdUnitàMisura "
  End Select  <------------
  Select Case Opzione <-----------
    Case Is = 1
    strSql = strSql & "WHERE IdProdotto1 = " & Frm!CboProdotto.Value
    strSql = strSql & "And IdCliente1 = " & cliCriterio()
    Case Is = 2
    strSql = strSql & "WHERE IdProdotto = " & Frm!CboProdotto.Value
 
  End Select
  Set rst = CurrentDb().OpenRecordset(strSql)
 
  Risposta = vbYes
 
  If rst.EOF Then
    Opzione = 2
    GoTo Punto1
  Else

Ciao,
all'interno dell'istruzione select solo uno dei blocchi di codice viene eseguito ed é il primo la cui espressione condizionale risulta vera, i successivi blocchi vengono saltati anche se le condizioni sono vere. 
Nel tuo caso primo select è addirittura superfluo perché la condizione risulta sempre vera, togliendo la select il risultato sarà uguale.
Visto ilgiorno ti chiedo un regalo: sostituisci quel goto con un do-loop, a Natale niente spaghetti :)
Ciao
buon Natale
Mat.


grazie Potone


Go to???? non puoi proprio fare diverso?

Franco mi meraviglio che dopo tutto questo tempo ancora fatichi a scrivere codice in modo razionale.
 
Quello che hai scritto non serve a nulla....
 
Prova a studiare perchè così fa la stessa cosa:
    strSql = vbNullString
    strSql = strSql & "SELECT TbImpostazioni.*, "
    strSql = strSql & "Bancale, Confezione, UnitàMisura "
    strSql = strSql & "From TbUnitàMisura "
    strSql = strSql & "INNER JOIN (TbConfezioni "
    strSql = strSql & "INNER JOIN (TbBancali "
    strSql = strSql & "INNER JOIN TbImpostazioni "
    strSql = strSql & "ON TbBancali.IdBancale = TbImpostazioni.IdBancale) "
    strSql = strSql & "ON TbConfezioni.IdConfezione = TbImpostazioni.IdConfezione) "
    strSql = strSql & "ON TbUnitàMisura.IdUnitàMisura = TbImpostazioni.IdUnitàMisura "
    strSql = strSql & "WHERE IdProdotto = " & Frm!CboProdotto.Value 
 
    If Opzione=1 Then strSql = strSql & " And IdCliente1 = " & cliCriterio()
 
    Set rst = CurrentDb().OpenRecordset(strSql) 
 
Per la questione del GOTO non s'ha da fare assolutamente si usa un DO LOOP...
 
@Alex


ciao Alex e grazie
 
questo è il codice incriminato, ma non sono riuscito a fare meglio........
ed ho anche altri problemi.......
Breve spiegazione..
In pratica ho una tbImpostazione, dove memorizzo le impostazioni di tutti
ed anche personalizzate per cliente.
In pratica se il prodotto è già inserito come personalizzato, deve essere
aggiornato come tale, ma se poi è uguale a quello generale sarà eliminato
dalle impostazioni personalizzate. 
 
  Dim rst As DAO.Recordset
  Dim strSql As String
  Dim Opzione As Integer
  Dim Risposta As Variant
  Dim X As String
 
  Opzione = 1
Punto1:
  strSql = vbNullString
  strSql = strSql & "SELECT TbImpostazioni.*, "
  strSql = strSql & "Bancale, Confezione, UnitàMisura "
  strSql = strSql & "From TbUnitàMisura "
  strSql = strSql & "INNER JOIN (TbConfezioni "
  strSql = strSql & "INNER JOIN (TbBancali "
  strSql = strSql & "INNER JOIN TbImpostazioni "
  strSql = strSql & "ON TbBancali.IdBancale = TbImpostazioni.IdBancale) "
  strSql = strSql & "ON TbConfezioni.IdConfezione = TbImpostazioni.IdConfezione) "
  strSql = strSql & "ON TbUnitàMisura.IdUnitàMisura = TbImpostazioni.IdUnitàMisura "
  Select Case Opzione
    Case Is = 1
    strSql = strSql & "WHERE IdProdotto1 = " & Frm!CboProdotto.Value
    strSql = strSql & "And IdCliente1 = " & cliCriterio()
    Case Is = 2
    strSql = strSql & "WHERE IdProdotto = " & Frm!CboProdotto.Value
 
  End Select
  Set rst = CurrentDb().OpenRecordset(strSql)
 
  Risposta = vbYes
 
  If rst.EOF And Opzione = 1 Then
    Opzione = 2
    GoTo Punto1
 
  End If
 
  If Not rst.EOF Then
    If rst!IdBancale = Frm!CboBancale.Value And _
      rst!IdConfezione = Frm!CboConfezione.Value And _
      rst!IdUnitàMisura = Frm!CboUnitàMisura.Value Then
      MsgBox "Questo Prodotto è già inserito!", vbInformation, "Informazione!"
      GoTo Fine:
    Else
      X = "Msgbox('" & Replace(Frm!CboProdotto.Column(1), "'", "''") & _
      "@" & IIf(rst!IdBancale <> Frm!CboBancale.Value, rst!Bancale & _
      " > " & Frm!CboBancale.Column(1), rst!Bancale) & _
      "@" & IIf(rst!IdConfezione <> Frm!CboConfezione.Value, rst!Confezione & _
      " > " & Replace(Frm!CboConfezione.Column(1), "'", "''"), rst!Confezione) & _
      "  " & IIf(rst!IdUnitàMisura <> Frm!CboUnitàMisura.Value, rst!UnitàMisura & _
      " > " & Frm!CboUnitàMisura.Column(1), rst!UnitàMisura) & _
      vbLf & "vuoi aggiornarlo?',4,'"
      If IsNull(rst!IdProdotto1) Then
        Risposta = Eval(X & "*** AGGIORNAMENTO ***')")
      Else
        Risposta = Eval(X & "*** AGGIORNAMENTO PRODOTTO PER CLIENTE ***')")
 
      End If
 
    End If
 
  End If
 
  If (Risposta = vbYes) Then
    DoCmd.SetWarnings False
    'DoCmd.OpenQuery "Qry_Agg_TbImpostazioniProd"
    DoCmd.OpenQuery "Qry_Agg_TbImpostazioniProdxCli"
    DoCmd.SetWarnings True
    Eval ("Msgbox('" & Replace(Frm!CboProdotto.Column(1), "'", "''") & _
    "@" & Frm!CboBancale.Column(1) & _
    "@" & Replace(Frm!CboConfezione.Column(1), "'", "''") & "  " & _
    Frm!CboUnitàMisura.Column(1) & "',0,'*** INSERITO ***')")
 
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "Qry_Del_ImpostazionixCli"
    DoCmd.SetWarnings True
 
  End If
 
Fine:
  Set rst = Nothing