Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: giango - Settembre 23, 2020, 12:14:46 pm

Titolo: connessione sqlite
Inserito da: giango - Settembre 23, 2020, 12:14:46 pm
Buongiorno a tutto il team!
Sono nuovo all'ambiente Lazarus, visto che programmo da decenni in altri linguaggi.
Ho deciso questo approccio visto che Lazarus è cross-platform e poi alla mia età non ho intenzione di spendere soldi solo per divertimento.
Dopo aver risolto qualche problema di installazione, ora mi trovo con un altro strano problema. Come potete vedere dallo screenshot, a fine compilazione mi ritrovo con un errore, solo perchè ho inserito la unit "cmem" come consigliato. Il tentativo di unire cmen serve a vedere se riesco a compilare quella benedetta grid, che come potete osservare rimane vuota, dopo aver però riconosciuto i titoli di campo.
L'errore non concerne la presenza dei drivers sqlite in quanto con sqlitemanager lavoro tranquillamente sul DB. Sembra proprio che vi sia qualche settaggio mancante per il riconoscimento del percorso al driver necessario.Mi potete aiutare? Grazie in anticipo!
Titolo: Re:connessione sqlite
Inserito da: xinyiman - Settembre 23, 2020, 12:59:03 pm
Ciao, in passato mi creava quel problema avere un TDBNavigator sulla form. Dall'immagine non capisco se c'è nella parte nascosta. Se si prova a rimuoverlo e compila. Non dovrebbe centrare con sqlite quel tipo di problema.
Titolo: Re:connessione sqlite
Inserito da: xinyiman - Settembre 23, 2020, 01:39:04 pm
Cosa ho trovato su cmem:

Se includi l'unità cmem nella clausola uses del tuo programma, sostituirà il gestore di memoria nativo di Free Pascal con il gestore di memoria della libreria C. Tutta la gestione della memoria viene quindi eseguita dal gestore della memoria C.

L'unità dovrebbe essere la prima unità nella clausola uses, altrimenti la memoria può già essere allocata dalle routine di inizializzazione nelle unità che vengono inizializzate prima dell'installazione del gestore di memoria C.

C'è un piccolo programma di esempio testcmem, che dimostra l'uso dell'unità cmem.

CMem non deve essere utilizzato se viene utilizzato heaptrc.
Titolo: Re:connessione sqlite
Inserito da: giango - Settembre 23, 2020, 02:10:34 pm
Grazie per la risposta! Allora il navigator non l'ho messo per il momento e pertanto non sta li il problema. Il cmem ho provato a metterlo solo per vedere se cambiava qualcosa, ma in tal caso non solo la griglia non si compila, ma nemmeno il programma funziona, pertanto lo devo togliere.
A questo punto, visto che i files di libreria sqlite ci sono in cartella /usr/share/lazarus/2.0.10/components/sqlite/, non so proprio come fare a risolvere il problema.
Titolo: Re:connessione sqlite
Inserito da: xinyiman - Settembre 23, 2020, 02:14:18 pm
Domanda stupida: il pacchetto libsqlite3-dev lo hai installato?
Titolo: Re:connessione sqlite
Inserito da: giango - Settembre 23, 2020, 02:19:12 pm
questi sono i pacchetti installati per le librerie, oltre a sqlite3
Titolo: Re:connessione sqlite
Inserito da: xinyiman - Settembre 23, 2020, 04:06:50 pm
Sarebbe bello avere il messaggio di errore dopo che hai tolto l'unità cmem.
Titolo: Re:connessione sqlite
Inserito da: giango - Settembre 23, 2020, 06:12:00 pm
Se tolgo l'unità 'cmem' non compare alcun errore! La tabella assume il nome dei campi ma rimane vuota, ovvero come vedi dallo screenshot tutti i campi contengono MEMO.
Il numero dei records, ovvero le righe riempite sono tante quanto il numero dei records, ma di contenuto non se ne parla!
A proposito. Ho scaricato il tuo esempio Prima Applicazione e l'ho fatto compilare. Tutto OK ma visto che il DB è vuoto provo ad aggiungere un record con il navigatore.
Risultato: non accade nulla.
Per completare le info, sappi che Lazarus l'ho installato con i pacchetti .deb scaricati, fpc 3.2 e lazarus 2.0.10!
Titolo: Re:connessione sqlite
Inserito da: giango - Settembre 23, 2020, 06:49:50 pm
Ho provato a cambiare il DB nel tuo esempio e creare l'eseguibile.
Come vedi dallo screenshot, il problema si ripete
Titolo: Re:connessione sqlite
Inserito da: bonmario - Settembre 23, 2020, 07:41:18 pm
Vado a memoria, ma mi sembra di ricordare che questo sia un comportamento normale: i campi Memo non vengono visualizzati nella DBGRID, perché potrebbero anche contenere i caratteri per andare a capo, e comunque essere molto lunghi.
Questo indipendentemente dal DB: anni fa', avevo avuto lo stesso problema con un DB di Access.


Al momento non ho modo di provare, ma se vai nell'oggetto DBGrid, proprietà "Options", ed espandi il tutto, c'è l'opzione "dgDisplayMemoText". Magari se la attivi, ottieni quello che vuoi

Ciao, Mario
Titolo: Re:connessione sqlite
Inserito da: giango - Settembre 23, 2020, 07:56:06 pm
E' una cosa che avevo pensato anche io quella che dici bonmario, ma se apro la struttura della table con sqlitebrowser mi ritrovo tutti i campi a TEXT e solo ID numerico. Pertanto non so più cosa guardare!
Titolo: Re:connessione sqlite
Inserito da: bonmario - Settembre 23, 2020, 08:20:01 pm
Hai provato a fare questo che ti ho scritto nel post precedente?

Al momento non ho modo di provare, ma se vai nell'oggetto DBGrid, proprietà "Options", ed espandi il tutto, c'è l'opzione "dgDisplayMemoText". Magari se la attivi, ottieni quello che vuoi

Io non ho più il caso, quindi non posso fare la prova.

Ciao, Mario
Titolo: Re:connessione sqlite
Inserito da: giango - Settembre 23, 2020, 08:32:20 pm
Avevi proprio ragione bonmario!!!!!!!!!
Tutto cambia attivando l'0pzione <dgDisplayMemoText>
Come per magia la griglia si riempie correttamente anche in fase di editing.
Il fatto che tutte le opzioni fossero collassate e non visibili mi ha tratto in inganno.
D'altra parte se non lo fossero la lista sarebbe estremamente lunga.
Sbagliando s'impara. Grazie molte per il tuo aiuto!
Titolo: Re:connessione sqlite
Inserito da: bonmario - Settembre 23, 2020, 08:45:39 pm
Io l'ho scoperto così:

Nella parte alta dell'Object Inspector, seleziona la DBGrid.
Se ci fai caso, appena prima delle varie proprietà, c'è un filtro.
Lasciando selezionata la DBGrid, scrivi in quel filtro "Memo" (senza virgolette)
Come per magia, oltre a qualche "falso positivo" che mostra, vedrai che c'è proprio quello di cui ti scrivevo nei post precedenti !

Ciao, Mario
Titolo: Re:connessione sqlite
Inserito da: giango - Settembre 23, 2020, 09:22:58 pm
Una funzione utilissima direi! Con la marea di funzioni,comandi,bottoni,etc, senza dubbio ci vorrà il suo tempo per scoprire altre peculiarità.
Un ottimo software questo Lazarus, con un grande merito a chi lo ha sviluppato!
Grazie di nuovo per il tuo prezioso contributo.