Autore Topic: [RISOLTO] Datasource.Filter errore stringa - perchè?  (Letto 826 volte)

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
[RISOLTO] Datasource.Filter errore stringa - perchè?
« il: 10 Gennaio 2017, 10:35:14 »
Codice: [Seleziona]
  Dim vConnessione As New Connection
  Dim vRisultato As Result
  Dim sql As String
 
With vConnessione
  .Type = "sqlite3"
  .Name = "Report_DB.sqlite"
  .Host = User.Home &/ "MyReport/"
  .Login = ""
  .Password = ""
End With

  vConnessione.Open()
  sql = "Select Nome From Intestazione WHERE Nome not null"                                                'imposto la query
  vRisultato = vConnessione.Exec(sql)                                                                                              'eseguo la query
  DataSource1.Filter = sql                                                                                                                     'restituisco il risultato al filtro (ma non funziona)
  vConnessione.Close()

Chi mi aiuta? dov'è l'errore?  :hard:
La connessione funziona...
La query funziona e viene eseguita...
Datasource1.Filter si blocca sulla stringa  :-\
« Ultima modifica: 11 Gennaio 2017, 16:56:36 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:Datasource.Filter errore stringa - perchè?
« Risposta #1 il: 10 Gennaio 2017, 19:05:28 »
Ho trovato questo post
http://www.gambas-it.org/smf/index.php?topic=412.0
che alla fine per evitare problemi e semplificare il codice consiglia:
Codice: [Seleziona]
DataSource1.Filter = DB.Subst("pippo LIKE &1", valore)
ma non trovo spiegazioni su come inserire la query in DB.Subst...
qualcuno lo ha fatto? come?

Grazie
« Ultima modifica: 11 Gennaio 2017, 16:57:15 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:Datasource.Filter errore stringa - perchè?
« Risposta #2 il: 10 Gennaio 2017, 21:07:15 »
Per fare un filtro si fa così, in modo semplice e con una sola riga di codice:

Codice: [Seleziona]
  DataSource1.Filter = DB.Subst("nomecolonna LIKE &1", "ricerca")

dove ricerca può essere:

del testo tra virgolette;
un dato inserito in una finestra popup, esempio: ricerca = InputBox("quiladomanda", "quititolofinestra");
il testo digitato in una TextBox.text;
etc...

per cercare in parte del campo, utilizzare il simbolo %
esempio: "%ricerca%" trova la parola ricerca senza considerare quello che è scritto prima e dopo

 :ciao:

Vabbè, il Gamberetto ha fatto tutto da solo... speriamo serva a qualcuno che come me adora i database...
« Ultima modifica: 11 Gennaio 2017, 16:58:03 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #3 il: 11 Gennaio 2017, 14:02:39 »
scusa ma qui' c'e' un errore di battitura od e' voluto:
Citazione
.Host = User.Home &/ "MyReport/"

forse intendevi:
Codice: [Seleziona]
 .Host = User.Home & "/MyReport/"

la posizione della barra
se corri, morirai stanco (motto degli sniper)

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #4 il: 11 Gennaio 2017, 14:08:25 »
scusa ma qui' c'e' un errore di battitura od e' voluto:
Citazione
.Host = User.Home &/ "MyReport/"

forse intendevi:
Codice: [Seleziona]
 .Host = User.Home & "/MyReport/"

la posizione della barra

Lo scrivo sempre così, fino ad ora ha sempre funzionato  :rolleyes: non dirmi che è sbagliato  :'(
lo avevo trovato scritto in un post che era consigliato scriverlo così.
« Ultima modifica: 11 Gennaio 2017, 14:11:19 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.145
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #5 il: 11 Gennaio 2017, 15:08:08 »


Lo scrivo sempre così, fino ad ora ha sempre funzionato  :rolleyes: non dirmi che è sbagliato  :'(
lo avevo trovato scritto in un post che era consigliato scriverlo così.

Si, tranquillo è giusto scritto come hai scritto tu, comunque funziona anche all'altro modo...  :ok:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #6 il: 11 Gennaio 2017, 15:10:48 »
Citazione
Si, tranquillo è giusto scritto come hai scritto tu, comunque funziona anche all'altro modo...  :ok:

Grazie Gianluigi  :ok:
« Ultima modifica: 11 Gennaio 2017, 17:31:03 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #7 il: 17 Febbraio 2017, 11:30:15 »
Esatta dicitura per impostare un filtro in Datasource, con ricerca in parte del campo:

Codice: [Seleziona]
Public Sub TextBoxTrova_Change()

With vConnessione
.Type = "sqlite3"
.Host = User.Home &/ "CartellaDatabase/"
.Name = "NomeDatabase"
.Login = ""
.Password = ""
End With

  vConnessione.Open
  DataSource1.Filter = DB.Subst("NomeColonna LIKE &1", ("%" & TextBoxTrova.Text & "%")) 'applica il filtro mentre si digita nella TextBox
  DataSource1.MoveFirst  'si posiziona immediatamente sul primo record trovato
  vConnessione.Close

End


Non insegno ma imparo per riportare ad altri il mio sapere.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.145
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #8 il: 17 Febbraio 2017, 12:29:46 »
Io veramente non so più come spiegartelo, forse dovresti proprio dimenticarti di Change, continui a usare questo evento a sproposito.
Fai così inserisci un:
Codice: [Seleziona]
Print "ACCIDENTI!"
Subito prima e subito dopo l'apertura e la chiusura della connessione e poi valuta tu.
Naturalmente sappi che questa è l'ultima volta che te lo dico.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #9 il: 17 Febbraio 2017, 13:03:41 »
Io veramente non so più come spiegartelo, forse dovresti proprio dimenticarti di Change, continui a usare questo evento a sproposito.
Fai così inserisci un:
Codice: [Seleziona]
Print "ACCIDENTI!"
Subito prima e subito dopo l'apertura e la chiusura della connessione e poi valuta tu.
Naturalmente sappi che questa è l'ultima volta che te lo dico.

 :o ma perchè? funziona perfettamente!

ho ricominciato tutto da capo con i vostri insegnamenti... meglio LostFocus?
ok... uso LostFocus ma non ho capito perchè  8)
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #10 il: 17 Febbraio 2017, 13:23:35 »
Io veramente non so più come spiegartelo, forse dovresti proprio dimenticarti di Change, continui a usare questo evento a sproposito.
Fai così inserisci un:
Codice: [Seleziona]
Print "ACCIDENTI!"
Subito prima e subito dopo l'apertura e la chiusura della connessione e poi valuta tu.
Naturalmente sappi che questa è l'ultima volta che te lo dico.

Ecco, ho fatto così (spero sia giusto, grazie per la pazienza)
Codice: [Seleziona]
Public Sub Form_Open()

With vConnessione
.Type = "sqlite3"
.Host = User.Home &/ "MyReport/"
.Name = "Report_DB.sqlite3"
.Login = ""
.Password = ""
End With

vConnessione.Open()

End
e.....
Codice: [Seleziona]
Public Sub TextBoxTrova_LostFocus()

  DataSource1.Filter = DB.Subst("Descrizione LIKE &1", ("%" & TextBoxTrova.Text & "%"))
  DataSource1.MoveFirst

End
e.....
Codice: [Seleziona]
Public Sub Form_Close()

  vConnessione.Close()

End
« Ultima modifica: 17 Febbraio 2017, 13:25:57 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.145
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #11 il: 17 Febbraio 2017, 13:32:22 »
A parte che c'è un refuso in quanto ti ho scritto intendevo "Subito prima o subito dopo" se lo scrivi dovresti capire che tutte le volte che digiti un carattere oppure cancelli un carattere o la parola, apri e chiudi la connessione e ripeti tutto il codice inutilmente.
Un pulsante è la migliore soluzione per avere un solo evento quello definitivo e utile.
Poi ripeto fai come credi il programma è tuo, solo evita di dire agli altri che quella è l'esatta dicitura.

In parole povere occorre sempre evitare di fare più volte quello che basta fare una volta sola.

Mentre ti rispondevo vedo che hai inserito un nuovo post e hai cambiato le carte, comunque se non è stato il medico che a causa di una rara malattia ti ha vietato di usare i pulsanti la regola migliore è quella di aprire, svolgere il compito e chiudere in un'unica passata attraverso l'evento Click del pulsante.

Se proprio devi usare lostfocus (io lo sconsiglio) apri e chiudi li la connessione.

Poi cerca di dividere i compiti in vari metodi che puoi facilmente richiamare da altre porzioni di codice esempio fai una sub che apre la connessione e poi la richiami dove ti serve.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #12 il: 17 Febbraio 2017, 13:43:06 »
A parte che c'è un refuso in quanto ti ho scritto intendevo "Subito prima o subito dopo" se lo scrivi dovresti capire che tutte le volte che digiti un carattere oppure cancelli un carattere o la parola, apri e chiudi la connessione e ripeti tutto il codice inutilmente.
Un pulsante è la migliore soluzione per avere un solo evento quello definitivo e utile.
Poi ripeto fai come credi il programma è tuo, solo evita di dire agli altri che quella è l'esatta dicitura.

In parole povere occorre sempre evitare di fare più volte quello che basta fare una volta sola.

Mentre ti rispondevo vedo che hai inserito un nuovo post e hai cambiato le carte, comunque se non è stato il medico che a causa di una rara malattia ti ha vietato di usare i pulsanti la regola migliore è quella di aprire, svolgere il compito e chiudere in un'unica passata attraverso l'evento Click del pulsante.

Se proprio devi usare lostfocus (io lo sconsiglio) apri e chiudi li la connessione.

Poi cerca di dividere i compiti in vari metodi che puoi facilmente richiamare da altre porzioni di codice esempio fai una sub che apre la connessione e poi la richiami dove ti serve.


Ok, grazie.... adesso vedo come fare
è che voglio che mentre digiti ti appaia in tempo reale il filtro.

Mi spiego meglio,

Se scrivo And mi trova immediatamente tutto quello che contiene And (Andrea, Gianandrea, Andreina, etc.)

diversamente dovrei scrivere And e premere il pulsante per vedere se trova qualche cosa.... questo è il motivo per cui voglio evitare un pulsante  ;)
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.145
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #13 il: 17 Febbraio 2017, 13:50:35 »
Vivaddio al tredicesimo post sappiamo finalmente cosa vai cercando.
E allora usa pure Change ma come detto evita di chiudere e riaprire durante l'evento, crei i metodi di apertura e chiusura li userai in entrata e uscita dalla text e durante il change usi il filtro.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:[RISOLTO] Datasource.Filter errore stringa - perchè?
« Risposta #14 il: 17 Febbraio 2017, 13:58:27 »
Vivaddio al tredicesimo post sappiamo finalmente cosa vai cercando.
E allora usa pure Change ma come detto evita di chiudere e riaprire durante l'evento, crei i metodi di apertura e chiusura li userai in entrata e uscita dalla text e durante il change usi il filtro.

Ha ha ha, dai che siete bravi, se non fosse per voi avrei abbandonato tutto, invece sono ancora qua che provo e riprovo (solo così si impara).
Comunque Gambas è proprio bello e ti prende, dopo un solo mese sto facendo cose che mai avrei immaginato... e quanto devo ancora imparare.
Intanto ti do una bella notizia, ho abbandonato la mia testardaggine e le mie contorsioni per seguire il tuo consiglio GB.DB  ;D
Guarda i primi miei post  :2birre: per capire da dove sono partito.
« Ultima modifica: 17 Febbraio 2017, 13:59:21 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.