non l'h oprovato ma così dovrebbe andare
Replace( miastringa, '''', '''''')
Un consiglio:
quando lavorate con il carattere apostrofo, a codice è meglio che non compaia.
Semplicemente usa questa forma:
ReplaceStr(miastringa, #39, #39#39);
Semplice, visibile e non crea problema alcuno.
Ciao
P.S.: ovvio che come delimitatore di stringa deve essere usato !!! ;D
(?? Si, quello è ancora più veloce ??).
In effetti non usavo quella funzione da tanto tempo, me ne ero dimenticato completamente. ;)
P.S.:
ma non è più semplice con
Ahhhh, ecco perchè non la usavo: inserisce i caratteri apostrofo anche in testa ed in coda alla stringa .......
Può essere usata direttamente così:
SQLQuery1.SQL.Text:= 'SELECT * FROM '+Archivio+' WHERE Intest = '+QuotedStr(Edit2.Text)+';';
visto che ci siamo io spesso utilizzo questo modo
soprattutto quando voglio costruire una stringa con molti parametri
rimane piuttosto manutenibile anche quando un parametro stringa deve diventare numero o viceversa
Esempio stringa -> integer: '... ''%s'' ...'
diventa '... %d ...'
SQLQuery1.SQL.Text:= Format('SELECT * FROM Archivio WHERE Intest =''%s'';', [ Edit2.Text ]');
la formattazione avviene nell'array dei parametri
la stringa con la select sql rimane pulita e senza concatenazioni
Edit:
da provare ma con la quote dovrebbe diventare
SQLQuery1.SQL.Text:= Format('SELECT * FROM Archivio WHERE Intest = %s;', [ QuotedStr(Edit2.Text) ]');
per me la soluzione più pulita è questa
SQLQuery1.SQL.Text:= 'SELECT * FROM Archivio WHERE Intest =:par1';
SQLQuery1.ParamByName('par1').Value := Edit1.text;
SQLQuery1.SQL.Text:= 'SELECT * FROM "'+Archivio+'" WHERE Intest = QuotedStr(Edit2.Text) ';
Prima e dopo Archivio usi si le virgolette che l'apostrofo. Poi QuotedStr và fuori la stringa. Termina il tutto con ';' Se ci sono errori ancora, metti anche li QuotedStr(Archivio).
SQLQuery1.SQL.Text:= 'SELECT * FROM '+Archivio+' WHERE Intest = '+QuotedStr(Edit2.Text) +';';
Poi dopo la Open, conviene sempre inserire un FIRST (cursore alla prima riga).
Ciao
per me la soluzione più pulita è questa
SQLQuery1.SQL.Text:= 'SELECT * FROM Archivio WHERE Intest =:par1';
SQLQuery1.ParamByName('par1').Value := Edit1.text;
La soluzione proposta da Brunello non l'hai provata?
A me sembra possa toglierti dai guai.
(Ed è quella più pulita in assoluto).
Stilgar
Archivio non è la tabella 'Archivio', è la variabile stringa ... il nome della tabella è 'Fornitori'.
Il codice di Brunello sarà (non conosceo l'uso dei parametri quindi non sò se quella parte è corretta):
SQLQuery1.SQL.Text:= 'SELECT * FROM '+Archivio+' WHERE Intest =:par1';
SQLQuery1.ParamByName('par1').Value := Edit2.text;
[/quote]
'Notte
Allora farei una cosa del genere:
sql := Format(SELECT * FROM %s WHERE Intest =:par1',[Archivio]);
In questo modo la lettura della stringa resta abbastanza buona e si può trovare eventuali errori di battitura.
Stilgar
per evitare di enumerare tutti i santi del paradiso prima di chiamare la
sqlquery1.open
// inserisco questa comando
sqlquery1.sql.savetofile('errore.sql');
nel caso in cui utilizzo i parametri occorre utilizzare questa piccola procedura per salvare anche i parametri associati che altrimenti andrebbero persi
procedure TDati.SalvaQuery(vDati: TQuery; nomefile: string);
var
lista: TStringList;
i: Integer;
begin
lista := TStringList.Create;
lista.Assign(vDati.SQL);
for i := 0 to vDati.Params.Count -1 do
lista.Add(vDati.Params[i].Name + ' = ' + VarToStr(vDati.Params[i].Value));
lista.SaveToFile(nomefile);
lista.Free;
end;