Lsta ricerca

lunedì 13 aprile 2015 - 11.55
Tag Elenco Tags  Windows Server 2008  |  Windows 7  |  Access (.mdb)  |  Office 2010  |  Firefox

sagrimal Profilo | Junior Member

Salve,
da una lista di ricerca inserita in una maschera vorrei effettuare la ricerca su due campi della stessa tabella
la routine che utilizzo è la seguente ma funziona su un solo campo. Come faccio a farla funzionare su due
es. numero fattura e data fattura

Private Sub ListaRicerca_AfterUpdate()

' Trova il record corrispondente al controllo
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[NUMFATT] = " & Me![ListaRicerca] & ""

Me.Bookmark = rs.Bookmark
Grazie a tutti
Salvatore

alx_81 Profilo | Guru

>Salve,
ciao

trasforma la tua condizione da singola a multipla:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>Grazie a tutti
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

sagrimal Profilo | Junior Member

Quindi devo eliminare tutta la routine
Private Sub Form_Load()
Me.ListaRicerca.SetFocus
Me.ListaRicerca.Selected(1) = True
End Sub

Private Sub ListaRicerca_AfterUpdate()

' Trova il record corrispondente al controllo
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[NUMFATT] = " & Me![ListaRicerca] & ""

Me.Bookmark = rs.Bookmark

End Sub
e sostituire tutto con
strCriteria = "[NUMFATT] = " & Me![ListaRicerca] & " And [datafatt] = " & Me.datafatt
Ciao e grazie ancora


alx_81 Profilo | Guru

>Quindi devo eliminare tutta la routine
no, non devi eliminare la routine.. solo la stringa SQL che crei va estesa
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

sagrimal Profilo | Junior Member

Scusami ma inserendo come ho indicato mi dice variabile non definita
dove sbaglio ?
Scusami non esendo un esperto routine non l'ho creata io ma l'ho adattata da un DB che ho trovato su internet

Private Sub ListaRicerca_AfterUpdate()

' Trova il record corrispondente al controllo
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[NUMFATT] = " & Me![ListaRicerca] & ""
strCriteria = "[NUMFATT] = " & Me![ListaRicerca] & " And [datafatt] = " & Me.datafatt

Me.Bookmark = rs.Bookmark

End Sub

alx_81 Profilo | Guru

>Scusami ma inserendo come ho indicato mi dice variabile non definita dove sbaglio ?
>Scusami non esendo un esperto routine non l'ho creata io ma l'ho adattata da un DB che ho trovato su internet

> Dim strCriteria As String
> strCriteria = "[NUMFATT] = " & Me![ListaRicerca] & " And [datafatt] = " & Me.datafatt
> rs.FindFirst strCriteria

se però hai errore, le cose sono tre:
- non esiste il campo datafatt sulla tabella
- non esiste il valore Me.datafatt
- non hai formattato bene l'sql per ricevere la data (ci vogliono i cancelletti # prima e dopo la data)
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

sagrimal Profilo | Junior Member

Ciao Alex, scusa se ti sto dando un po di fastidio ti posto alcune immagini del db forse potrebbero esserti di aiuto
per spiegarti meglio il mio problema

1680x1050 172Kb

1680x1050 220Kb

1680x1050 258Kb

1680x1050 169Kb

Scusami ancora
Ciao
Salvatore

alx_81 Profilo | Guru

>Ciao Alex, scusa se ti sto dando un po di fastidio ti posto alcune
>immagini del db forse potrebbero esserti di aiuto
>per spiegarti meglio il mio problema
Rileggi bene il mio post, c'è una parte di dichiarazione della variabile che stai usando. Non l'hai messa..
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

sagrimal Profilo | Junior Member

Scusa Alex, ma non riesco a cavare il ragno dal buco
questo è quello che ho scritto nella routine
Private Sub ListaRicerca_AfterUpdate()

' Trova il record corrispondente al controllo
Dim rs As Object
Dim strCriteria As String
Set rs = Me.Recordset.Clone
rs.findfirst "[numfatt]=" & Me![ListaRicerca] & ""
strCriteria = "[NUMFATT] = " & Me![ListaRicerca] & " And [datafatt] = " & Me.ListaRicerca
rs.findfirst strCriteria
Me.Bookmark = rs.Bookmark
end sub
ma non mi filtra nulla
Scusami
resto in attesa di un tuo aiuto
SAlvatore

alx_81 Profilo | Guru

>Scusa Alex, ma non riesco a cavare il ragno dal buco
>questo è quello che ho scritto nella routine
>resto in attesa di un tuo aiuto
Salvatore devi cercare di documentarti un po' altrimenti si è costretti a farti direttamente la parte di applicazione.
Per ora facciamo che mi mandi un access di esempio come il tuo che ti faccio la modifica, ok?
ciao
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

renarig Profilo | Expert

>ma non mi filtra nulla

Scusatemi se mi intrometto
Ma devi filtrare oppure trovare il primo record che risponde ai requisiti senza filtrare nulla ???????

poi devi gestire anche il caso che uno o entrambi i controlli di ricerca siano Null ........
poi l'evento deve essere lanciato da AfterUpdate di entrambi i controlli .........

Prova a vedere se ti funziona cosi( nell'ipotesi che devi trovare il primo record senza filtrare )
se invece non ti funziona postaci il DB come consiglia Alex
Private Sub txtDatFat_AfterUpdate() Call Ricerca End Sub Private Sub txtNumFat_AfterUpdate() Call Ricerca End Sub Private Sub Ricerca() If Len(Me!txtNumFat.Value & Me!txtDatFat.Value & "") = 0 Then Exit Sub Dim rs As DAO.Recordset Dim strCriteria As String strCriteria = "" If Len(Me!txtNumFat.Value & "") > 0.5 Then strCriteria = strCriteria & "numfatt=" & Me!txtNumFat.Value & " " strCriteria = strCriteria & "And " End If If Len(Me!txtDatFat.Value & "") > 0.5 Then strCriteria = strCriteria & "datafatt=#" & Me!txtDatFat.Value & "# " strCriteria = strCriteria & "And " End If strCriteria = Left(strCriteria, Len(strCriteria) - 5) Set rs = Me.Recordset.Clone rs.FindFirst strCriteria Me.Bookmark = rs.Bookmark ' mi sta venendo il dubbio se bisogna chiudere il Recordset ??? ' direi he è meglio chiuderlo rs.Close Set rs = Nothing End Sub

Dove nella tabella hai i campi:
- numfatt ------ numerico
- datafatt ------ data/ora

e nella maschera hai i controlli:
- txtNumFat
- txtDatFat

sagrimal Profilo | Junior Member

Ciao ALEX Ti allego il db
Grazie ancora.
Ti spiego alcune cose
1) La maschera interessata è "Visualizza Bolla Storico
2) nella casella di riepilogo ci sono due fatture con lo stesso numero ma con date diverse
3) se scelgo quella con data 13/04/15 mi fa vedere quella con data 31/01/15
mentre quella del 13/04 non compare da nessuna parte
quindi il mio problema è se due fornitori diversi emettono una fattura con lo stesso numero e può tranquillamente capitare
fattura n.1 del 01/01/2015 del fornitore pippo
fattura n.1 del 28/02/2015 del fornitore pluto
Grazie ancora a tutti voi
Salvatore

renarig Profilo | Expert

Spero di sbagliarmi,

Ho la sensazione che il tuo problema è molto piu grosso
ma forse ci hai solamente postato una demo TROPPO ridotta :)



Faccio solo alcune osservazioni a caldo senza riflettere troppo:

nella tabella "Testata" hai appunto le testate delle fatture
nella tabella "righe" hai le righe di dettaglio delle singole fatture


Nela tabella testata NON hai una Key
pero hai i campi
- numfatt
- datafatt
- trasportatore
che potrebbero rappresentare una KeyMultipla

ma a peggiorare le cose noto che il nome del trasportatore
è stato scritto di fantasia, per esempio:
LUCREZIA GROUPS SRL
LUCREZIA GROUP SRL
LUCREZIA ANTONIO AUTOTRASPORTI
AUTOTRASPORTI MANZOLILLO
MANZOLILLO CONO
T.L.A. S.A.S. DI ANNUNZIATA ANTONIO
T.L.A.SAS
TLA
Eppure hai la tabella "trasportatori" con il suo "CODFOR"
Perche non hai messo il codice invece del nome scritto a fantasia ???????


scendendo piu nel dettaglio noto che hai 3 fatture numero 100
100 --- 31/10/2014 ----- MANZOLILLO CONO
100 --- 31/10/2014 ----- MANZOLILLO CONO
100 --- 31/10/2014 ----- AUTOTRASPORTI MANZOLILLO
è strano che un fornitore ti faccia 3 fatture stesso numero e stesso giorno



se voglio nella tabella "righe" individuare i corrispondenti trovo
11 record che fanno riferimento alla fattura 100
di ciu 10 hanno la data corretta del 31/10/2014
e 1 ha una data stranissima del 30/9/2014

Concentriamoci su quei 10 record del 31/10/2014
ora ti chiedo:
Ogniuno di quei 10 record a quale dei 3 record di testata lo associ ?????????


Spero di essere stato troppo pessimista :)


Facci sapere

sagrimal Profilo | Junior Member

Ciao renarig, grazie per esserti interessato al mio problema.
In effeti hai ragione ci sono dei fornitori indicati in modo diverso, questo perchè chi immette i dati non li pesca dalla casella di riepilogo
ma li digita manualmente.
Ho messo a posto le testate e le righe
adesso troverai una fattura 100 e le ragioni sociali dei trasportatori sono tutte uguali
premesso questo se apri la maschera VISUALIZZA BOLLA STORICO in testa alla lista di ricerca ci sono due fatture n. 4
che hanno due date diverse e due trasportatori diversi, perchè nelle righe ne vedo solo una ?
Grazie
SAlvatore
ti allego il data base corretto

renarig Profilo | Expert

Premesso che la soluzione proposta è comunque molto fallace perché ti mancano le Key

direi che il problema specifico che ci poni si puo risolvere sostituendo
la sub originale con quella che posto sotto:

Il FindFirst lo ho associato alla:
NumeroFattura
DataFattura
Trasportatore.

sappi pero che se ti capitano
- 2 fatture diverse
--- con stesso numero
--- con stessa data
--- con trasportatore diverso
avrai dei problemi, ma allora dovrai aggiungere le Key


Private Sub ListaRicerca_AfterUpdate() ' Trova il record corrispondente al controllo Dim rs As Object Dim StrCri As String StrCri = "" StrCri = StrCri & "[numfatt]=" & Me![ListaRicerca].Value & " " StrCri = StrCri & "And " StrCri = StrCri & "[datafatt]=#" & Me![ListaRicerca].Column(1) & "# " StrCri = StrCri & "And " StrCri = StrCri & "[trasportatore]='" & Me![ListaRicerca].Column(2) & "'" StrCri = StrCri & "" Set rs = Me.Recordset.Clone rs.FindFirst StrCri Me.Bookmark = rs.Bookmark End Sub

facci sapere

.

sagrimal Profilo | Junior Member

GRAZIE GRAZIE GRAZIE !!!!
da solo non ci sarei mai arrivato
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5