 
View Full Version : un aiuto per piacere
federchicco
18-09-2003, 02:04
In visual basic con access, dovrei fare riferimento a una controllo
in una maschera per fare una ricerca con il comando find.
Esempio:
 rs1.FindFirst ("numero like '7' ")
 rs1.FindFirst ("numero like 'form![tabella1]|[camera]'")
La prima istruzione funziona la seconda non mi dà errore ma e come non ci fosse.
Mi insegnate come posso fare?
grazie mille
p.s
chiedo scusa ma me ne sono venuti due messaggi e non ho idea perche sia successo
Tu cmq intendi VBA nn VB puro...cmq prova cosi:
rs1.FindFirst ("numero like '" & form![tabella1]|[camera] & "'") 
ciaoooooooo :p
federchicco
18-09-2003, 17:43
Ti ringrazio ma non funziona.
Qualche altra idea?
Grazie
Scusa ma nn ho capito se sei in VB o in VBA ?!?
cmq se fai riferimento alla form: Nome_Form.Nome_Campo non ti funziona :confused:
federchicco
18-09-2003, 23:54
Sono in VBA per l'esattezza sto lavorando su un'applicativo in access e mi serviva quella funzione per verificare che ci fosse un numero uguale a un numero presente in una maschera.
In pratica non lo vede proprio.
Ho ricopiato pari pari la tua indicazione ma niente.
in  dettaglio ho questa funzione:
Function ricerca()
        Dim rs1 As DAO.Recordset
   
    Set rs1 = CurrentDb.OpenRecordset("camera", dbOpenDynaset)
     
     rs1.FindFirst ("numero like '22'")
    
     If Not rs1.NoMatch Then
    
        MsgBox "camere occupata!"
        
    Else
        MsgBox "camera libera"
    End If
    
         rs1.Close
  
    Set rs1 = Nothing
     End Function
Al posto del numero dovrei mettere form![tabella]![camera]
Spero di essermi espresso bene.
Grazie ancora
Io ho fatto delle prove, e cosi mi funziona:
rs1.FindFirst ("numero like '" & NomeForm.NomeCampo & "'")
federchicco
19-09-2003, 16:41
Originariamente inviato da matpez 
Io ho fatto delle prove, e cosi mi funziona:
rs1.FindFirst ("numero like '" & NomeForm.NomeCampo & "'") 
rs1.FindFirst ("numero like ' " & Form![tabella1]![CAMERA] & " ' ")
Ho scritto cosi e mi da errore 424 dicendo che manca l’oggetto.
In sostanza io apro la maschera (tabella1) e nel campo “camera” digito un numero e poi lancio quella funzione che deve verificare che nella tabella “camera” esiste un numero uguale.
Dov’è che sbaglio?
Grazie e scusa
Ma sembra un po' diverso il codice tuo dal mio...
rs1.FindFirst ("numero like '" & Form![tabella1]![CAMERA] & "'") 
rs1.FindFirst ("numero like '" & NomeForm.NomeCampo & "'") 
Cmq io nn conosco bene bene VBA ma sono abb. bene l'SQL, appunto perchè nn utilizzi le query per fare sti meccanismi:
SELECT (*) as nNumero
FROM Tabella1
WHERE Camera=[valore]
dove naturalmente il valore è il tuo numero....cmq altra cosa, il like serve maggiormente per le stringhe, se vuoi confrontare un numero mettigli "="
federchicco
21-09-2003, 01:08
Il tuo suggeriemnto era valido. La mia scrittura del codice faceva schifo. Ho scritto form invece che forms.
Adesso funziona benissimo. Se posso approfittare, si può aggiunge un " and " a quella ricerca.
Esempio:
rs1.FindFirst ("numero like '" & Forms![SITUAZIONE CAMERE]![num-chek] & "'") and data = data corrente.
In sostanza dovrei cercare un record che abbia quel tal numero e abbia una data uguale alla data corrente.
Grazie infinite
Si certo ma non così, prova in questa maniera:
rs1.FindFirst ("numero like '" & Forms![SITUAZIONE CAMERE]![num-chek] & "' AND data=#" & date() & "#") 
Cosi dovrebbe andare, se vedi che la data non va bene nella ricerca allora è perchè vuole il formato americano, ma nulla di che, basta che fai cosi date() lo converti in Format(date(),"mm/dd/yyyy")
ciaoooooooooo 
:p
federchicco
21-09-2003, 19:13
Grazie mille euro
Ciao
federchicco
30-09-2003, 18:23
Originariamente inviato da federchicco 
Grazie mille euro
Ciao
federchicco
30-09-2003, 18:26
Originariamente inviato da federchicco 
Grazie mille euro
Ciao 
Il famoso codice funziona bene tranne un piccolo particolare che non riesco a spiegarmi.
Se inserisco delle prenotazioni pewr un mes o più, mi capita che se inserisco un doppione nei primi giorni non viene rilevato mentre invece vien rilevato per le date successive.
Provo a postarti il codice completo nel caso tu mi possa aiutare.
Grazie infinite
Private Sub CONFERMA_Click()
Dim rs1pren As DAO.Recordset
Dim rs2pren As DAO.Recordset
    
    'crea recordset su Tabella1
    
    Set rs1pren = CurrentDb.OpenRecordset("tabella1", dbOpenDynaset)
    
        'crea recordset su foglio2
          
          Set rs2pren = CurrentDb.OpenRecordset("foglio2", dbOpenDynaset)
 
 ' crea variabili per ciclo di ricerca
  
  Dim i As Integer
  Dim cercadata
  Dim ngiorni
   
   ngiorni = rs1pren("giorni")
   cercadata = rs1pren("datapren")
   
    
     'cerca il record in Foglio2 in base  a valori di una maschera che ha come origine dati - tabella1-
 
 
     For i = 1 To ngiorni
      rs2pren.FindFirst ("camera = " & Forms![tabella1]![camera] & "and datapren = #" & cercadata & "#")
    'se trova il record...
    
    If Not rs2pren.NoMatch Then
    
    DoCmd.Beep
    
    MsgBox " La camera scelta è già impegnata !!Cambia la camera e clicca su memorizza ", vbInformation, "Avviso problema"
   
   ' va al controllo camera per correggere
   
   rs1pren.Edit
    rs1pren("camera") = 0
     rs1pren.Update
          DoCmd.GoToControl "camera"
     
          Exit Sub
  
             End If
                 cercadata = cercadata + 1
          Next
' chiude gli oggetti
rs1pren.Close
rs2pren.Close
Set rs2pren = Nothing
Set rs1 = Nothing
'Esegue la routine per la creazione delle prenotazioni
Call AddRecords(ID.Value)
Call AddRecords2(ID.Value)
'esegue delle query
DoCmd.SetWarnings False
    DoCmd.OpenQuery "ACCODA-CLIENTE", acViewNormal, acEdit
    DoCmd.OpenQuery "clienti-pren Query", acViewNormal, acEdit
    DoCmd.OpenQuery "cancella clienti-pren", acViewNormal, acEdit
    Beep
    MsgBox "Prenotazione memorizzata", vbInformation, "Conferma comando"
   
  ' avvia un nuovo record
   DoCmd.GoToRecord acForm, "Tabella1", acNewRec
     DoCmd.GoToControl "dataric"
     
 
End Sub
Sinceramente, sarà l'ora tarda, ma potresti spiegarmi bene cosa ti da errore, ma è un errore del programma o un errore di gestione delle prenotazioni!
Più informazioni mi dai + capisco dato che il progetto è tutto nella tua mente...
Grazie 1000
federchicco
01-10-2003, 02:06
Originariamente inviato da matpez 
Sinceramente, sarà l'ora tarda, ma potresti spiegarmi bene cosa ti da errore, ma è un errore del programma o un errore di gestione delle prenotazioni!
Più informazioni mi dai + capisco dato che il progetto è tutto nella tua mente...
Grazie 1000 
Grazie per avermi risposto.
Si tratta di gestire le prenotazioni per un albergo e il codice in questione deve servire ad evitare l'inserimento di doppioni.
Dunque il problema in sintesi è questo:
Riesco a rilevare correttamente i record richiesti solo per quando riguarda quelli con data maggiore di almeno 15 giorni alla data del primo.
Ho fatto un sacco di prove e non mi dà nessun errore, solo non vede i record all'inizio.
Esempio:
Ho inserito delle prenotazioni dal 01/10/03 al 05/11/03
Dal 14/10/03 il codice funziona benissimo nel senso che rileva il record e vien fuori il messaggio.
dal 01/10/03 e fino al 13/10/03 anche se una camera esiste già in quella data, non la vede e mi trovo dei doppioni.
In definitiva, se io inserisco una prenotazione della camera n°10 per il 05/10/03 e in quella data esiste già una prenotazione, non se accorge.
Se invece inserisco una prenotazione di una camera esistente in data 15/10/03 se ne accorge benissimo.
Spero di essemi spiegato anche se mi rendo conto che è uno strano problema.
Ti ringrazio ancora e sono in debito di una cena ( ho un ristorante a Bologna)
Ciao
Purtroppo VBA nn lo conosco molto, so lavorare con VB + Database che ha una certa connessione al database, ma lavorarci denteo non saprei, se tu riesci a trovare un modo di impostare una variabile Recordset e passargli una query di esecuzione siamo a cavallo...
federchicco
01-10-2003, 17:04
Ho fatto una marea di prove e sono giunto alla conclusione che il problema si presenta con le date che cominciano con zero.
es: 01/10/03 non la vede ma 29/09/03 la vede
Evidentemente c'è qualcosa da sistemare nel formato o nella variabile della data.
Hai qualche idea ?
Grazie
Se tu gli passi nella WHERE una formato del genere #Data# di solito ti conviene passarla all'americana facendo una cosa del genere: ..... & "#" & format(date,"mm/dd/yyyy") & "#" ....
Prova :)
federchicco
01-10-2003, 18:37
Originariamente inviato da matpez 
Se tu gli passi nella WHERE una formato del genere #Data# di solito ti conviene passarla all'americana facendo una cosa del genere: ..... & "#" & format(date,"mm/dd/yyyy") & "#" ....
Prova :) 
Scusa se approfitto ma tenedo presente il ciclo che ho creato
 dove devo correggere ?
*********************************+++++
dim cercadata
cercadata = rs1pren("datapren") 
'cerca il record in Foglio2 in base a valori di una maschera che ha come origine dati - tabella1- 
For i = 1 To ngiorni 
rs2pren.FindFirst ("camera = " & Forms![tabella1]![camera] & "and datapren = #" & cercadata & "#") 
'se trova il record... 
If Not rs2pren.NoMatch Then 
DoCmd.Beep 
MsgBox " La camera scelta è già impegnata !!Cambia la camera e clicca su memorizza ", vbInformation, "Avviso problema"
end if
cercadata = cercadata + 1 
next
********************************+
Grazie e siamo a due cene
Non sono sicuro che sia proprio li l'errore ma cmq prova a fare cosi:
rs2pren.FindFirst ("camera = " & Forms![tabella1]![camera] & "and datapren = #" & Format(cercadata,"mm/dd/yyyy") & "#")
federchicco
02-10-2003, 00:10
CHAPEAUX  !!!!
Tutto ok , va benissimo.
Grazie mille e se passi da Bologna le cene son pronte.
Ciao
Io a bologna ci passo quasi tutti i mesi per andare a trovare la fidanzata ad Arezzo...magari se un giorno passo con la macchina anzichè con il treno...una pappata ci sta sempre :) :p :) :) :D ;) :oink: :p :oink: :rolleyes:
federchicco
02-10-2003, 18:17
Originariamente inviato da matpez 
Io a bologna ci passo quasi tutti i mesi per andare a trovare la fidanzata ad Arezzo...magari se un giorno passo con la macchina anzichè con il treno...una pappata ci sta sempre :) :p :) :) :D ;) :oink: :p :oink: :rolleyes: 
Ti ho spedito l'indirizzo
Grazie ancora
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.