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

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
[RISOLTO] Database e stringhe speciali
« il: 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:
« Ultima modifica: 09 Aprile 2014, 20:43:51 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #1 il: 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?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #2 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #3 il: 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.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #4 il: 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

« Ultima modifica: 04 Aprile 2014, 20:39:02 da fsurfing »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #5 il: 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, "'", "''")

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #6 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #7 il: 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!

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #8 il: 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:

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

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #9 il: 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:
« Ultima modifica: 05 Aprile 2014, 19:46:07 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #10 il: 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.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #11 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #12 il: 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
« 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.155
  • Tonno verde
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #13 il: 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
« Ultima modifica: 06 Aprile 2014, 15:32:26 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.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Database e stringhe speciali
« Risposta #14 il: 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 ?
« 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. »