Newsgroup: it.comp.appl.access
Titolo: SQL  insert into

Ciao 
 
Con questa istruzione  :
 
Private Sub Comando12_Click()
Dim l_sSql As String
Set db = CurrentDb
 
l_sSql = "insert into AMR_COMPONENTI( Marca,Modello,Anno,Versione,Note_Specifiche,Varianti,CodiceFornitore ,CodiceProdotto,DescrizioneProdotto,Categoria_Prodotti)" & _
" values('" & Testo_Marca & "','" & Testo_Modello & "','" & Testo_Anno & "','" & Testo_Versione & "','" & Testo_Note_Specifiche & "','" & Testo_Varianti & "','" & Testo_CodiceFornitore & "','" & Testo_CodiceProdotto & "','" & Testo_DescrizioneProdotto & "','" & Testo_Categoria_Prodotti & "')"
 
db.Execute (l_sSql)
 
MsgBox " Record Inserito Correttamente! "
 
inserisco i valori dei relativi controlli nei campi della tabella 
AMR_COMPONENTI , il problema è che se nel controllo DescrizioneProdotto c'è un apice '  allora mi da errore , questo : 
Errore di sintassi (operatore mancante) nell'espressione della query "silenziatore Beta RR 2021",")'.
 
Come posso risolvere ? 
 
Grazie 
Giuseppe
 


le soluzioni che conosco sono due:
1. aprire la tabella AMR_COMPONENTI come recordset e assegnare a ogni campo il valore corrispondente
2. effettuare un replace e sostituire ad un apice, due apici. In questo caso sql interpreta bene l'istruzione

Raddoppia gli apici REPLACE(TuoTesto,"'","''")
oppure usa il CHR(34) prima e dopo...
 
@Alex

 
 
 
db.Execute (replace(l_sSql,"'","''")
 
BFS
 
-- 
Questa email è stata esaminata alla ricerca di virus da AVG.
http://www.avg.com
 
 

Il giorno mercoledì 2 marzo 2022 alle 20:12:33 UTC+1 
g.com
 ha scritto:

Ho inserito   db.Execute (Replace(l_sSql, "'", "''"))
ma da l'errore simile   :
Errore di run-time 3075
Errore si sintassi ( operatore mancante ) nell'espressione della query "'Beta"' 
 
il valore del controllo DescrizioneProdotto era  - SILENZ.GIANN.BETA 50 RR 03 ALLUMINIO ' -
 
Giuseppe


incolla qui il valore di
l_sSql
 
prima del execute



Scusa l'ignoranza  ma qui dove ?
 
Giuseppe
 

 Giuseppe
 
Pubblica il predicato SQL che costruisci per capire l'eventuale anomalia della sintassi...!
Metti un DEBUG.PRINT I_sSQL , vai in finestra immediata e copia il predicato RISOLTO ed incollalo nel NG.
 
@Alex


Espressione :
l_sSql = "insert into AMR_COMPONENTI( Marca,Modello,Anno,Versione,Note_Specifiche,Varianti,CodiceFornitore ,CodiceProdotto,DescrizioneProdotto,Categoria_Prodotti)" & _
" values('" & Testo_Marca & "','" & Testo_Modello & "','" & Testo_Anno & "','" & Testo_Versione & "','" & Testo_Note_Specifiche & "','" & Testo_Varianti & "','" & Testo_CodiceFornitore & "','" & Testo_CodiceProdotto & "','" & Testo_DescrizioneProdotto & "','" & Testo_Categoria_Prodotti & "')"
 
Valore :
<Fuori Contesto>
Tipo:
 
Variant/Empty
Contesto:
Form_AMR_Componenti_X_Modelli.InsRecord_Click
 
Giuseppe

Ti pare di aver fatto quanto esposto...?
Cosa non era chiaro di quanto chiesto dal momento che hai incollato il predicato statico e non risolto ottenuto come  da spiegazione...?
 
@Alex

 " values('" & Testo_Marca & "','" & Testo_Modello & "','" & Testo_Anno & "','" & Testo_Versione & "','" & Testo_Note_Specifiche & "','" & Testo_Varianti & "','" & Testo_CodiceFornitore & "','" & Testo_CodiceProdotto & "','" & Testo_DescrizioneProdotto & "','" & Testo_Categoria_Prodotti & "')"
 
Allora vediamo se riesco a spiegarti io quello che in tanti cercano di 
spiegarti:
Esiste la possibilità di "rimpiazzare" (appunto "Replace") il singolo 
apice "'" con un doppio apice "''".
Quindi, al posto di:
 
 > Testo_DescrizioneProdotto
 
usa:
 
 > replace(Testo_DescrizioneProdotto, "'","''")
 
 
Inoltre ti suggerirei di rispettare un poco anche gli spazi; messa così, 
la stringa di accodamento mi sembra molto un'accozzaglia.
Cerca di separare (IMHO) le indicazioni di INSERT INTO, l'ordine di 
inserimento, la SELECT, la FROM e l'eventuale WHERE
 
Esempio:
 
Riga="INSERT INTO [tabella]"
Riga=Riga &" ( Campo1, Campo2, ....)"
Riga=Riga &" SELECT Tabella.Campo1, Tabella.Campo2 " etc etc
Riga=Riga &" FROM [tabella]"
Riga=Riga &" WHERE ....."
 
Almeno, se qualcuno dovesse leggere, non corre il rischio di diventare 
cieco su una stringa variegata.
Un po' di ordine (e qualche commento) non guastano mai in un listato di 
codice ...
 
 
Spero ti sia d'aiuto.
--
Carlo POTS
 
-- 
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus