Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Problema con la True DBGrid e FilterBar

Ciao a tutti.
Ho comprato da poco la True DBgrid 7 pro, e volevo applicare nel mio
programma fatto in VB6 SP5 la funzione FilterBar utilizzando DAO su di
un file Access 97.
Sul Tutorial ho trovato pero' solo l'esempio per ADO mentre per DAO non
c'e' qualcuno sa darmi delle spiegazioni per poter utilizzare tale
funzione?
Grazie anticipato a tutti.
Togliere spam dall'E-Mail

Liones wrote:
ciao
su una TDBGrid per visualizzare un formato tipo 1.345,07 cosa si deve
impostare ?
ho provato ad impostare il NumberFormat della colonna su EditMask e
quest'ultima cosě #, ##0.00 ma non funziona (ho tentato molte altre
combinazione inutilmente)
la griglia č collegata ad un recordset (access) ed il campo in questione č
di tipo valuta
ciao
Purtroppo non ho la risposta, anche io ho lo stesso problema e sul NG 
della ComponentOne non ho trovato msg che lo indicano?
Quindi riposto il problema, qualcuno lo ha risolto ?
ciao

Marco Cattaneo wrote:

Scusa ho fatto un pň di confusione...
Sergio Bonifazi wrote:
Ho comprato da poco la True DBgrid 7 pro, e volevo applicare nel mio
programma fatto in VB6 SP5 la funzione FilterBar utilizzando DAO su di
un file Access 97.
Io avevo provato a fare qualcosa con DAO prima delle ferie applicando il 
FilterBar ad un progetto pre-esistente, per altri motivi ho poi 
tralasciato il progetto. Ma per quel che mi ricordo non c'era molta 
differeneza tra DAO e ADO, nel senso che usavo il datatsource dao al 
posto di ado  e tutto funzionavo piů o meno allo stesso modo.
Scusa se sono generico ma sono rientrato oggi dalle ferie e sono ancora 
un pň annebbiato [:)]
Nei prox giorni dovrei riprendere in mano il progetto!
Ciao

Caro Sergio Bonifazi,
da tempo uso la DBGrid e ho risolto così il problema della barra filtro,
spero possa esserti utile.
Public Sub GrigliaFiltra(XGRID As TDBGrid, XDB As Data)
'===========================================================================
==
    For Each Col In XGRID.Columns
    Z$ = Trim(Col.FilterText)
'---------------------------------------------------------------------------
--
    If Col.ValueItems.Translate = True Then             'campo traslato
    For Each ITEM In Col.ValueItems
    If Z$ = ITEM.DisplayValue Then
    Z$ = ITEM.Value
    Exit For
    End If
    Next ITEM
    End If
'---------------------------------------------------------------------------
--
    If Col.DataField = "" Then                          'campo non collegato
    Z$ = ""
    Col.FilterText = ""
    End If
'---------------------------------------------------------------------------
--
    If Z$ <> "" Then
    I% = I% + 1
    If I% = 1 Then
    SQL$ = SQL$ & " WHERE "
    Else
    SQL$ = SQL$ & " AND "
    End If
'...........................................................................
..
    If XDB.Recordset.Fields(Col.DataField).Type = dbText Then
    SQL$ = SQL$ & Col.DataField & " LIKE '" & Z$ & "*'"
    ElseIf XDB.Recordset.Fields(Col.DataField).Type = dbDate Then
    SQL$ = SQL$ & Col.DataField & "=#" & Format$(Z$, "MM/DD/YYYY") & "#"
    Else
    SQL$ = SQL$ & Col.DataField & "=" & NumberUnformat(Z$)
    End If
'...........................................................................
..
    End If
'---------------------------------------------------------------------------
--
    Next Col
'===========================================================================
==
    Z$ = XDB.RecordSource
    I% = InStr(Z$, " WHERE")
    J% = InStr(Z$, " ORDER")
'---------------------------------------------------------------------------
--
    If I% Then                                          'esiste già un
filtro
    SQL$ = Left$(Z$, I% - 1) & SQL$
    If J% Then                                          'esiste un
ordinamento
    SQL$ = SQL$ & Mid$(Z$, J%)
    End If
    Else                                                'non esiste già un
filtro
    If J% Then                                          'esiste un
ordinamento
    SQL$ = Left$(Z$, J% - 1) & SQL$ & Mid$(Z$, J%)
    Else
    SQL$ = Z$ & SQL$
    End If
    End If
'---------------------------------------------------------------------------
--
    XDB.RecordSource = SQL$
    XDB.Refresh
'===========================================================================
==
End Sub
--
Ciao!

 End Sub
io chiamo GigliaFiltra dentro la procedura TDBGrid1_FilterChange
passando i parametri GigliaFiltra ( me.TDBGRID1, me.Data1)
dove Data1 è un recordset a cui è stata assegnata in precedenza la query 
"qyCerca"
lancio il programma e inserisco con la FilterBar il dato 1 sul campo 
PIPPO della TDBGRID1 e mi aspetto un filtro con PIPPO=1...
Ma il debugger si pianta nelle ultime righe della procedura con 
l'istruzione  XDB.RecordSource = SQL$
infatti SQL$= "qyCerca WHERE PIPPO =1" non 'dovrebbe' essere un 
istruzione SQL$ valida, ovvero dovrebbe essere qualcosa del tipo
SQL$= "SELECT * FROM qyCerca WHERE PIPPO =1", quindi la domanda è:
Manca qualcosa o sono io che utilizzo male la procedura ???
Grazie  e Ciao
Marco

Caro Marco Cattaneo,
non puoi richiamare la procedura all'interno dell'evento FilterChange poiché
essa verifica il contenuto di tutte le colonne per calcolare la stringa SQL$
equivalente; devi, invece, richiamarla DOPO che hai completato l'inserimento
di tutti i criteri di filtraggio (anche solo uno). A questo scopo io uso
l'evento Click di un CommandButton.
Inoltre, a quanto mi sembra di capire, il RecordSource del tuo controllo
Data da te usato contiene la stringa "qyCerca", mentre la procedura prevede
che già contenga qualcosa del tipo:
"SELECT * FROM ..."
oppure
"SELECT * FROM  ... Where ..."
oppure ancora
"SELECT * FROM  ... WHERE... ORDER BY"
Se qyCerca è il nome di una tabella allora devi assegnarla come "SELECT *
FROM qyCerca"
Uso normalmente il maiuscolo per le istruzioni SQL: se fai uso del
maiscolo/minuscolo (Select, Where, Order by) devi modificare l'istruzione:
Z$ = XDB.RecordSource
in
Z$ = UCase$(XDB.RecordSource)
altrimenti le successive istruzioni Instr non riescono a trovare "WHERE" e
"ORDER".
--
Ciao!

 che già contenga qualcosa del tipo:
infatti qyCerca è una query e l'ho modificata come "SELECT *
FROM qyCerca"
Un ultima cosa nella tua procedura compare la funzione NumberUnFormat, è 
qualcosa di complicato o fa semplicemente un VAL(Z$) ?
Grazie e ciao

Io ho provato a risolverla così:
Dim col As TrueDBGrid70.Column
Dim cols As TrueDBGrid70.Columns
Private Sub TDBGrid1_FilterChange()
Dim c As Integer
c = TDBGrid1.col
pipo = TDBGrid1.Columns(c).DataField
TDBGrid1.HoldFields
Set cols = TDBGrid1.Columns
If getFilter() = "" Then
Data1.RecordSource = "SELECT * From contratti WHERE " & pipo & " LIKE
'*'"
Else
Data1.RecordSource = "SELECT * From contratti WHERE " & getFilter() &
";"
End If
Data1.Refresh
TDBGrid1.col = c
TDBGrid1.EditActive = True
End Sub
Private Function getFilter() As String
 
    Dim tmp As String
    Dim n As Integer
    For Each col In cols
         If Trim(col.FilterText) <> "" Then
            n = n + 1
            If n > 1 Then
                tmp = tmp & " AND "
            End If
            tmp = tmp & col.DataField & " LIKE '" & col.FilterText &
"*'"
        End If
    Next col
    getFilter = tmp
End Function
se qualcuno la prova e mi aiuta a correggere eventuali bug è molto
gradito.
Marco Cattaneo ha scritto:


 ha scritto nel messaggio
news:3D775FCD...@libero.it...
