Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gianluigi - 03 Aprile 2014, 16:45:59

Titolo: [RISOLTO] Database e stringhe speciali
Inserito da: Gianluigi - 03 Aprile 2014, 16:45:59
Volevo chiedere un parere su questa mia soluzione per inserire stringhe speciali in campi di database SQLite3.
Per funzionare funziona, almeno nelle mie prove, però non mi pare molto professionale.

Qualche suggerimento?



Codice: gambas [Seleziona]
Public Sub PopoloTabella()
  
  Dim hTabella As Result
  Dim sMioSql As String
  Dim sIndirizzo As String
  Dim sFrase As String
  
  ' Scusate per distrazione avevo lasciato il riferimento ad altro modulo
  'sIndirizzo = mFunzioni.PerSql("Immagini/Dollaro 3.png")
  'sFrase = mFunzioni.PerSql("Pippo\nPluto\nPaperino")
  ' E' (più) corretto così
  sIndirizzo = PerSql("Immagini/Dollaro 3.png")
  sFrase = PerSql("Pippo\nPluto\nPaperino")
  
  ' questo si spiega da solo no?
  AproDB
  
  $Conn.Begin
  
  sMioSql = "INSERT INTO miaTabella ("
  sMioSql &= " ID_Tab,"      
  sMioSql &= " Tab_Ind,"
  sMioSql &= " Tab_Fra"
  sMioSql &= " )"
  sMioSql &= " VALUES ("
  sMioSql &= " 1,"                                    
  sMioSql &= " \"" & sIndirizzo & "\","                    ' " '" & sIndirizzo & "',"
  sMioSql &= " \"" & sFrase & "\""  
  sMioSql &= " );"  
  
  hTabella = $Conn.EXEC(sMioSql)
  $Conn.Commit
  $Conn.Close
 
End

Public Sub PerSql(s As String) As String
  
  Dim s1 As String
  
  s1 = Replace$(s, "\n", "akkapo")
  s1 = Replace$(s1, "/", "SLASSS")
  Return s1
    
End


Public Sub PerDraw(s As String) As String
  
  Dim s1 As String
  
  s1 = Replace$(s, "akkapo", "\n")
  s1 = Replace$(s1, "SLASSS", "/")
  
  Return s1
  
End


Vi piace il mio nuovo (primo) avatar non so perché ma mi è venuto in mente il primo Aprile.

 :ciao:
Titolo: Re: Database e stringhe speciali
Inserito da: Berserker79 - 03 Aprile 2014, 20:19:10
Ciao, la sub PerDraw quando viene utilizzata?
Ma hai usato questo sistema per quale motivo?
Che problematiche hai riscontrato?
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 03 Aprile 2014, 23:53:00
Ciao, la sub PerDraw quando viene utilizzata?
Ma hai usato questo sistema per quale motivo?
Che problematiche hai riscontrato?

Ciao Berserker79, ti ringrazio dell'interessamento.

La sub perDraw() la uso per poi “disegnare” il testo, quello memorizzato nel campo, in una DrawingArea.
Ho usato questo sistema per poter registrare nei campi piccole frasi (max 100 caratteri a esagerare, normalmente nemmeno la metà) che possono andare a capo anche 3 o 4 volte oppure nessuna, e poter registrare anche delle path come ho esemplificato.
Perchè malgrado le varie notizie apparse sul bolg io ho trovato solo questo sistema per evitarmi errori quando inserisco le slash e gli a capo.
Problemi con SQLite3 nessuno così funziona solo chiedevo se poteva esserci un modo “migliore”, più professionale o più corretto se così si può dire.
Ti ripeto ho visto molte cose sul blog ma nessuna sembra funzionare almeno a me. :-\
 :ciao:
Titolo: Re: Database e stringhe speciali
Inserito da: Berserker79 - 04 Aprile 2014, 20:29:38
In un mio programma gambas, in una TextLabel, per andare a capo uso il tag html "<br>".
Potresti provare quindi a sostituire \n con <br> e provare a disegnarla nella draw senza rifare la conversione.
Titolo: Re: Database e stringhe speciali
Inserito da: fsurfing - 04 Aprile 2014, 20:37:28
premesso che non ho provato , ma credo che teoricamente se per inserire nuovi record nel db utilizzi:

Codice: [Seleziona]
hTabella = $Conn.create("miatabella") 
htabella!id_tab="pippo"
....
....
htabella!indirizzo="questo\nèilmio\nindirizzo"
htabella.update

non dovresti avere problemi, l' unico problema è dato solitamente dal carattere " ' " che io sostituisco sempre in " ` " (almeo su mysql)


per modificare un record invece usa:
Codice: [Seleziona]
hTabella = $Conn.edit("miatabella", "id_tab=" & pippo) 
htabella!id_tab="pippo"
....
....
htabella!indirizzo="questo\nèilmio\nindirizzo"
htabella.update

Titolo: Re: Database e stringhe speciali
Inserito da: Golia - 04 Aprile 2014, 21:15:39
Citazione
non dovresti avere problemi, l' unico problema è dato solitamente dal carattere " ' " che io sostituisco sempre in " ` " (almeo su mysql)

io faccio così:
Codice: gambas [Seleziona]
Replace(mystring, "'", "''")
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 05 Aprile 2014, 14:09:08
Perbacco quante risposte!   :o

Intanto vi chiedo scusa per il ritardo ma purtroppo anche i pensionati se sposati devono lavorare per un principale molto esigente.  :'(

Quindi solo ora leggo i vostri post, adesso me li studio e poi vi dico.  :D

Intanto grazie a tutti.

 :ciao:
Titolo: Re: Database e stringhe speciali
Inserito da: Golia - 05 Aprile 2014, 18:29:22
Citazione
ma purtroppo anche i pensionati se sposati devono lavorare per un principale molto esigente
Hi hi... ma non solo i pensionati!
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 05 Aprile 2014, 18:35:05
Citazione
ma purtroppo anche i pensionati se sposati devono lavorare per un principale molto esigente
Hi hi... ma non solo i pensionati!

eh si mi sa che hai proprio ragione! :D

A proposito mi sta chiamendo alla pappa poi inserisco la risposta, ho fatto un paciugo e per risponderti ho perso tutto!  :rolleyes:

 :ciao:

Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 05 Aprile 2014, 19:40:51
In effetti prima di scomodare gli altri occorrerebbe fare prove più approfondite. :-[
Io ho popolato delle tabelle con INSERT TO e ho iniziato ad ottenere degli errori quando tentavo di passare stringhe che andavano a capo.
Dopo varie prove con l'aiuto di precedenti discussioni nel blog e in particolare di una della mailing list ufficiale riportata da vuott, ho ottenuto l'inserimento delle variabili senza errori con l'ausilio di questo " \"" messo davanti e dietro la variabile.
Però malgrado non avessi errori vedevo nella tabella, attraverso SQLite Database Browser, solo la frase prima del tag \n.

Anche interrogando con SELECT vedevo la frase troncata al primo tag.
Da qui ho anche dato per scontato (e si, cosa volete, può essere l'età? :rolleyes:) che ogni tipo di slash troncasse  le parole.
Stupidamente non ho pensato di interrogare il database attraverso Gambas.
Se lo avessi fatto avrei ricevuto indietro esattamente quanto inserito anche se non visibile dal browser.
Di questo devo ringraziare fsurfing.
Ora comprendo la perplessità di Berserker79 nel cercare di capire cosa volevo.
Vi ringrazio molto tutti quanti che mi avete aiutato a capire un altro pezzo di Gambas e di SQL. :2birre:

Vorrei approfondire un attimo con voi la questione del carattere apostrofo ( ' ) che, se ho capito bene, dà  dei problemi (solo in MySQL?). La cosa detta sia da fsurfing che da Golia non mi ha del tutto convinto, la sostituzione del carattere apostrofo, senza offesa  :-* però non mi appare corretta forse occorrerebbe trovare un'altra soluzione oppure lo ripristinate? Ma allora c'è il rischio di ripristinare cose che non andavano ripristinate. :-\
Avete già provato a usare (  " \"" & variabile & "\""  ) per l'inserimento di caratteri speciali in MySQL?

Lo so che siete tutti e tre esperti di database e avete anche scritto di questo (ho scaricato i vostri esempi almeno di fsurfing e Golia  :2birre: ), perchè se ho capito bene da quanto ho letto dovrebbe funzionare, ma potrebbe benissimo essere che non ho capito (oltre a tutto era in inglese!).

Un'ultima cosa: ma voi francamente inserireste in un campo di database delle frasi che vanno a capo? Frasi corte però.

 :ciao:
Titolo: Re: Database e stringhe speciali
Inserito da: Berserker79 - 06 Aprile 2014, 09:08:17
Ciao, per il carattere ', quando deve essere inserito in un db, va raddoppiato in quanto il primo viene interpretato dal linguaggio sql come carattere speciale che segna l'inizio o la fine di una stringa.
Credo valga per ogni db, io l'ho testato con sqlite e sqlserver.
Per quanto riguarda la tua domanda di inserire o meno le stringhe che vanno a capo nel db, dipende da cosa devi farci. Dovresti spiegare meglio il funzionamento del programma.
Ciao.
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 06 Aprile 2014, 14:16:55
Ciao, per il carattere ', quando deve essere inserito in un db, va raddoppiato in quanto il primo viene interpretato dal linguaggio sql come carattere speciale che segna l'inizio o la fine di una stringa.
Credo valga per ogni db, io l'ho testato con sqlite e sqlserver.
Per quanto riguarda la tua domanda di inserire o meno le stringhe che vanno a capo nel db, dipende da cosa devi farci. Dovresti spiegare meglio il funzionamento del programma.
Ciao.

Ciao Berserker79,
intanto grazie della spiegazione riguardo a '  :2birre:

Per quanto concerne le “stringhe a capo” per ora il “programma” non è un programma è, come dire, una specie di tesi di studio che mi sono prefissato per migliorare (imparare!) la mia capacità di “programmatore” (tieni conto che io non sono mai uscito prima d'ora da Office e tutta la mia esperienza era Automation, Word, Excel, poco Access non ho mai interagito con il sistema e usato le Api! E' vietato ridere  :P) , per fare questo, cioè imparare, sto progettando un'applicazione di stampa su etichette che prevede l'utilizzo di un database che memorizzi i vari aspetti sia grafici che di contenuto.
Lo so (fsurfing dixit) che esistono già programmi di questo genere che sono senz'altro migliori di quanto, anche spremendomi, mai riuscirei a fare, ma senza un obiettivo un po ambizioso io non sarei capace di procedere nello studio.
Poi naturalmente sulla scorta di quanto riuscirò ad apprendere (!?), un'ulteriore idea, magari un po più originale, l'avrei ma per ora è fuori della mia portata... un passo alla volta, diciamo.
Comunque alla fin fine le frasi memorizzate nei campi le devo stampare su un'etichetta tipo indirizzi per capirci, però non divisa per campi perché come ti ho detto in precedenza in partenza non si sa se sarà su una, due, tre, quattro... righe. Non molte comunque essendo un'etichetta.
L'idea generale è questa, siccome non so in quante parti l'etichetta verrà suddivisa per inserire testo e grafica, utilizzo delle tabelle separate che memorizzano ogni singolo aspetto sul genere:
“ID_AreaVerticale – AreaVerticale” ecc. e volevo evitarmi di doverlo fare anche per ogni singola riga delle aree. Lo so che il bello dei database relazionali alla fine è quello di mettere insieme con le query quello che abbiamo diviso con le relazioni ma il mio cervello più di tanto non riesce a dare.
Sono ancora in fase di progettazione e sono aperto ad ogni suggerimento (tuo e anche degli altri) mi volessi dare.

Ora se non mi dai del rompi vorrei tornare un attimo ancora sul carattere '.
Tu hai mai usato " \"" ? perché se funzionasse ti eviterebbe di cercare nella stringa il carattere da raddoppiare o no?  :-\

Ciao e ancora grazie

 :ciao:
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 06 Aprile 2014, 14:57:05
Avete già provato a usare (  " \"" & variabile & "\""  ) per l'inserimento di caratteri speciali

Per far mostrare le virgolette "   hai provato la funzione Quote() ?

Esempio:
Codice: gambas [Seleziona]

Public Sub Form_Open()

  Dim num As String = "40"

   Label1.Text = "Alibaba e i " & Quote(num) & " latrones !"

End
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 06 Aprile 2014, 15:26:46

Per far mostrare le virgolette "   hai provato la funzione Quote() ?

Esempio:
Codice: gambas [Seleziona]

Public Sub Form_Open()

  Dim num As String = "40"

   Label1.Text = "Alibaba e i " & Quote(num) & " latrones !"

End


vuott no entiendo!

ma qui si sta parlando di nascondere l'apostrofo a SQL. E non di mostrarlo  :-\

!hola
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 06 Aprile 2014, 16:28:10
ma qui si sta parlando di nascondere l'apostrofo a SQL. E non di mostrarlo
Ah, scusa.  :-X


vuott no entiendo!

!hola
Porque te vas hablando español ?
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 06 Aprile 2014, 17:49:53

Porque te vas hablando español ?

A scusa vuott,
è che dopo aver mangiato la ribollita, durante la digestione, è l'unico mio momento  poliglotta, pensa che non me ne ero neanche accorto.  ;D

Comunque ho provato a passare la stringa a QUOTE$() ma mi da errore su INSERT INTO (scusate ma io passo tutto a SQL!) invece se inserisco i dati con Create() come dice fsurfing quello si macina tutto almeno con SQLite.
Comunque, siccome mi sembrate un po pigri,  :sleepy: se volete evitarvi il disturbo di crearvi una piccola prova qui allego il semplicissimo programmino che uso io forse lo si può adattare a MySQL.

 :ciao:
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 07 Aprile 2014, 11:33:41
Ah, scusa.  :-X

"...ti conosco mascherina..."  :nono:

Vuott hai approfittato della mia difficile digestione per passare un messaggio subliminale.
Si si ma quale?
Io non riesco a capire come usare Quote e UnQuote in questa situazione.  :hatecomputer:

Magari se ti va di approfondire...

 :ciao:


Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 07 Aprile 2014, 15:39:04
.... passare un messaggio subliminale.
Si si ma quale?
Io non riesco a capire come usare Quote e UnQuote


Mah... avevo visto velocemente in un paio di tuoi messaggi queste righe:
" \"" & variabile & "\""  ed anche questa: Tu hai mai usato " \"" ?

Pensavo quindi che fossi interessato a ciò che viene svolto dalla funzione Quote() .   :-\
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 08 Aprile 2014, 15:18:00
Mah... avevo visto velocemente in un paio di tuoi messaggi queste righe:
" \"" & variabile & "\"" ...   :-\

 :'(
velocemente

 :'(  :'(
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 08 Aprile 2014, 15:34:14
:'(
velocemente
Avevo glissato, perché di database non ne so niente.  ;D
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 08 Aprile 2014, 15:40:29
Allora vorrei chiudere la discussione, anche perché vedo che B,F,G e anche V che va veloce hanno perso interesse  a rispondere a quello scritto sopra ma anche al  sottoscritto e io dico: “si è mai vista tanta crudeltà verso gli anziani”  :'( ha proprio ragione McCarty non è un modo per vecchi!

Comunque, sono vecchio, rimbambi.. ma sopratutto rompiba... e non demordo specialmente quando non riesco a capire bene fino in fondo, quindi (ri)chiedo: siccome SQL vuole che le stringhe a lui passate siano racchiuse fra apici (') e da qui la necessità di intercettare tutti gli apici che sono in una stringa a lui (SQL) passata con l'aggravante che anche Gambas3 interpreta detto apice a modo suo e che naturalmente è diverso da SQLite3, per Gambas sono frasi da escludere dal contesto del codice. Tutto ciò detto e messo a verbale dico che le prove da me fatte con il solo SQLite3 riscontrano che racchiudendo come detto la variabile contenente tale apice viene ampiamente e bellamente digerita da SQL come dimostrano le seguenti righe e come potrete riscontrare personalmente se avrete la compiacenza di scaricare il file allegato e provarlo magari estendendo la prova a postgreSQL, MySQL, MariaDB(di cui non si sente più parlare!?).

Esso contiene inoltre un piccolo ciclo commentato rivolto ai gamberetti alle prime armi come Tonno verde.

  
Codice: gambas [Seleziona]
'sNazione = "Austria"
  sNazione = "Pol'onia"
  'sNazione = "Francia'"
  '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 & "'"
  sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & " \"" & sNazione & "\""


Austria funziona con tutti e tre i SELECT, Francia e Polonia solo con il terzo!

B F G V se ci siete battete un colpo non abbandonate un vecchietto indifeso!

 :ciao:
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 08 Aprile 2014, 15:42:01

Avevo glissato, perché di database non ne so niente.  ;D

Ma io ti chiedo aiuto lo stesso  :-*
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 08 Aprile 2014, 15:56:36
MariaDB(di cui non si sente più parlare!?).

Mo' pure MariaSantissima !?   :D
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 08 Aprile 2014, 15:57:39
A scusa vuott,
l'eventuale risposta la gradirei in una lingua possibilmente viva, astenersi da aramaico &C

ܦܬܓܡܐ

 :rotfl:
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 08 Aprile 2014, 16:04:57
... SQL vuole che le stringhe a lui passate siano racchiuse fra apici (')

Riconfermando che posso aiutarti poco in questo campo, ...tu prima parli di apici, ma poi imposti le virgolette nel codice
Codice: gambas [Seleziona]
" \"" & sNazione & "\""

Perché ?  ???
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 08 Aprile 2014, 16:16:30

Riconfermando che posso aiutarti poco in questo campo, ...tu prima parli di apici, ma poi imposti le virgolette nel codice
Codice: gambas [Seleziona]
" \"" & sNazione & "\""

Perché ?  ???

Gli apici sono all'interno della variabile  :-\ intendo dire che, almeno credo, quando occorre memorizzare una parola che contiene un apostrofo tipo “L'Aquila” occorre cambiare in qualche modo l'apostrofo altrimenti SQL va in errore le virgolette servono per far digerire a Gambas le slash rovesciate che per lui e non solo per lui sono caratteri speciali... almeno così credo.
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 08 Aprile 2014, 16:26:29
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 ?
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 08 Aprile 2014, 16:53:42
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 ?

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

 :ciao:
Titolo: Re: Database e stringhe speciali
Inserito da: milio - 08 Aprile 2014, 17:15:29
Come gia' scritto da Golia (http://www.gambas-it.org/smf/index.php?topic=3340.msg32481#msg32481)

Dim sCitta As String

  sCitta = "L'Aquila"
  sCitta = Replace(sCitta, "'", "''")
  sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & sCitta & ";" 


E' il metodo che adotto sempre anch'io...

@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? :)

Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 08 Aprile 2014, 18:31:56
Come gia' scritto da Golia (http://www.gambas-it.org/smf/index.php?topic=3340.msg32481#msg32481)

Dim sCitta As String

  sCitta = "L'Aquila"
  sCitta = Replace(sCitta, "'", "''")
  sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & sCitta & ";" 


E' il metodo che adotto sempre anch'io...


Ciao Milio,
ti leggo sempre molto volentieri nel forum e so che sei uno dei "cervelloni" e infatti mi hai subito fatto notare di essermi dimenticato il ";" di fine query, grazie  :2birre:
Ho potuto così constatare che SQLite è “infido” infatti accetta di non avere il “fine query” anche in INSERT e in CREATE (dove peraltro io mi ero ricordato di metterlo) e a questo punto penso non occorra nanche negli altri comandi SQL.
Però a parte questo come ti (mi!?) spieghi che passando la stringa con i caratteri suddetti SQL in SQLite3 accetta l'apostrofo? E senza bisogno di REPLACE? Che tu sappia succede anche negli altri database o è solo una caratteristica di SQLite?

Ciao e ancora grazie
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 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  :-*
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 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:
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 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?  ???
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 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 ?
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 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:
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 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
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 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...
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 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?  ;)
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 08 Aprile 2014, 23:00:30
Quindi se io posso evitarmi di sostituire o camuffare non è meglio?
Ohhh, adesso mi pare (http://levipere.com/wp-content/plugins/smilies-themer/Axendr/ashamed0006.gif) 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) & ";"
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 09 Aprile 2014, 00:04:14
Ohhh, adesso mi pare (http://levipere.com/wp-content/plugins/smilies-themer/Axendr/ashamed0006.gif) 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:
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 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
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 09 Aprile 2014, 00:22:54

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

Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 09 Aprile 2014, 00:33:09
Applicativo?  :o


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


(http://37.media.tumblr.com/tumblr_mcnh5cn9C11rt0g8wo1_500.gif)
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 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:
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 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:
Titolo: Re: Database e stringhe speciali
Inserito da: vuott - 09 Aprile 2014, 20:54:52

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



Lo sappiamo bene perché non "dormono" 'sti anziani !   :devil:

(http://www.dagospia.com/img/foto/12-2013/847584758-goldstein-screw-292694.jpg)
Titolo: Re: Database e stringhe speciali
Inserito da: Gianluigi - 09 Aprile 2014, 21:11:44

Lo sappiamo bene perché non "dormono" 'sti anziani !   :devil:


Come ti permetti! Solo quattro  ;D