Autore Topic: mysql inseri into  (Letto 1620 volte)

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
mysql inseri into
« il: 25 Giugno 2013, 23:34:17 »
 nella preparazione della    seguente query (mysql)  se a tipo_sezione  inserisco il values  "Unione Stati"   la query funziona
se invece pongo  "Unione Stati" in  una variabile  la query da errore.
qualcuno sa dirmi come fare per usare variabili del tipo nomevar="Unione Stati"

                query = "insert into AUsezioni__ (nome_sezione, tipo_sezione, sigla_sezione, attiva, id_variazione)" 
                query = query & "VALUES("
                query = query & "'Comunità Europea'" & "," & "'Unione Stati'" & "," & "'BN_ce'" & " ," & "'no'" & " ," & 1 & ")"
  grazie giob1642

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: mysql inseri into
« Risposta #1 il: 26 Giugno 2013, 10:21:24 »
cosi' al volo penso sia un problema di apici ' e virgolette "
se corri, morirai stanco (motto degli sniper)

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql inseri into
« Risposta #2 il: 26 Giugno 2013, 11:23:37 »
no non è una questione di apici,ma mysql mal digerisce gli spazi.
un metodo potrebbe essere sostituire gli spazi con un altro carattere  per es "_" e poi nel rileggere la frase falre l'operazione inversa.
La cosa mi sembra troppo artificiosa e quasi certamente ci sarà qualche funzione che permette d'inserire anche gli spazi interni ad una stringa, ma non riesco a trevarla.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: mysql inseri into
« Risposta #3 il: 26 Giugno 2013, 11:23:53 »
La variabile riporta la stringa così come l'hai inserita. Se l'hai inserita senza apici, allora li devi mettere nella query, altrimenti li puoi inserire direttamente nella stringa.
Gli apici devono sempre racchiudere stringhe nelle query.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: mysql inseri into
« Risposta #4 il: 26 Giugno 2013, 12:51:07 »
Codice: [Seleziona]
tua_variabile = "'Unione Stati'"
query = "insert into AUsezioni__ (nome_sezione, tipo_sezione, sigla_sezione, attiva, id_variazione)" 
query &= "VALUES("
query &= "'Comunità Europea'" & "," & tua_variabile & "," & "'BN_ce'" & " ," & "'no'" & " ," & 1 & ")"

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql inseri into
« Risposta #5 il: 26 Giugno 2013, 14:33:07 »
A mio avviso la cosa non è così banale, mi spiego:
lavorando in gambas ho una serie di linee  definite in :
dim alinee as string[]      ognuna di queste line  contiene :
                                      comune,regione,provincia; quindi
 dim bline[]                    utilizzando split , riempo bline di dati, per es:
                                    bline[0]="Milano"
                                    bline[1]="Lombardia"
                                    bline[2]="Milano"
ne scaturisce una quey= "insert into AUsezioni__ (nome_sezione, tipo_sezione, sigla_sezione, attiva,                   id_variazione)" 
                query = query & "VALUES("
                query = query & "'Comunità Europea'" & "," &  bline[0]& "," & bline[1]& " ," & bline[2]& " ," & 1 & ")"
tutto funziona
se però le varie bline contengono: bline[0]="Abano terme"
                                                   bline[1]="Friuli Venezia Giulia"
                                                   bline[2]="Padova"
allora la query risulta giusta ma il motore del database non riesce a fare la registrazione

grazie giob1642

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: mysql inseri into
« Risposta #6 il: 26 Giugno 2013, 15:07:35 »
Perdona, ma da questo sembra che gli spazi gli diano fastidio. Ma è anche vero che l'ultimo elemento non li ha... boh?

Ad ogni modo, le stringhe devono passare entro singoli apici, i numeri senza apici, i float con il punto decimale.

Una domanda: ma non è che hai una configurazione, o la tabella, fatta in modo particolare?

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql inseri into
« Risposta #7 il: 26 Giugno 2013, 16:11:05 »

riporto un pezzo file txt da cui estraggo comuni, province,regioni che ho intenzione d'archiviare in una tabella da utilizzare alla bisogna; va rilevato che lo stesso problema lo ritrovo nel fare un agenda  dove archivio piccoli brani di testo che ovviamente possono contenere numerose parole,apostrofi,indirizzi e mail..............

028001;Abano Terme;PD;VEN;049;35031;A001;19726;http://www.comuni-italiani.it/028/001/
098001;Abbadia Cerreto;LO;LOM;0371;26834;A004;293;http://www.comuni-italiani.it/098/001/
097001;Abbadia Lariana;LC;LOM;0341;23821;A005;3305;http://www.comuni-italiani.it/097/001/
052001;Abbadia San Salvatore;SI;TOS;0577;53021;A006;6722;http://www.comuni-italiani.it/052/001/
095001;Abbasanta;OR;SAR;0785;09071;A007;2872;http://www.comuni-italiani.it/095/001/
068001;Abbateggio;PE;ABR;085;65020;A008;443;http://www.comuni-italiani.it/068/001/
015002;Abbiategrasso;MI;LOM;02;20081;A010;32035;http://www.comuni-italiani.it/015/002/
047001;Abetone;PT;TOS;0573;51021;A012;697;http://www.comuni-italiani.it/047/001/
076001;Abriola;PZ;BAS;0971;85010;A013;1599;http://www.comuni-italiani.it/076/001/
088001;Acate;RG;SIC;0932;97011;A014;9793;http://www.comuni-italiani.it/088/001/
071001;Accadia;FG;PUG;0881;71021;A015;2481;http://www.comuni-italiani.it/071/001/
004001;Acceglio;CN;PIE;0171;12021;A016;177;http://www.comuni-italiani.it/004/001/
077001;Accettura;MT;BAS;0835;75011;A017;2019;http://www.comuni-italiani.it/077/001/
066001;Acciano;AQ;ABR;0864;67020;A018;368;http://www.comuni-italiani.it/066/001/
057001;Accumoli;RI;LAZ;0746;02011;A019;708;http://www.comuni-italiani.it/057/001/
076002;Acerenza;PZ;BAS;0971;85011;A020;2595;http://www.comuni-italiani.it/076/002/
065001;Acerno;SA;CAM;089;84042;A023;2877;http://www.comuni-italiani.it/065/001/
063001;Acerra;NA;CAM;081;80011;A024;56177;http://www.comuni-italiani.it/063/001/
087001;Aci Bonaccorsi;CT;SIC;095;95020;A025;3223;http://www.comuni-italiani.it/087/001/
087002;Aci Castello;CT;SIC;095;95021;A026;18031;http://www.comuni-italiani.it/087/002/
087003;Aci Catena;CT;SIC;095;95022;A027;28920;http://www.comuni-italiani.it/087/003/
087005;Aci Sant'Antonio;CT;SIC;095;95025;A029;17610;http://www.comuni-italiani.it/087/005/
087004;Acireale;CT;SIC;095;95024;A028;53122;http://www.comuni-italiani.it/087/004/

In tal caso converrebbe assegnare la frase o il piccolo testo ad una variabile e registrarla tramite mysql; ciò sarebbe interessante farlo con la stessa facilità di archiviazione d'un immagine, ma se leghi tuttto ad una variabile come fare?
Potrei usare una variabile  e porlo in un campo blob  ma cosa costa in termini di risorse?
C'è quualche altro modo per farlo?

Atro problema dalla tabella txt su riportata vorrei ricavare per es una lista con tutte le province italiane.
E' possibile farlo direttamente con insert into  ( usando un distinct  solo per un dato ???) senza utilizzare un tabella temporanea?
grazie giob1642

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: mysql inseri into
« Risposta #8 il: 27 Giugno 2013, 10:54:40 »
Quello che hai postato è un CSV, separato da punti e virgola.
Se le righe contengono apici, questi devono essere controllati, in quanto potrebbero causare troncamenti, in particolare nell'inserimento nel database.
Tra le librerie presenti nel sito, ce nè una per la lettura/scrittura dei CSV, che potresti usare benissimo. Durante il caricamento delle righe, nella classe di lettura, hai a disposizione un array di valori, splittati appunto a seconda del carattere separatore. Ovviamente, trattandosi poi di inserirle in una sintassi sql, le stringhe vanno epurate dei caratteri che possono interferire nella costruzione (vedi apici), o modificarle in modo che vengano recepite da MySQL come semplici parti della stringa, e quindi non interpretate.

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql inseri into
« Risposta #9 il: 27 Giugno 2013, 16:57:30 »
Concettualmente il tuo ragionamento è perfetto, ed io,riferendomi allo stalcio di codice su riportato lo  applicavo così:

         Dim zline As New String[]
         Dim bline As New String[]
         Dim cline As New String[]
         dim i as integer
.......................................................
......................................................

  myfile = "/listacomuni.txt"
               zline = b.LoadObjectList(myfile)
                db_name = "text"
                D.DBConnect(db_name)
               i = 0
              While zline <> ""
                 bline.clear
                 cline.clear
                  bLine = Split(zline, ";")
                  cline.Add("'" & bline[1] & "'")
                  cline.Add("'" & bline[2] & "'")
                  cline.Add("'" & bline[3] & "'")

               '  bline[1] = mysql_real_escape_string(bline[1]);

                   query = "insert into table1(comune, provincia, regione)" 
                   query = query & "VALUES("
                   query = query & cline[1] & ", " cline[2] & ", " & cline[3] & ")" ""
                    D.MyRS = D.MyConn.Exec(query)
                    Inc i
                Wend

purtroppo non funziona almeno con gambas  ben diverso è se utilizzi php (nota la linea di commento ) od altri linguaggi e poi cosa devo fare per inserire in una colonna  un testo formattato?

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re: mysql inseri into
« Risposta #10 il: 27 Giugno 2013, 19:06:48 »
L'assegnazione di query non funziona se fai così?

query = "insert into table1(comune, provincia, regione)"  & "VALUES(" & cline[1] & ", " & cline[2] & ", " & cline[3] & ")" ""

Meno linee da scrivere. :)
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql inseri into
« Risposta #11 il: 27 Giugno 2013, 20:55:56 »
hai ragione solo in parte, come tu dici è possibile non considerare gli spazi vuoti interni,però un apostrofo, un simbolo od altro gli apici inseriti danno errore sulla query.
Questo è grave perchè non è possibile automatizzare la query come invece avviene in altri linguaggi.

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Re: mysql inseri into
« Risposta #12 il: 27 Giugno 2013, 21:15:02 »
puoi sostituire l'apostrofo con un altro carattere che non chrea problemi e non viene usato e poi quando rivai a leggere risostituisci il carattere prescelto con lapostrofo....
;D

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql inseri into
« Risposta #13 il: 27 Giugno 2013, 22:32:42 »
certo che posso farlo, ma significa mettere un filtro che penalizza fortemente i tempi della query che non può essere automomatica cosa che avviene in altri linguaggi.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: mysql inseri into
« Risposta #14 il: 01 Luglio 2013, 11:21:23 »
Concettualmente il tuo ragionamento è perfetto, ed io,riferendomi allo stalcio di codice su riportato lo  applicavo così:

         Dim zline As New String[]
         Dim bline As New String[]
         Dim cline As New String[]
         dim i as integer
.......................................................
......................................................

  myfile = "/listacomuni.txt"
               zline = b.LoadObjectList(myfile)
                db_name = "text"
                D.DBConnect(db_name)
               i = 0
              While zline <> ""
                 bline.clear
                 cline.clear
                  bLine = Split(zline, ";")
                  cline.Add("'" & bline[1] & "'")
                  cline.Add("'" & bline[2] & "'")
                  cline.Add("'" & bline[3] & "'")

               '  bline[1] = mysql_real_escape_string(bline[1]);

                   query = "insert into table1(comune, provincia, regione)" 
                   query = query & "VALUES("
                   query = query & cline[1] & ", " cline[2] & ", " & cline[3] & ")" ""
                    D.MyRS = D.MyConn.Exec(query)
                    Inc i
                Wend

purtroppo non funziona almeno con gambas  ben diverso è se utilizzi php (nota la linea di commento ) od altri linguaggi e poi cosa devo fare per inserire in una colonna  un testo formattato?
Io però vedo un errore nella sintassi sull'ultima assegnazione di "query =", dove vedo un doppio apice spurio, senza concatenatore...