Autore Topic: [RISOLTO] Database e stringhe speciali  (Letto 5155 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #30 il: 08 Aprile 2014, 18:42:14 »
Io però non ho capito, scusami, se devi passare (anche) le slash rovesciate.  :-X
.. mi fai un esempio senza variabile di come dovrebbe essere la stringa in forma normale, esplicita ?

Sulla scorta di quanto fattomi notare giustamente da Milio rettifico quanto erroneamente scritto in precedenza:

Codice: gambas [Seleziona]
sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & " \"" & "L'Aquila" & "\";" 


scusa  :-*
« Ultima modifica: 08 Aprile 2014, 18:48:27 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.305
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #31 il: 08 Aprile 2014, 20:16:33 »
@vuott

lo 'slash rovesciato' seguito da " serve per immettere in una stringa il carattere " senza che l'ide di gambas lo riconosca come codice di chiusura della stringa stessa... mi son spiegato? :)
Non volevo sapere questo... perché già lo so.  :hard:
Volevo sapere se vi fosse un interesse diverso: non avevo capito bene il suo intento.  :rolleyes:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #32 il: 08 Aprile 2014, 20:30:37 »
@vuott

lo 'slash rovesciato' seguito da " serve per immettere in una stringa il carattere " senza che l'ide di gambas lo riconosca come codice di chiusura della stringa stessa... mi son spiegato? :)
Non volevo sapere questo... perché già lo so.  :hard:
Volevo sapere se vi fosse un interesse diverso: non avevo capito bene il suo intento.  :rolleyes:
Scusa se mi intrometto fra te e milio ma l'interesse (diciamo l'intento mio e penso di chi ha suggerito questo metodo che però forse ho sognato di notte) è quello di agire probabilmente anche su la “virgoletta semplice” e quindi, ammesso che questo sia vero evitare REPLACE o no? O non intendo la domanda?  ???
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.305
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #33 il: 08 Aprile 2014, 20:46:49 »
agire probabilmente anche su la “virgoletta semplice” e quindi, ammesso che questo sia vero evitare REPLACE o no?

Cioè... tu vuoi ottenere l' apice (quella specie di apostrofo  :'( insomma) in modo diverso ?
Oppure vuoi sapere se l'apice viene accettato; e quindi se può essere inserito ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #34 il: 08 Aprile 2014, 21:05:32 »
Cioè... tu vuoi ottenere l' apice (quella specie di apostrofo  :'( insomma) in modo diverso ?
Oppure vuoi sapere se l'apice viene accettato; e quindi se può essere inserito ?

Allora vediamo se riesco a spiegarmi, certo che dopo tre pagine non esserci ancora riuscito la dice lunga sulle mie capacità,  :'( dunque per inserire in un campo di database attraverso SQL e successivamente lavorare nelle query una stringa che contenga un apostrofo occorre cambiarlo es. milio e Golia e anche Berserker79 con (“) fsurfing con l'accento di é, questo perché altrimenti SQL equivoca essendo l'appostrofo ' il suo delimitatore di stringa come per gambas “. Ma penso che questo tu lo sappia meglio di me. Per cambiare ' in “ occorre usare la funzione REPLACE e anche questo tu lo puoi insegnare a me.
Ora se io posso usare tranquillamente ' senza doverlo cambiare con REPLACE penso che questo sia di grande interesse per tutti oppure trovi che la cosa sia insignificante? Io penso che questo farebbe risparmiare molti mal di testa.

 :ciao:
« Ultima modifica: 08 Aprile 2014, 21:25:09 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #35 il: 08 Aprile 2014, 21:21:02 »
Aggiugo questo che mi è rimasto nella penna. :-[

Cioè... tu vuoi ottenere l' apice (quella specie di apostrofo  insomma) in modo diverso ?
NO

Oppure vuoi sapere se l'apice viene accettato; e quindi se può essere inserito ?
SI
Ciao vuott e ancora grazie  :D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.305
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #36 il: 08 Aprile 2014, 21:27:35 »
...ma nella tua ultima applicazione l'apice viene mostrato in console mediante le righe di codice, contenenti la parola Pol'onia, che funzionano! :-\

Quindi ? Ora mi dici che non deve essere mostrato...
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #37 il: 08 Aprile 2014, 21:41:36 »
...ma nella tua ultima applicazione l'apice viene mostrato in console mediante le righe di codice, contenenti la parola Pol'onia, che funzionano! :-\
Quindi ? Ora mi dici che non deve essere mostrato...

Si vuott hai ragione l'esempio è scemo ma se al posto di Pol'onia metti L'Aquila allora la cosa calza e cioè io devo trattare nel database ogni tipo di cose che immette l'utente e se l'utente inserisce la città de L'Aquila io devo poi rimostrarla a lui come me l'ha data ma trattata in base alle sue richieste di filtro giusto? Quindi io prima di far macinare al database le query con dati contenenti (') devo epurare questi da (') e poi a query finita restituire il risultato all'utente con nuovamente gli (') al loro posto o semi camuffati alla fsurfing sempre che io abbia capito bene cosa fanno gli altri. Quindi se io posso evitarmi di sostituire o camuffare non è meglio?  ;)
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.305
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #38 il: 08 Aprile 2014, 23:00:30 »
Quindi se io posso evitarmi di sostituire o camuffare non è meglio?
Ohhh, adesso mi pare di aver capito.
Però, il problema è che quell'apostrofo è comunque un ingombro; e - come cercano di fare gli altri - così anche tu devi trovare uno stratagemma per farlo passare e per riottenerlo successivamente.

A me sembra che la soluzione
Codice: gambas [Seleziona]
" \"" & sNazione & "\"" 

sia efficace, anche provandola nel tuo applicativo-test.
Non ti piace proprio ?  :-\

...ed infatti io ti avevo proposto (senza aver ancora  provato il tuo applicativo) la soluzione universale con la funzione Quote():
Codice: gambas [Seleziona]
sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & Quote(sNazione) & ";"
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #39 il: 09 Aprile 2014, 00:04:14 »
Ohhh, adesso mi pare di aver capito.
Però, il problema è che quell'apostrofo è comunque un ingombro; e - come cercano di fare gli altri - così anche tu devi trovare uno stratagemma per farlo passare e per riottenerlo successivamente.

A me sembra che la soluzione
Codice: gambas [Seleziona]
" \"" & sNazione & "\"" 

sia efficace, anche provandola nel tuo applicativo-test.
Non ti piace proprio ?  :-\

...ed infatti io ti avevo proposto (senza aver ancora  provato il tuo applicativo) la soluzione universale con la funzione Quote():
Codice: gambas [Seleziona]
sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & Quote(sNazione) & ";"


Vuott come al solito sei stato veramente gentile a dedicarmi così tanto tempo, e che non merito oltretutto, più avanti il perchè.

Per prima cosa non riesco a spiegarmi perché ieri il tuo codice o meglio ieri era un suggerimento non mi funzionasse ora col copia e incolla funziona alla grande :2birre: indagherò per capire cosa sbagliavo.

La “mia soluzione” l'hai provata solo su SQLite o anche su un'altro DB? Perchè non è che non mi piacesse, solo mi chiedevo se era una soluzione efficace ovunque.
 :-[
E qui occorre spiegare l'equivoco perché non avendo subito(!?) capito il fatto del raddoppio dell'apice (Replace(miaStringa,”'”,”''”)) malgrado Golia e Berserker79 me l'avessero detto subito.   :rolleyes:

Fortunatamente milio mettendo l'esempio mi ha aperto gli occhi e ora anche se tardi finalmente ho capito che che se metti un doppio apice ('') poi il database ti restituisce un (') apice solo.
Io invece credevo che si dovesse poi ripristinare e quindi la faccenda dello slash rovesciato e di Quote avrebbe assunto ben diverso valore. Così invece le cose sono equivalenti credo.  ???
Comunque mi rimane sempre la curiosità di sapere se lo slash rovesciato funziona su tutti i database.  ;D

Per concludere penso di poter dire così, malgrado la mia testardaggine e ottusità siete riusciti nel non facile compito di farmi capire come funziona (') in SQL.
Un grazie sentito al pazientissimo vuott, a  Berserker79 a Golia a milio a fsurfing , siete grandi! :ok:

Sappiate che vi leggo quasi tutti i giorni e tutti i giorni arricchite la mia conoscenza.

Anche se non sembrerebbe  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.305
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #40 il: 09 Aprile 2014, 00:10:27 »
La “mia soluzione” l'hai provata solo su SQLite o anche su un'altro DB?

...guarda, io l'ho provata solo sul tuo applicativo.... :-X
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #41 il: 09 Aprile 2014, 00:22:54 »

...guarda, io l'ho provata solo sul tuo applicativo.... :-X
Applicativo?  :o

nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.305
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #42 il: 09 Aprile 2014, 00:33:09 »
Applicativo?  :o


   ...non cercare il pelo nell'uovo, mo' !


« Ultima modifica: 09 Aprile 2014, 00:52:28 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #43 il: 09 Aprile 2014, 12:22:06 »
Dopo una notte un poco agitata alla mia età occorre coricarsi presto, che già così poi il giorno dopo si ragiona poco figurarsi...

Ciò premesso soddisfatto di aver (spero) compreso il funzionamento di (') in SQL cerco sulla base della spiegazione di milio sullo 'slash rovesciato' (che se non ho frainteso in pratica permette di fasciare la stringa SQL con doppie virgolette () senza interferire con Gambas), di spiegarmi il perché SQL, almeno in SQLite3, ritorna i dati corretti.
Quindi ho interrogato attraverso il Browser SQLite Così:

SELECT *
FROM miaTabella
WHERE Tab_Naz = "'Pol'onia'";

mi da No error ma non ritorna nulla!  ???  :rolleyes:

SELECT *
FROM miaTabella
WHERE Tab_Naz = 'Pol`onia';

mi da No error ma non ritorna nulla!  ???  :rolleyes:

SELECT *
FROM miaTabella
WHERE Tab_Naz = "Italia";

No error e ritorna i dati corretti! :rolleyes:



SELECT *
FROM miaTabella
WHERE Tab_Naz = 'Pol''onia';

No error e risultati corretti!  8)

Invece(!?) per quanto riguarda Quote() non ho capito cosa fa alla stringa in pratica    :'( e pertanto per ora ho lasciato perdere.

Penso che, se quanto detto non è un monte di sciocchezze, questo rafforzi, ammesso che ce ne fosse stato bisogno visto chi ha suggerito la soluzione!, che la scelta di portare l'apice(') a due apici ('') è la migliore.  :ok:

 :ciao:

PS: In un post precedente rispondendo a milio mi sono espresso in modo poco corretto nei confronti di SQLite definedolo 'infido', chiedo umilmente scusa perché l'aggettivo risulta offensivo anche se io intendevo solo mettermi ed eventualmente mettervi in guardia su un comportamento che dettato senz'altro da buone intenzioni come favorire l'utente poteva però indurre all'errore le persone poco esperte come il sottoscritto.
Ritengo SQLite un DB fantastico e sono entusiasta di poterlo usare e maltrattare a piacimento. Viva SQLite e i suoi autori  :2birre:
« Ultima modifica: 09 Aprile 2014, 14:20:57 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #44 il: 09 Aprile 2014, 16:17:03 »
Spero tanto che in questo forum non esista il reato di procurato allarme o che almeno non venga sanzionato.
Perché prima in questo stesso spazio avevo inserito, in forma di allarme appunto, la notizia che non mi funzionavano le query attraverso codice Gambas, lo so che la cosa è illogica perché se funzionano con il Browser, se non ti sbagli a scrivere, deve poi funzionare anche a mezzo codice.
Infatti poi rifacendo le prove con calma con un DB semplice semplice di una sola tabella e un solo record creato ogni volta con un sistema diverso e cioè Il primo con “\”” & variabile & “\”” , il secondo con Quote(variabile) entrambi caricati senza Replace.
Poi gli altri due metodi e cioè con Replace(variabile,”'”,”''”) l'uno e con Replace(variabile,”'”,”`”) l'altro ma attenzione usando gli apostrofi con SQL e cioè “'” & variabile & “'” altrimenti sia la SQL di creazione, che quelle di inserimento e interrogazione danno ERRORE, ho ottenuto gli stessi risultati vale a dire:

FUNZIONANO TUTTI CON QUESTE QUERY:   :2birre:

Codice: sql [Seleziona]
sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & " \"" & sNazione & "\";"  (senza REPLACE)

sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & Quote(sNazione) & ";" (senza REPLACE)


sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz = '" & sNazione & "';"
sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & " '" & sNazione & "';" (Sono simili e “sNazione” deve passare da REPLACE altrimenti danno errore)

 
Scusate tanto ma come avevo avuto modo di dire se gli anziani non dormono bene...

 :ciao:
« Ultima modifica: 09 Aprile 2014, 21:00:23 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro