Newsgroup: it.comp.appl.access
Titolo: Like con iff non filtra

Salve, in una semplice query
utilizzando il filtro sotto
Like 
IIf(([Forms]![frmCriteria9]![ValoreSe])=1;"*";([tblArticoli].[QuantitàMagazzino])<>0)
se il valore del "ValoreSe" 1 tutto OK mi elenca tutti i  record
mentre se diverso non filtra i dati come dovuto.
Grazie

Mi sembrava che qualcuno di voi avesse accennato alla possibilità di 
controllare quanti utenti sono collegati sul BE, ho controllato sui vari 
siti ma non sono riuscito a trovar niente, avrei anche la necessità se 
possibile di fargli un logout (scollegarli) anche brutalmente se necessario 
ma questo è meno importante.
-- 
Saluti Andrea
Access 2003 - Windows XP 


www.donkarl.com/it?FAQ3.14
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 ma questo è meno importante.
per scollegarli in modo brutale  vi è la possibilità di spegnergli il PC
con il comando shutdown -s -f -m \\nome_computer_in_rete -t :secondi 
questo nella finestra start - esegui-cmd
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 questo nella finestra start - esegui-cmd
Ma questa è un pò troppo brutale non ti pare?
Saluti Andrea 

VedoTondo ha scritto:

Io ho implementato una gestione in un'applicativo fatta al fine di fare
manutenzione...!
Ho 2 Tabelle nel BE di questo tipo:
tblLogin
UserName(Text)
TimeIN(Data)
TimeOut(Data)
ForceLogout(Boolean)
tblEnableAccess
AllowAccess(Boolean)
Quando un Client tenta di fare il Login prima leggo la tblEnableAccess,
quindi se True
scrivo con una Query INSERT i dati di ingresso...!
Nel Client uso una Form(Hidden) che su Timer ogni Minuto, va a leggere
il campo ForceLogout
relativo, e se lo trova settato=True inizia il CountDown per la
chiusura.
A parte mi sono realizzato un applicativo di Manutenzione con il quale
posso forzare il Logout del singolo e di tutti e mantenere bloccato
l'accesso.
Ovviamente i test iniziali li eseguo con ODBC e non con
LinkedTable(quelle le rimuovo sempre).
@Alex

 ma questo è meno importante.
Potresti provare aleggere il .ldb
Pero':
1) il notepad lo legge ma non si capisce nulla.Editplus lo legge 
correttamente, da VBA "nin so" (in sola lettura). Il record sembra lungo 
69 caratteri e c'e' la stazione e lo userid
2) ldb puo' non esserci (una favola, tutti scollegati)
3) ldb puo' essere rimasto in piedi (in tal caso un "kill" ti dice se e' 
"occupato" o meno e fai pure pulizia)
4) c'e' un altro problema ma mi viene troppo lungo descriverlo
5) trovata la stazione puoi mandare un messaggio "gentile" di richiesta 
scollegamento, altrimenti gli spegni la macchina ;<) (io sono sempre per 
la mazzetta da 5 chili da far abbattere sulla tastiera)
-- 
ac
y-1=x

Alessandro Cara wrote:
P.S.
Nel caso di terminal server ovviamente la stazione e' sempre la stessa.
-- 
ac
y-1=x

LinkedTable(quelle le rimuovo sempre).
Quindi usi Ado?


 la mazzetta da 5 chili da far abbattere sulla tastiera)
Ho capito ed è molto interessante, non tanto la mazzetta che preferirei
evitare :-) ma il fatto di leggere il file .ldb


 Nel caso di terminal server ovviamente la stazione e' sempre la stessa.
Infatti anche se ancora non ho attivo il Server 2003 che mi dovrebbero 
installare a giorni, la cosa potrebbe essere utile in futuro ed 
effettivamente la soluzione di Alex è diffilcile da realizzare ma credo che 
andrò in quel verso.


 Access 2003 - Windows XP
@Alex

recordset con ODBC nell'Help)
Ok, ci provo, se poi ho eventuali dubbi ti chiedo.


 ha scritto nel messaggio 
news:1168413348....@i39g2000hsf.googlegroups.com...
NO.... se uso JET uso sempre e solo DAO(via ODBC, vedi come si apre un
recordset con ODBC nell'Help)
Nel frattempo ho buttato giù due righe di codice:
'---------------------------------
Private Sub csldisattivabe_AfterUpdate()
    DoCmd.Hourglass True
    Dim rsattiva As DAO.Recordset
    Dim AllowAccess
    Set rsattiva = CurrentDb.OpenRecordset("tblEnableAccess")
    If csldisattivabe.Value = 0 Then
        Me.csldisattivabe = False
        AllowAccess = False
    Else
        Me.csldisattivabe = True
        AllowAccess = True
    End If
    Set rsattiva = Nothing
    DoCmd.Hourglass False
End Sub
'-------------------------------------
Visto che è la prima volta che scrivo DAO da solo, mi dici se sono sulla 
strada giusta?
Questa l'ho messa su una casella di spunta in una maschera che si apre solo 
agli amministrator
Sembra che funzioni...........


VedoTondo ha scritto:

No, questo metodo da per scontato che la tabella "tblEnableAccess" sia
in CurrentDb(quindi in locale o Linkata)... cosa che non è vero...!
Prova a vedere nell'Help :
Oggetto Connection, trovi un demo che penso sia proprio quello che ti
serve...!
@Alex

 ha scritto nel messaggio
news:1168443181....@k58g2000hse.googlegroups.com...
No, questo metodo da per scontato che la tabella "tblEnableAccess" sia
in CurrentDb(quindi in locale o Linkata)... cosa che non č vero...!
Prova a vedere nell'Help :
Oggetto Connection, trovi un demo che penso sia proprio quello che ti
serve...!
Domani ci riprovo oggi nell'help ho trovato di tutto ma non quello che
cercavo, penso sempre di piů che sia robba da esperti l'HELP, stasera se ho
tempo guardo anche sul libro, grazie comunque.


 ha scritto nel messaggio
news:1168443181....@k58g2000hse.googlegroups.com...
No, questo metodo da per scontato che la tabella "tblEnableAccess" sia
in CurrentDb(quindi in locale o Linkata)... cosa che non è vero...!
Prova a vedere nell'Help :
Oggetto Connection, trovi un demo che penso sia proprio quello che ti
serve...!
[risposta]
Come ti ho accennato non sono riuscito a trovare una soluzione con DAO,
ancora prematuro per me però ho risolto il problema grazie ai tuoi preziosi
consigli e alla mia testardaggine.
Ti spiego:
database nuovo con tabella controllabe e campo boleano
nel FE ho collegato la tabella, ho creato una maschera con una casella di
spunta collegata alla tabella controllabe e nelle maschere che ho da
chiudere quando è il momento di fare manutenzione, ho inserito sull'evento
timer (10000) questo codice:
'---------------
Dim controllo As String
controllo = DLookup("blocco", "bloccobe")
    If controllo = True Then
        DoCmd.Close
        DoCmd.OpenForm "apertura"
        MsgBox "stiamo effettuando manutenzione", , "ATTENZIONE"
    End If
'------------------
mi pare che possa andare anche se devo dire che con il giusto codice dao 
dava un tocco di classe in più, però ti ringrazio comunque anche perchè son 
due giorni che aggeggio con dao e con connecting string ect e il database 
sono riuscito ad aprirlo ed a crearlo, poi però nun sò che fa'...... 
comunque si apre una strada nuova :-)
Saluti Andrea 

VedoTondo ha scritto:

Ciao Andrea.
   Dim wrkJet As DAO.Workspace
   Dim dbs As DAO.Database
   Dim rstTemp As DAO.Recordset
   Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
   Set dbs = wrkJet.OpenDatabase("C:\TuoBE.mdb")
   ' Ora apri la tabella ti Test per l'accesso:
   Set tstTemp=dbs.Openrecordset("tblAccesso")
   ' Supponi abbia solo un campo Boolean come dicevamo
   ' se = FALSE non accedi
   If rs.Field(0)=False then
        Msgbox "NON PUOI ACCEDERE"
        rs.close
        dbs.close
        wrkjet.close
        set rs=Nothing
        set dbs=Nothing
        set wrkjet=Nothing
        Docmd.Quit
    End if
    ' Prima di chiudere tutto
    ' Fai il test del Login se esiste sempre aprendo un RS
    ' in questo modo sulla tabella Utenti
    ' Se il Test(Login) va a buon Fine LINK delle tabelle altrimenti
QUIT
    rs.close
    dbs.close
    wrkjet.close
    set rs=Nothing
    set dbs=Nothing
    set wrkjet=Nothing
    ....
Fammi sapere se hai risolto...
@Alex

 news:1168443181....@k58g2000hse.googlegroups.com...
Ciao Andrea.


[risposta]
Ciao Alessandro
Ti chiedo due cose:
1) MANCA LA DICHIARAZIONE DI tstTemp che devo mettere recordset?
2) MANCA LA DICHIARAZIONE DI  rs che devo mettere recordset?
2)NON CAPISCO QUESTA:  Set wrkJet = CreateWorkspace("", "admin", "",
dbUseJet) puoi spiegarmela?


 Access 2003 - Windows XP
Ciao
@Alex

 dbUseJet) puoi spiegarmela?
-Hai letto l'Help su cosa sia un WorkSpace...?, praticamente è un'area
-di lavoro indipendente
-nella quale aprirai un'oggetto DB(con tutti i figli a carico), e visto
-che non devi sfruttare quella del DB corrente ne crei una dedicata...!
L'ho letto e il workspace l'ho capito in linea di massima però ancora non 
esempi funzionanti per capire cosa inserire tra le ""
Questo week end ti giuro che lo passo a studiare......


VedoTondo ha scritto:
[CUT]
Supponiamo di avere la Tabella "tblAccesso" con un solo campo di tio
Boolean.
Avendo un solo Field(campo) questo verrà individuato dall'indice 0
nella Collection Fields
che è l'insieme che conterrebbe tutti i Field membri dell'Oggetto
Recordset.
Pertanto quando ho aperto il mio RS basato sulla "tblAccesso" sò che
l'indice 0 è quello da usare...!
   Dim wrkJet As DAO.Workspace
   Dim dbs As DAO.Database
   Dim rs As DAO.Recordset
   Dim User as String
   Dim Pwd as string
   Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
   Set dbs = wrkJet.OpenDatabase("C:\TuoBE.mdb")
   ' Ora apri la tabella ti Test per l'accesso:
   Set rs=dbs.Openrecordset("tblAccesso")
   ' Supponi abbia solo un campo Boolean come dicevamo quindi ha
indice=0 nella
   ' Collection Fields
   ' se = FALSE non accedi
   If rs.Field(0)=False then
        Msgbox "NON PUOI ACCEDERE"
        rs.close
        dbs.close
        wrkjet.close
        set rs=Nothing
        set dbs=Nothing
        set wrkjet=Nothing
        Docmd.Quit
    End if
    rs.close
    ' Prima di chiudere tutto
    ' Quì apri una Form in modalità Dialog in cui l'utente inserisca
User e Pwd
    ' quindi recuperi i valori ed effettui il test sulla tblUtenti
    ' Per recuperare i dati dovresti NON CHIUDERE LA FORM, ma renderla
NON VISIBILE
    ' il codice avendo usato la modalità acDialog si era bloccato e
riprende solo quando diventa
    ' non visibile....!
    User=Forms!NomeFormLogin!User
    Pwd=Forms!NomeFormLogin!Pwd
    ' Ora la Form di Login è ancora aperta quindi la chiudiamo
    Docmd.Close acForm, "FormLogin"
    set rs=dbs.Openrecordset("SELECT * FROM tblUtenti WHERE User='" &
User & "'")
    If rs.Eof Then msgbox "utente non presente":exit Sub
    If Pwd<>rs!password then Msgbox "Pasword Errata!":exit Sub
    ' Ora puoi fare il LINK delle tabelle altrimenti
QUIT
    rs.close
    dbs.close
    wrkjet.close
    set rs=Nothing
    set dbs=Nothing
    set wrkjet=Nothing
    ....
Non l'ho provato ma ho scritto di getto pertanto prova a ricontrollare
eventuali errori....
@Alex

 ha scritto nel messaggio 
news:1168625690.7...@m58g2000cwm.googlegroups.com...
VedoTondo ha scritto:
[CUT]




Penso che la pazienza che hai sia tanta :)
Quasta vale qualche bistecca anche se ancora non l'ho provato ed adesso 
faccio festa rinnovo l'invito per una cena con buon chianti ad innaffiare il 
tutto :), non tanto per l'utilizzo che ne devo fare che è pur sempre 
importante ma per quello che stò imparando.


 Saluti Andrea
@Alex

cose...!
:-)
Attento che non sai a che rischio vai incontro....
Io sono appassionato di poche cose, tra queste c'è la Toscana, il vino
e la fiornetina.... potresti pentirti....
;-)
Se ti piacciono anche le donne abbiamo gli stessi gusti e comunque se 
qualche volta vuoi venire a Firenze non ti riguardare a chiamare perchè a 
casa mia si "aggiunge un posto a tavola" molto facilmente (anche due o più 
se necessario).
Non ti nascondo che se poi volete fare un ritrovo a Firenze coll'NG la 
bistecca è per tutti, però senza fare cisa o altro, si mangia e si beve end 
case
Comunque, veniamo al dunque............
Primo problema su questa riga:
Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
 mi dice che nomeutente e/o password sono errati
ma a quale nomeutente si riferisce? Ho tolto anche la password al database 
ma non funge comunque!
Secondo problema, impossibile trovare il membro dei dati e si posiziona su 
questa riga:
If rs.Field(0) = False Then
tu la dichiari come rs as dao.recordset ma a me non torna, sicuramente hai 
ragione tu e probabilmente il
problema risiede nel fatto che non riesce a trovare la tabella in questione 
e questo mi riporta al punto uno e quindi fino a che non riesco a capire stò 
workspace come si riesce a crearlo/aprirlo, non ci levo le gambe.
Nel frattempo ho sviluppato il tutto senza dao ed ho creato un meccanismo 
che funge, in pratica sul form timer delle maschere che mi interessa (o 
anche su tutte) ho inserito un tempo di 10000 e nell'evento gli ho chiesto 
di controllare il campo se true o no ovviamente in attesa del tanto ambito 
dao ho usato il dlookup che poi sostituirò, ovviamente su true eseguo il 
close e rimando alla maschera centrale del progetto avvertendo che stiamo 
facendo manutenzione, ho messo anche nel form load delle maschere in 
questione un "Me.TimerInterval = 300" in maniera che ciclicamente mi và a 
ricontrollare la tabella e quindi anche a maschera già aperta butto fuori 
chi la stà usando.
Ovviamente nella maschera centrale del progetto controllo anche lì 
ciclicamente se il campo è true o false e se è true faccio partire un ciclo 
abbastanza lungo da permettermi le operazioni di compattamento e bekup del 
caso e poi ristabilisce il false in automatico, questo per non rischiare di 
dimenticarmi il ripristino.
Ovviamente la maschera centrale del progetto avendo solo pulsanti di accesso 
non è collegata e quindi non crea problemi a tutti i vari processi.
Ho fatto così perchè non mi andava di chiudere in faccia il programma ai 
miei colleghi e quindi così facendo il programma rimane aperto ma non fà far 
niente per un determinato periodo.
Bellissimo, se riesco a far girare anche il tuo codice mi gaso sicuramente 
:-)
Saluti Andrea 

 Saluti Andrea
Buon lavoro
@Alex

 Saluti Andrea
@Alex

Beh se l'utente volesse finire un salvataggio....?
Vedrň di gestire anche questo evento, un passo per volta!
Comunque sono arrivato in fondo:
  Dim stringa As String
    Dim origine As String
    Dim dbdest As DAO.Database
    Dim rsdest As DAO.Recordset
        Set dbdest = OpenDatabase("\\server\archivio\login.mdb", False, 
False, ";PWD=miapassword")
    Set rsdest = dbdest.OpenRecordset("bloccobe")
    If rsdest(0) = True Then
        MsgBox "stiamo facendo manutenzione"
        DoCmd.Close
        DoCmd.OpenForm "apertura"
    End If
    rsdest.Close
    dbdest.Close
    Set rsdest = Nothing
    Set dbdest = Nothing
poi vedrň di andare avanti con la seconda parte
Saluti Andrea 

VedoTondo ha scritto:
Vedi questo:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=274
@Alex

 
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=274
Gran bel lavoro, perň oramai mi hai aperto una strada e comincio a trovarci
gusto, se poi uso il tuo devo ricominciare da capo, perň lo sfrutto per
qualcosina ;-)!
E' stupendo come scrivi il codice, scrivi una riga dove a me ce ne vuole 5.
Guarda, per attivare e/o disattivare il campo ho fatto cosě!
 If rsdest(0) = True Then
        rsdest.Edit
        rsdest(0) = False
        rsdest.Update
    Else
        rsdest.Edit
        rsdest(0).Value = True
        rsdest.Update
    End If
Non č difficile DAO, mi aveva sempre fatto paura metterci le mani ed
invece....... se ci legge il Dima gli piglia un colpo :-)
Pensa che č la prima volta che riesco a leggere, modificare e salvare dati
in una tabella non collegata da solo.
Ps: Ma tu usi la protezione utente anche sul BE?
-- 
Saluti @ndrea