Italian community of Lazarus and Free Pascal
Programmazione => Databases => Topic aperto 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!
-
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.
-
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.
-
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.
-
Domanda stupida: il pacchetto libsqlite3-dev lo hai installato?
-
questi sono i pacchetti installati per le librerie, oltre a sqlite3
-
Sarebbe bello avere il messaggio di errore dopo che hai tolto l'unità cmem.
-
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!
-
Ho provato a cambiare il DB nel tuo esempio e creare l'eseguibile.
Come vedi dallo screenshot, il problema si ripete
-
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
-
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!
-
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
-
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!
-
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
-
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.