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?
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:
premesso che non ho provato , ma credo che teoricamente se per inserire nuovi record nel db utilizzi:
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:
hTabella = $Conn.edit("miatabella", "id_tab=" & pippo)
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)
io faccio così:
Replace(mystring, "'", "''")
Avete già provato a usare ( " \"" & variabile & "\"" ) per l'inserimento di caratteri speciali
Per far mostrare le virgolette " hai provato la funzione Quote() ?
Esempio:
Public Sub Form_Open()
Dim num As String = "40"
Label1.Text = "Alibaba e i " & Quote(num) & " latrones !"
End
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.
'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:
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 ?
sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & " \"" & "L'Aquila" & "\""
:-X
:ciao:
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:
sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & " \"" & "L'Aquila" & "\";"
scusa :-*
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
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():
sMioSql = "SELECT ID_Eti, Tab_Nom, Tab_Naz FROM miaTabella WHERE Tab_Naz =" & Quote(sNazione) & ";"
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:
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: