Newsgroup: it.comp.lang.delphi
Titolo: TAdoConnection.Execute strano errore!

 Salve,
ho scritto un programma di gestione clienti ma questa volta invece di 
usare il solito MySQL come Database ho usato Access 2000!
Il problema è che nella prima form di inserimento dato per ClientiAttivi 
viene tutto inserito correttamente con la sintassi Adoconnection.execute
('INSERT INTO ... ')
mentre in tutte le altre form di inserimento dati mi da un errore 
ovvero "Errore di sintassi INSERT INTO".
Adesso non capisco quale sia l'errore visto che uso sempre lo stesso 
componente connection per eseguire le query di Inserimento dati e anche 
perchè la sintassi è sempre uguale, cambian o solo i campi e le tabelle!
Non riesco a capire quale sia il problema!Grazie!
--- posted by geoForum on 
http://www.delphiedintorni.it

 sempre uguale, cambiano solo i campi e le tabelle!
...e ti pare poco?
Prova a monitorare il testo SQL quando ti va in errore: probabilmente manca
qualche spazio tra una parola chiave e l'altra, oppure qualche parentesi
aperta e chiusa. Comunque, l'errore di sintassi di solito non è colpa di
ADO...
Altrimenti: posta il codice, che non siamo veggenti.
Saluti
	Marco Bortolani
	info @ 
marcobortolani.it


nella tabella clienti attivi era..
Form1.Adoconnection.execute('INSERT INTO ClientiAttivi 
(RagSociale,Indirizzo,CAP,Telefono,Mail,Note) VALUES 
('+''''eRagSociale.text+''''+','+''''+eIndirizzo.text+''''+','+''''+eCAP.
text+''''+','+''''+eTelefono.text+''''+','+''''+email.text+''''+','+''''+
eNote.text+''''+')');
Questa funziona perfettamente! Adesso la tabella ClientiPotenziali ha la 
stessa struttura identica, cambia solo il nome della tabella quindi 
diventa:  
Form1.Adoconnection.execute('INSERT INTO ClientiPotenziali 
(RagSociale,Indirizzo,CAP,Telefono,Mail,Note) VALUES 
('+''''eRagSociale.text+''''+','+''''+eIndirizzo.text+''''+','+''''+eCAP.
text+''''+','+''''+eTelefono.text+''''+','+''''+email.text+''''+','+''''+
eNote.text+''''+')');
ma sranamente qui non funziona più! Stessa cosa per i ClientiProtestati!
Se avete qualche idea! 
Grazieee


Grazieee
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

 eNote.text+''''+')';
Se posso permettermi, io risolverei anche quell'orridume di concatenazioni e
virgolette con un bel format, e userei le doppie virgolette invece degli
apici, che non sono sempre digeriti dai motori DB:
  strSQL := Format(
    'INSERT INTO ClientiPotenziali ' +
    '(RagSociale, Indirizzo, CAP, Telefono, Mail, Note)' +
    'VALUES ("%s", "%s", "%s", "%s", "%s", "%s")',
    [eRagSociale.text, eIndirizzo.text, eCAP.text,
    eTelefono.text, email.text, eNote.text]
  );
-- 
Jax
====
Quaggiù, il successo è solo il metro di giudizio di ciò che è buono o
cattivo. (Hitler)

Jax


 paramentrica che non torni un recordset.
D'accordo al 100%.
-- 
Jax
====
La verità è raramente pura, e mai semplice.

 questo modo. La sfiga è se c'è qualche virgoletta :D
Ecco uno dei perchè esiste QuotedStr :)
Acqua


Bravo, volevo vedere se eri attento.
:D
-- 
Jax
====
Il giovane che non ha mai pianto è un selvaggio, e il vecchio che non
ride è un pazzo. (George Santayana)

Ho provato con:
strSQL := 'INSERT INTO ClientiPotenziali 
(RagSociale,Indirizzo,CAP,Telefono,Mail,Note) VALUES 
('+''''eRagSociale.text+''''+','+''''+eIndirizzo.text+''''+','+''''+eCAP.
text+''''+','+''''+eTelefono.text+''''+','+''''+email.text+''''+','+''''+
eNote.text+''''+')';
ShowMessage(strSQL);
Form1.Adoconnection.execute(strSQL);
L'output dello ShowMessage() č: INSERT INTO ClientiPotenziali 
(RagSociale,Indirizzo,CAP,Telefono,Mail,Note) VALUES 
('prova','prova','prova','prova','prova','prova')
mentre l'errore che mi da su AdoConnection.execute č:
Project1.exe raised exception class EOleException with message 'Errore 
di sintassi nell'istruzione INSERT INTO'. Process Stopped
Il tutto č strano perchč nella tabella ClientiAttivi con la stessa 
procedura va alla grande!Ho controllato anche la struttura delle tabelle 
piů di una volta e non ci sono errori!
Lascio la parola a voi esperti! :P
Grazie 1000!


 ('prova','prova','prova','prova','prova','prova')
Prova a omettere le parentesi dopo il nome della tabella
INSERT INTO ClientiPotenziali
RagSociale,Indirizzo,CAP,Telefono,Mail,Note
VALUES
('prova','prova','prova','prova','prova','prova')
-- 
Jax
====
Se avesse detto meta' di quel che ha detto avrei capito il doppio...

 ('prova','prova','prova','prova','prova','prova')
Mi riconnetto al thread per proporre l'uso dei parameters:
	ADOQuery1.Close;
	ADOQuery1.SQL.Clear;
	ADOQuery1.SQL.Add('INSERT INTO ClientiPotenziali (');
	ADOQuery1.SQL.Add('    RagSociale, Indirizzo, CAP,');
	ADOQuery1.SQL.Add('    Telefono, Mail, Note)');
	ADOQuery1.SQL.Add('VALUES (');
	ADOQuery1.SQL.Add('    :PRagSociale, :PIndirizzo, :PCAP, ');
	ADOQuery1.SQL.Add('    :PTelefono, :PMail, :PNote)');
	ADOQuery1.Parameters.ParamByName('PRagSociale').Value := 'prova';
	ADOQuery1.Parameters.ParamByName('PIndirizzo').Value  := 'prova';
	ADOQuery1.Parameters.ParamByName('PCAP').Value        := 'prova';
	ADOQuery1.Parameters.ParamByName('PTelefono').Value   := 'prova';
	ADOQuery1.Parameters.ParamByName('PMail').Value       := 'prova';
	ADOQuery1.Parameters.ParamByName('PNote').Value       := 'prova';
	ADOQuery1.ExecSQL;
Di queste fatte così ne scrivo circa 1000 al giorno e non mi hanno mai dato
problemi di sintassi (nè con ADO, nè con BDE, nè con DbExpress)...
Prova un po'.
Saluti
	Marco


Beh per quanto possano essere precese le Params ho provato con il tuo 
codice ma non va! mi da sempre lo stesso errore di sintassi!sto 
sclerando!


 sclerando!
Hai provato senza le parentesi come ti ho detto?
-- 
Jax
====
Un viaggio di mille miglia deve cominciare con un solo passo. (Lao Tzu)

sclerando!
Hai già provato a ricreare da zero nel DB la tabella
che ti da problemi? ... magari proprio con un copia
incolla ...


Beh ragazzi ho risolto ma molto stranamente!
Ho provato cosi per caso ad eliminare il campo 'note' perchè era l'unico 
che non esisteva nella tabella ClientiAttivi e quest'ultima era l'unica 
tabella che girava bene!
Et Voilà funzina!
Adesso non so se fa parte di qualche restrizione/configurazione di 
Access o se è proprio un bug di MS ma a quanto ho capito una colonna 
chiamata 'note' su Access non è possibile crearla perchè sembra essere 
qualche parola chiave!
Cercherò nelle MSDN, farò dei TEST e vi farò sapere di più! (magari 
provare anche voi con Access 2000 se vi risulta)
In ogni caso mi sembra strano che access permetta di creare un campo con 
un nome chiave non utilizzabile.
Vi ringrazzio tutti cmq dell'aiuto!
Carta Federico


 con un nome chiave non utilizzabile.
Ah porca trota č vero!!!!
Pensa che avevo avuto anch'io un problema simile... guarda questo thread:
http://tinyurl.com/656ep
solo che io l'avevo avuto sul nome della tabella...
Oltretutto se fai la *stessa* query direttamente in access, funziona...
quindi presumo sia un problema di ADO.
Hai tutta la mia comprensione.
-- 
Jax
====
"MILANO - Woody Allen aveva interpretato per uno dei suoi film piů
memorabili il personaggio di Zelig, che progressivamente assumeva le
fattezze di chi gli stava vicino. Ora č il nome scelto dalla Guardia di
Finanza per l'operazione contro un virus ..."