Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

TDD o Test-Driven Development
immagine docker per lavorare con lazarus e free pascal
Indice
Installare lazarus su mac osx sierra
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non)
Advanced Record Syntax: un esempio pratico
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
DB concetti fondamentali e DBGrid
Advanced Record Syntax
DB concetti fondamentali e ZeosLib
DB concetti fondamentali e connessioni standard
guida all'installazione di fpc trunk da subversion in linux gentoo
Creare un server multithread
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Free Pascal e Lazarus sul Raspberry Pi
fpcup: installazioni parallele di lazarus e fpc
Ubuntu - aggiornare free pascal e lazarus
Come interfacciare periferica twain
Lazarus 1.0
Aspetto retrò (Cmd Line)
Disporre le finestre in un blocco unico (come Delphi)
Zeos ... dietro le quinte (prima parte)
Lavorare con file in formato JSON con Lazarus
Overload di operatori
Dataset virtuale
Linux + Zeos + Firebird
Pascal Script
La gestione degli errori in Lazarus
Indy 10 - Invio email con allegati
Brute force
Le permutazioni
Da DataSource a Excel
StatusBar - aggirare l'errore variabile duplicata
Visualizzare un file Html esterno
Evidenziare voci TreeView
Toolbar
Direttiva $macro
Indy gestiore server FTP lato Client
TImage su Form e Panel
PopUpMenu sotto Pulsante (TSpeedButton)
Conversione numerica
Proprietà
Funzioni a parametri variabili
Overload di funzioni
Liste e puntatori
Conferma di chiusura di un applicazione
Il file: questo sconosciuto
UIB: Unified Interbase
System Tray con Lazarus
Intercettare tasti premuti
LazReport, PDF ed immagini
Lazarus e la crittografia
Ampliare Lazarus
Generare controlli RUN-TIME
TTreeview e Menu
TTreeView
Utilizzare Unità esterne
Lavorare con le directory
Realizzare programmi multilingua
Codice di attivazione
File INI
Esempio lista in pascal
Stabilire il sistema operativo
Recuperare codice HTML da pagina web
Trascinare un file nel programma
Mandare mail con Lazarus
Welcome to Italian community of Lazarus and Free Pascal. Please login or sign up.

Recenti

How To

Utenti
Stats
  • Messaggi totali: 20.582
  • Totale discussioni: 2.471
  • Online today: 310
  • Online ever: 5.949 (Luglio 30, 2026, 09:49:59 PM)
Utenti online
  • Users: 0
  • Guests: 5
  • Total: 5
5 Visitatori, 0 Utenti

[Risolto] Sqlite3 errore nelle ricerche

Aperto da sergio, Aprile 17, 2021, 07:31:18 PM

Discussione precedente - Discussione successiva

DragoRosso

#15
Citazione di: sergio il Aprile 18, 2021, 06:20:41 PM
    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
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Stilgar

Citazione di: brunello il Aprile 18, 2021, 03:26:00 PM
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
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

DragoRosso

#17
Citazione di: Stilgar il Aprile 19, 2021, 12:57:04 AM
Citazione di: brunello il Aprile 18, 2021, 03:26:00 PM
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
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Stilgar

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
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

brunello

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;


sergio

Grazie a tutti , faccio alcune prove e vi comunicherò il risultato . Purtroppo prima del fine settimana non riesco a lavorarci sopra .Grazie mille  !
Programmo per passione !

sergio

Grazie mille a tutti per i vari suggerimenti , tutti molto apprezzati ! Ho provato il il sistema suggerito da Brunello che per le mie capacità è risultato il più semplice e  funziona perfettamente.
Volevo chiedere comunque se c'era la possibilità di modificare 
CitazioneSQLQuery1.SQL.Text:= 'SELECT * FROM '+Archivio+' WHERE Intest =:par1';
SQLQuery1.ParamByName('par1').Value := Edit2.text;

per  mettere un Like che consenta la ricerca anche se non si digitalizza l'intera stringa ricercata !
io ho provato a mettere
CitazioneSQLQuery1.SQL.Text:= 'SELECT * FROM '+Archivio+' WHERE Intest LIKE:par1';
SQLQuery1.ParamByName('par1').Value := Edit2.text;
la ricerca funziona sempre, ma solo se il parametro ricercato stringa è perfettamente uguale a quello nel db.
Grazie anticipatamente
Programmo per passione !

DragoRosso

#22
Ciao,
devi  usare i pattern % oppure _ per la ricerca:

%po ricerca pippo peppo troppo lampo

po% ricerca polipo polpetta polifemo

tr_ppo ricerca troppo treppo trippo

Ovviamente puoi usarli anche insieme.

https://www.sqlitetutorial.net/sqlite-like/

:) Ogni alba è un regalo, ogni tramonto è una conquista :)

sergio

Ciao DragoRosso scusa , ma in questa Query
CitazioneSQLQuery1.SQL.Text:= 'SELECT * FROM '+Archivio+' WHERE Intest Like :intest';
    SQLQuery1.ParamByName('intest ').Value := Edit2.text;
dove intest è il nome del campo del database , mentre Edit2.Text è il dato da ricercare .
come li inseriresti i pattern % ????
Io ho provato, ma non riesco a trovare il modo .
Un  aiuto mi sarebbe molto utile !
Se qualcuno potesse darmi una dritta ,  grazie mille ! :-[
Programmo per passione !

DragoRosso

Citazione di: sergio il Aprile 23, 2021, 08:03:38 PM
...... mentre Edit2.Text è il dato da ricercare .
come li inseriresti i pattern % ????

Porprio li, in Edit2.TEXT.
Esempio:

Edit2.Text := 'fa%';


Ricerca nelle righe la cui colonna Intest ha un valore che inizia per 'fa', come fattoria, farina, fagiolo .......

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

sergio

Grazie  mille !  Ho risolto mettendo
CitazioneSQLQuery1.SQL.Text:= 'SELECT * FROM '+Archivio+' WHERE Intest like :Intest';
    SQLQuery1.ParamByName('Intest').Value := '%'+Edit2.Text+'%';
Grazie mille a tutti per l'aiuto e la pazienza avuta !! :-[
Programmo per passione !

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.