View Full Version : un aiuto per piacere
federchicco
18-09-2003, 01: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, 16: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, 22: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, 15: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, 00: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, 18:13
Grazie mille euro
Ciao
federchicco
30-09-2003, 17:23
Originariamente inviato da federchicco
Grazie mille euro
Ciao
federchicco
30-09-2003, 17: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, 01: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, 16: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, 17: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
01-10-2003, 23: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, 17: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.