* * * *

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

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

Inserisci il nome utente, la password e la durata della sessione.

60 Visitatori, 0 Utenti

Autore Topic: Prima prova db con sqlite RISOLTO  (Letto 2528 volte)

Golia

  • Newbie
  • *
  • Post: 10
  • Karma: +0/-0
Prima prova db con sqlite RISOLTO
« il: Novembre 14, 2020, 05:57:17 pm »
Ciao a tutti, la mia prima prova con Lazarus.

Ho fatto il progetto seguendo  la guida " DB concetti fondamentali e connessioni standard" http://www.lazaruspascal.it/index.php?page=140.
Ho fatto un db sqlite con una tabella tipo rubrica.
Tutto bene, inserito i componenti descritti e la griglia  DBGrid viene popolata dai dati di sqlite,  posso modificare i dati nella griglia ma non salvare le modifiche nel database, e quando vado a dare il refresh mi da errore: SQLQuery1:Must apply updates before refreshing data.
Il componente "DBNavigator" esegue le funzioni di salvataggio eliminazione inserimento etcc,? o si fa tutto da codice?
C'è qualche esempio o semplice guida per iniziare?
Ho anche letto qui nel forum di "Zeoslib", sembra essere una libreria per facilitare questo lavoro, ma ho letto anche pareri contrastanti. Voi che ne pensate di questa libreria, vale la pena? Premetto che i miei progetti sono semplici.
Vi ringrazio e buona domenica
« Ultima modifica: Novembre 16, 2020, 07:15:44 pm da Golia »

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Prima prova db con sqlite
« Risposta #1 il: Novembre 14, 2020, 10:45:43 pm »
Vado a memoria.Nell'evento After Post del dataset metti il comando

NomeDataSet.ApplyUpdates;

Fammi sapere se risolve.

Ieri è passato, domani è futuro, oggi è un dono...

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Prima prova db con sqlite
« Risposta #2 il: Novembre 15, 2020, 08:28:21 am »
Ciao,
tieni conto che quello che ti scrivo è frutto di tentativi miei, fino a quando non sono riuscito a scrivere, quindi non so se è il metodo più ortodosso !!!

Avrai un oggetto di tipo "TSQLQuery", che nel mio codice chiamerò "SQLQuery1".
Prima di eseguire "SQLQuery1.Open", ho messo questo:
Codice: [Seleziona]
        //Per poter modificare i record tramite DBNavigator1, ho bisogno delle seguenti opzioni:
     with SQLQuery1 do begin
        ReadOnly:=False;
        //UsePrimaryKeyAsKey:=False;
        UsePrimaryKeyAsKey:=True;
        PacketRecords:=-1; //https://wiki.freepascal.org/mssqlconn#Error_20019_:_Attempt_to_initiate_a_new_Adaptive_Server_operation_with_results_pending
        UpdateMode:=upWhereChanged;
     end;

Ho poi aggiunto la gestione dell'evento "SQLQuery1AfterPost", che ho compilato così:
Codice: [Seleziona]
  //Usata quando (TipoApertDB = tadScrivi)
  try
    SQLQuery1.ApplyUpdates;
    if (1 = 2) then begin
      SQLTransaction1.Commit; //A differenza di CommitRetaining, chiude la conenssione subito dopo aver committato
      GestVislTabella(Self);  //Visto quanto scritto qui sopra, ricarico la tabella
    end else begin
      SQLTransaction1.CommitRetaining; //Fa la commit, e tiene attiva la connessione
    end;
  except
    on E: Exception do begin
      EmettiErrore(0, 'ERRORE: ' +
                      LineEnding +
                      E.Message);
      //Ricarico i dati della tabella.
      //Se non lo facessi, l'utente vedrebbe in griglia anche i valori che non sono stati salvati !!!
      GestVislTabella(Self);
    end;
  end;

Ripeto: non so se sia il metodo più corretto, ma funziona.

P.S. Per quanto riguarda il componente Zeos, io sono uno di quelli che non lo usa, e fino ad ora me la sono cavata senza !!!

Ciao, Mario
« Ultima modifica: Novembre 15, 2020, 08:30:47 am da bonmario »

Golia

  • Newbie
  • *
  • Post: 10
  • Karma: +0/-0
Re:Prima prova db con sqlite
« Risposta #3 il: Novembre 15, 2020, 05:31:00 pm »
Ciao, intanto vi ringrazio tutti e due
@xinyiman ho fatto così:
Codice: [Seleziona]
procedure TForm1.SQLQuery1AfterPost(DataSet: TDataSet);
begin
       SQLQuery1.ApplyUpdates();
end; 
Non mi da più errore ma non va ancora a modificare il database

@bonmario perdonami ma sono proprio ai primi passi. Non ho scritto codice, ho fatto tutto da grafica. Non so dove "incastrare" il tuo codice, in unit1 non trovo "SQLQuery1.Open" perchè appunto credo venga eseguito dai componenti. vedo di studiare non mollo.

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Prima prova db con sqlite
« Risposta #4 il: Novembre 15, 2020, 06:50:18 pm »
Dopo l'applyupdate hai fatto il commit della transazione?
Ieri è passato, domani è futuro, oggi è un dono...

Golia

  • Newbie
  • *
  • Post: 10
  • Karma: +0/-0
Re:Prima prova db con sqlite
« Risposta #5 il: Novembre 15, 2020, 07:44:10 pm »
No ho fatto come da guida.
Adesso ho provato ad aggiungere
Codice: [Seleziona]
  SQLTransaction1.Commit; 
Niente.

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Prima prova db con sqlite
« Risposta #6 il: Novembre 15, 2020, 09:01:17 pm »
Prova ad allegare un esempio e vedrò di correggerlo
Ieri è passato, domani è futuro, oggi è un dono...

Golia

  • Newbie
  • *
  • Post: 10
  • Karma: +0/-0
Re:Prima prova db con sqlite
« Risposta #7 il: Novembre 16, 2020, 02:26:03 am »
Ti ringrazio
Ho compattato la cartella del progetto togliendo l'eseguibile spero vada bene.
Grazie mille spero poi di partire in quarta  :D

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Prima prova db con sqlite
« Risposta #8 il: Novembre 16, 2020, 07:57:25 am »
@bonmario perdonami ma sono proprio ai primi passi. Non ho scritto codice, ho fatto tutto da grafica. Non so dove "incastrare" il tuo codice, in unit1 non trovo "SQLQuery1.Open" perchè appunto credo venga eseguito dai componenti. vedo di studiare non mollo.

Prima segui le altre risposte, se poi non riesci a sistemare, leggi questo: se mischi le cose rischi poi di confonderti !!!
Scusa, io di solito faccio le impostazioni da codice, e non dall'object inspector, tu invece stai facendo il contrario. Non è sbagliato, è solo questione di abitudine.
Tra i vari oggetti che hai dichiarato, c'è anche un "SQLQuery1".
Devi impostare le proprietà di quell'oggetto, come ti ho scritto nel post precedente.

Ciao, Mario

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Prima prova db con sqlite
« Risposta #9 il: Novembre 16, 2020, 08:29:20 am »
Allora con poche semplici modifiche funziona. Se vuoi puoi ignorare il form create e il form destroy, ma io preferisco caricare le connessioni così.
Poi ti bastava aggiungere la linea

Self.SQLTransaction1.CommitRetaining;

La differenza tra Commit e CommitRetaining è che la prima salva i dati e chiude la connessione, la seconda salva i dati e mantiene la connessione aperta.

Codice: [Seleziona]
procedure TForm1.SQLQuery1AfterPost(DataSet: TDataSet);
begin
     Form1.SQLQuery1.ApplyUpdates();
     Self.SQLTransaction1.CommitRetaining;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     Self.SQLite3Connection1.DatabaseName := Application.Location + 'prova1.db';
     Self.SQLite3Connection1.Open;
     Self.SQLTransaction1.Active:=true;
     Self.SQLQuery1.SQL.Text:='select * from clienti order by cognome ;';
     Self.SQLQuery1.Open;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
     if Self.SQLQuery1.Active then
        Self.SQLQuery1.Close;

     if Self.SQLTransaction1.Active then
        Self.SQLTransaction1.Active := false;

     if Self.SQLite3Connection1.Connected then
        Self.SQLite3Connection1.Close();
end; 
Ieri è passato, domani è futuro, oggi è un dono...

Golia

  • Newbie
  • *
  • Post: 10
  • Karma: +0/-0
Re:Prima prova db con sqlite
« Risposta #10 il: Novembre 16, 2020, 05:02:14 pm »
Grazie mille del vostro tempo
Stasera mi guardo bene e vi faccio sapere
Ciao

Golia

  • Newbie
  • *
  • Post: 10
  • Karma: +0/-0
Re:Prima prova db con sqlite
« Risposta #11 il: Novembre 16, 2020, 07:07:03 pm »
@xinyiman funziona! Grazie adesso mi sembra già di vedere il percorso in discesa  :)

@ Mario ho fatto i miei progetti con il linguaggio Gambas e anch'io mi trovo scrivendo da codice. Adesso devo un po'imparare e sicuramente avrò ancora bisogno ;D

Grazie mille

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Prima prova db con sqlite RISOLTO
« Risposta #12 il: Novembre 16, 2020, 07:29:09 pm »
Figurati, ho creato il forum per questo motivo :)
Ieri è passato, domani è futuro, oggi è un dono...

Golia

  • Newbie
  • *
  • Post: 10
  • Karma: +0/-0
Re:Prima prova db con sqlite RISOLTO
« Risposta #13 il: Novembre 16, 2020, 09:26:03 pm »
Stupendo funziona anche con postgres!

Giuani

  • Newbie
  • *
  • Post: 44
  • Karma: +0/-0
Re:Prima prova db con sqlite RISOLTO
« Risposta #14 il: Febbraio 19, 2021, 07:37:11 pm »
Salve a tutti,
Stavo per aprire un altro topic, ma visto che l’argomento è lo stesso posto qui la mia richiesta.
Leggendo e copiando sul forum sono riuscito a realizzare questa procedure per creare un DB SQLite3:
begin
 SQLite3Connection1.Close;
 SQLite3connection1.DatabaseName:= 'C:\Users\PcHome\Desktop\DBProva\DatiLibri.DB' ;
 SQLite3Connection1.Open;
 SQLTransaction1.Active := true;
 SQLite3Connection1.ExecuteDirect('CREATE TABLE "libri"('+
                    '"ID" Integer NOT NULL PRIMARY KEY AUTOINCREMENT,'+
                    ' "Autore" TEXT(30) NULL,'+
                    ' "Titolo" TEXT(30) NULL,'+
                    ' "Prestato" TEXT(50) NULL,');
end;   
la il programma non da errori in fase di compilazione, ma in runtime, quando si clicca sul button che fa partile la procedura, si mostra una finestra con il seguente messaggio.
“il progetto projct1 ha sollevato una eccezione di classe ‘ESQLDatabaseError’cpn messaggio
SQLite3Connection1: incomplete input.”
Mi potete cortesemente spiegare l‘errore ?
O meglio, è possibile avere una procedura completa di creazione lettura di database SQLite3.
Grazie dell’attenzione. 

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18769
  • Topic in totale: 2232
  • Online Today: 95
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 60
Total: 60

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.