Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: casey - Novembre 08, 2021, 11:32:09 pm

Titolo: informazioni per creare database
Inserito da: casey - Novembre 08, 2021, 11:32:09 pm
ciao a tutti,
questo è il mio primo post,

programmavo a livello avanzato in turbo pascal 6 nella metà degli anni 90,
creavo archivi usando i comandi assign, reset, rewrite, close,
all'epoca era cosi.
Poi ho smesso di programmare perchè ho trovato un altro lavoro, e non mi sono più aggiornato.

Visti i tempi duri, vorrei ricominciare a farlo, e così guardando dei corsi su youtube ho capito come funziona la programmazione a oggetti e quanto sia bello Lazarus Pascal,
tutto è stato facile, creare i form, i programmare in pascal come facevo una volta,
il problema che ho sono gli archivi,
siccome le uniche guide che si trovano su youtube sono in lingua straniera, non ci capisco nulla,
e quindi non riesco a capire,
per questo mi rivolgo a voi,

qual'è il miglior modo per creare un database senza dover installare programmi esterni?
ossia, vorrei creare l'applicazione .exe,
e farla funzionare su tutti i pc con windows senza dover installare altro,
qual'è il metodo migliore?

potete crearmi un programmino esempio con form in modo da guardarmelo e capire come funziona il tutto?
ormai mi rendo conto che usare assign, reset ecc sia preistorico.

il programmino che vorrei vedere è composto da due form,
il primo dove con i textbox il cliente potrebbe inserire una rubrica fatta da nome, numero di cellulare, e città di residenza,
mentre nel secondo form, tramite il nome vorrei cercare nel database la scheda del cliente.

Potete aiutarmi?

grazie
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 09, 2021, 12:36:57 am
E' tardi e ti rispondo parzialmente.

Ciò che dovresti usare è un database, ormai l'uso dei database è abbastanza comune e semplificato. E' quasi più semplice usare un database che un file di testo formattato tipo csv.

Ti consiglio di studiare SQLite, che è un database usabile in tutte le piattaforme. Non necessita di risorse e vi accedi tramite una semplice DLL.

Per accedere al database, ti consiglio Zeosdb, con cui potrai anche accedere ad altri motori come MSSQL, MySql, ....

Per installarli, usa lo strumento Pacchetto, verifca che SQLDBLaz sia installato (è locale non online) e invece zeosdb dal "ONLINE PAKAGE MANAGER"

Per creare un database SQLite puoi usare uno strumento esterno (almeno, io mi trovo meglio con una interfaccia esterna per la creazione). Io uso questo: https://sqlitestudio.pl (https://sqlitestudio.pl)

Una volta installato, puoi semplicemente copiare la cartella di installazione per spostarlo su altri pc di sviluppo (ad esempio un portatile), non serve installarlo.

Nella directory dove creaerai il tuo eseguibile servirà una dll, precisamente https://www.sqlite.org/2021/sqlite-dll-win64-x64-3360000.zip (https://www.sqlite.org/2021/sqlite-dll-win64-x64-3360000.zip) o https://www.sqlite.org/2021/sqlite-dll-win32-x86-3360000.zip (https://www.sqlite.org/2021/sqlite-dll-win32-x86-3360000.zip) a seconda se il tuo eseguibile è un 32 o un 64 bit.

Intanto queste info, poi il resto.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 09, 2021, 11:27:27 am
ti ringrazio molto per la risposta,

penso che questo sqlite sia proprio quello che stavo cercando,
basta una semplice dll per utilizzarlo con le mie applicazioni.

non capisco una cosa, questa:
Per installarli, usa lo strumento Pacchetto, verifca che SQLDBLaz sia installato (è locale non online) e invece zeosdb dal "ONLINE PAKAGE MANAGER"

io ho installato Lazarus scaricandolo dal sito, facendo il normale setup.
SQLDBLaz come verifico se è installato?
e l'online package manager per scaricare zeosdb, dove lo trovo?

potresti crearmi velocemente un esempio come chiesto nel primo post,
in modo che io vedendo gli esempi possa capire come funziona?
insomma, come immagazzinare record tramite form creato da me con textbox,
e come cercarli e richiamarli.

Grazie ancora

ps. che linguaggio mi consiglieresti da imparare oltre a Lazarus/FPC?
tra Java, Javascript, C#/asp.net, PHP, Python
quale conviene imparare al giorno d'oggi?
io vorrei realizzare sia applicazioni per windows come database,
e eventualmente anche applicazioni che girano su browser,
con eventuali APP Android per facilitarne l'uso tramite smartphone/tablet

Titolo: Re:informazioni per creare database
Inserito da: bonmario - Novembre 09, 2021, 11:39:33 am
Se vuoi, puoi collegarti al DB SQLite senza scaricare nessun componente esterno.

Puoi prendere spunto da questo progetto "C:\lazarus\fpc\3.2.0\source\packages\fcl-db\examples\sqlite3loadlib.lpr" vedere come connetterti al DB e lavorare senza usare oggetti "visuali" (che è quello che di solitio preferisco fare io)

Se invece vai in "C:\lazarus\examples\database\sqldbtutorial3", trovi un progetto un po più complesso

Se non ricordo male, in tutti e 2 i casi, basta copiare la dll corretta nella directory dove crei l'eseguibile.

Ciao, Mario
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 09, 2021, 01:34:08 pm
Ciao Mario, grazie,
non sapevo ci fossero esempi inclusi con l'installazione di Lazarus,
più tardi proverò a dargli un occhiata,
sperando di capirci qualcosa,

sarebbe interessante imparare sia ad usare sia il metodo visuale che non.

Ma sqlite3 è sempre l'sqlite di cui abbiamo parlato sopra, giusto?

sqldb un altro tipo di sql più avanzato?
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 09, 2021, 01:42:19 pm
SQLDBLaz come verifico se è installato?
e l'online package manager per scaricare zeosdb, dove lo trovo?

Sotto il menu PACCHETTO nella barra dei menu in alto sull'IDE.

potresti crearmi velocemente un esempio come chiesto nel primo post,
in modo che io vedendo gli esempi possa capire come funziona?
insomma, come immagazzinare record tramite form creato da me con textbox,
e come cercarli e richiamarli.

Si, il prima possibile ti posto un esempio semplice visuale.
Nel frattempo puoi dare una occhiata a ciò che ti diceva @bonmario e anche all'indice del forum, dove troverai indicazioni sui DB.

Ma sqlite3 è sempre l'sqlite di cui abbiamo parlato sopra, giusto?
sqldb un altro tipo di sql più avanzato?

SQLite è sempre SQLite. Si usa sempre la versione 3.
Sqldb è solo un'altro modo di riferirsi ad un database generico aderente allo standard SQL (tipo SQLite, MSSQL, MySQL, etc ...).

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 09, 2021, 01:48:36 pm
SQLDBLaz come verifico se è installato?
e l'online package manager per scaricare zeosdb, dove lo trovo?

Sotto il menu PACCHETTO nella barra dei menu in alto sull'IDE.

potresti crearmi velocemente un esempio come chiesto nel primo post,
in modo che io vedendo gli esempi possa capire come funziona?
insomma, come immagazzinare record tramite form creato da me con textbox,
e come cercarli e richiamarli.

Si, il prima possibile ti posto un esempio semplice visuale.
Nel frattempo puoi dare una occhiata a ciò che ti diceva @bonmario e anche all'indice del forum, dove troverai indicazioni sui DB.

Ma sqlite3 è sempre l'sqlite di cui abbiamo parlato sopra, giusto?
sqldb un altro tipo di sql più avanzato?

SQLite è sempre SQLite. Si usa sempre la versione 3.
Sqldb è solo un'altro modo di riferirsi ad un database generico aderente allo standard SQL (tipo SQLite, MSSQL, MySQL, etc ...).

Ciao

perfetto,
attendo il tuo esempio allora, così me lo studio

tra poco rientro a casa e provo ciò che mi avete suggerito,

ma quindi alla fine tra sqlite, sqldb, mysql, mssql, che cosa cambia?

per quanto riguarda i linguaggi di programmazione oltre a studiarmi bene Lazarus/Fpc che mi piace molto,
quale consigli di imparare?

Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 09, 2021, 01:56:53 pm
ps. che linguaggio mi consiglieresti da imparare oltre a Lazarus/FPC?
tra Java, Javascript, C#/asp.net, PHP, Python
quale conviene imparare al giorno d'oggi?
io vorrei realizzare sia applicazioni per windows come database,
e eventualmente anche applicazioni che girano su browser,
con eventuali APP Android per facilitarne l'uso tramite smartphone/tablet

Non saprei darti un aiuto su ciò. Dipende tantissimo su cosa vuoi / preferisci lavorare. Python è sicuramente il linguaggio emergente è molto versatile. C# si rivolge al mondo Windows principalmente, Java & Co. invece molto al mondo web. Tutti trattano i database, per quello che riguarda Android anche Lazarus può creare app per Android.

Inoltre Lazarus può creare app x Linux e Mac e ovviamente x Windows, oltre a svariati altri sistemi. Ci sono poi delle estensioni di Lazarus (Pas2Js) che ti consentono di creare un server web "grafico" da visualizzare con un normalissimo browser alla stregua di una normalissima applicazione Windows.

Secondo me se ti inserisci bene con il Pascal, vedrai che ne avrai abbastanza .... anzi non sarà mai abbastanza ....  ;D

Ciao
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 09, 2021, 02:03:17 pm
ma quindi alla fine tra sqlite, sqldb, mysql, mssql, che cosa cambia?

Hanno ognuno una propria gestione e una propria logica nell'archiviare i dati. L'unica cosa che hanno in comune è che tutti espongo una funzionalità (interfaccia) simile, compatibile con lo standard SQL.
Tutti questi linguaggi si interfacciano tramite delle "dll" ... più o meno  :P

Cambia ciò che stà dietro .... SQLite ha qualche KB di dll, MySql ha qualche decina di MB di dll, MSSql ha qualche centinaio di MB ..... per farla grezza ehhh.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 09, 2021, 02:11:54 pm
ma quindi alla fine tra sqlite, sqldb, mysql, mssql, che cosa cambia?

Hanno ognuno una propria gestione e una propria logica nell'archiviare i dati. L'unica cosa che hanno in comune è che tutti espongo una funzionalità (interfaccia) simile, compatibile con lo standard SQL.
Tutti questi linguaggi si interfacciano tramite delle "dll" ... più o meno  :P

Cambia ciò che stà dietro .... SQLite ha qualche KB di dll, MySql ha qualche decina di MB di dll, MSSql ha qualche centinaio di MB ..... per farla grezza ehhh.

Ciao

meglio sqlite allora,
non mi piace avere dll più grandi dell'applicazione stessa,
tanto la funzione è sempre quella.
Non sapevo con con lazarus si potessero fare anche App android, e non conoscevo pas2js,
meglio così, mi concentro su Pascal allora, senza sbattere la testa con altri linguaggi.
All'epoca in cui programmavo, il turbo pascal era molto potente, di gran lunga superiore al Turbo Basic e al QuickBasic 4.5,
e non era difficile da imparare come il Turbo C,
è sempre stato un linguaggio che appaga,
anche ora nonostante non lo conosca bene non avendo seguendo l'evoluzione nel corso degli anni,
vedo che è un linguaggio completo.
 
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 09, 2021, 02:40:45 pm
Si, meglio SQLite, anche perchè le altre hanno necessità di una installazione ....

Qui un programmino visuale grezzo di prova ... riadattato da un esempio di @xinyiman
Di esempi nel forum ce ne sono a bizzeffe, prova a cercarli.

Non tutti sono perfettamente funzionanti, qualcuno ha bisogno di qualche accorgimento, ma è un buon esercizio.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 09, 2021, 04:40:05 pm
Si, meglio SQLite, anche perchè le altre hanno necessità di una installazione ....

Qui un programmino visuale grezzo di prova ... riadattato da un esempio di @xinyiman
Di esempi nel forum ce ne sono a bizzeffe, prova a cercarli.

Non tutti sono perfettamente funzionanti, qualcuno ha bisogno di qualche accorgimento, ma è un buon esercizio.

Ciao

ho guardato tutti gli esempi che mi avete postato,
ma purtroppo così non ci capisco molto,
un esempio completo basilare c'è?
ossia il form completo con le istruzioni necessarie per l'operazione
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 09, 2021, 05:36:57 pm
Postarti l'esempio non è sufficiente.

Prima dovresti capire come funziona un database, almeno nella sua concezione standard disponibile negli ambienti di sviluppo:

1) Componente di connessione = Consente di connettere un database all'applicazione. I Campi possono essere riempiti a Design Time o a Run Time, ovviamente la connessione (CONNECTED o ACTIVE) deve essere in "false" durante le modifiche, poi bisogna rimmetterla a TRUE.

2) DataSource = Componente che consente una interfaccia per la modifica / inserimento / cancellazione delle righe del database. Non è sempre necessario e viene normalmente inserito per connettere componenti VISUALI -> DATABASE.

3) Query = Componente che consente di effettuare le operazioni (query) sul database. Le operazioni sono SELECT, DELETE, INSERT, .... La sintassi è quella dello standard SQL, con qualche piccola variante per i singoli motori.

4) Table = Componente che consente di abbinare una tabella del database in maniera diretta. All'interno si possono eseguire tutte le operazioni tipo QUERY, muoversi tra i record selezionati (FIRST, NEXT, PRIOR, LAST).

Poi ci sono lo operazioni di POST, che scrivono effettivamente i dati "su disco". I datatbase supportono le "transaction" ossia una serie di operazioni sequenziali che per essere effettive devono terminare con una COMMIT.
Ad esempio se devi fare 10 inserimenti o modiche legate tra loro, se una và male non fai il COMMIT (o in alternativa su qualche motore fai un ROLLBACK) e ciò che hai fatto non viene registrato.

Sembra complesso, ma è più difficile a dirsi che a farsi.

Parti dall'esempio che ti ho postato e cerca di capire come funzionano i vari componenti.

Tutorial in Italiano per Lazarus e ZEOS non sò se ci sono, forse c'è qualcosa in DELPHI che è il cugino ricco di Lazarus: la sintassi è praticamente identica e per i database è molto simile (in ZEOS i componenti si chiamano TZqualcosa, ad esempio TZConnection, mentre l'equivalente in Delphi si chiama TSQLConnection ....)

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 09, 2021, 09:08:49 pm
Postarti l'esempio non è sufficiente.

Prima dovresti capire come funziona un database, almeno nella sua concezione standard disponibile negli ambienti di sviluppo:

1) Componente di connessione = Consente di connettere un database all'applicazione. I Campi possono essere riempiti a Design Time o a Run Time, ovviamente la connessione (CONNECTED o ACTIVE) deve essere in "false" durante le modifiche, poi bisogna rimmetterla a TRUE.

2) DataSource = Componente che consente una interfaccia per la modifica / inserimento / cancellazione delle righe del database. Non è sempre necessario e viene normalmente inserito per connettere componenti VISUALI -> DATABASE.

3) Query = Componente che consente di effettuare le operazioni (query) sul database. Le operazioni sono SELECT, DELETE, INSERT, .... La sintassi è quella dello standard SQL, con qualche piccola variante per i singoli motori.

4) Table = Componente che consente di abbinare una tabella del database in maniera diretta. All'interno si possono eseguire tutte le operazioni tipo QUERY, muoversi tra i record selezionati (FIRST, NEXT, PRIOR, LAST).

Poi ci sono lo operazioni di POST, che scrivono effettivamente i dati "su disco". I datatbase supportono le "transaction" ossia una serie di operazioni sequenziali che per essere effettive devono terminare con una COMMIT.
Ad esempio se devi fare 10 inserimenti o modiche legate tra loro, se una và male non fai il COMMIT (o in alternativa su qualche motore fai un ROLLBACK) e ciò che hai fatto non viene registrato.

Sembra complesso, ma è più difficile a dirsi che a farsi.

Parti dall'esempio che ti ho postato e cerca di capire come funzionano i vari componenti.

Tutorial in Italiano per Lazarus e ZEOS non sò se ci sono, forse c'è qualcosa in DELPHI che è il cugino ricco di Lazarus: la sintassi è praticamente identica e per i database è molto simile (in ZEOS i componenti si chiamano TZqualcosa, ad esempio TZConnection, mentre l'equivalente in Delphi si chiama TSQLConnection ....)

Ciao

stasera mi metto con calma, e cerco di capirci qualcosa in più,
purtroppo sono rimasto troppo arretrato..
e pensare che 25 anni fa ero un gran programmatore, uno dei migliori qui in zona,
e ora sono scarso,
spero di riprendere ad alti livelli, ma non so se ci riuscirò, all'epoca del dos e di windows 95 era tutto diverso,
un programmatore si creava l'archivio a modo suo, aprivi un file, e ci schiaffavi tutto dentro secondo le regole che facevi tu,
oppure tramite il dbase III plus utilizzavi il database dbf e ti veniva più facile fare archivi,
dbase che per altro non serviva a niente, al contrario del pascal che era un linguaggio completo.
Ora con questi SQL, come dici tu bisogna capire prima di tutto il funzionamento,
mentre per la programmazione ad oggetti, utilizzando i form, devo dire che tutto si fa più velocemente rispetto ad una volta,
e capire come funzionava il tutto è stato piuttosto facile.
Purtroppo in questo mondo chi si ferma è perduto.

Ti ringrazio ancora per l'aiuto
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 09, 2021, 10:02:32 pm
Non devi preoccuparti, pian piano ci si riprende.
Non è poi cambiato granchè il mondo della programmazione. Sempre codice si scrive, certo magari con qualche assistenza in più ma sempre codice è.

Apprendi bene i concetti OOP, sono fondamentali per fare dei buoni programmi e sopratutto per usare gli strumenti al meglio: tutti i componenti, anche quelli esterni vengono pensati e realizzati in quell'ottica.

I database non sono diversi da quelli che usavamo noi: se ti ricordi l'ISAM, ma anche lo stesso dbase, avevano dei concetti molto simili (tabelle, colonne, righe, indici).

Se vuoi un consiglio, vedi di impratichirti un pò con i concetti e "gioca" con quello che c'è. Prova a cercare delle pubblicazioni su Internet anche solo articoli che ti parlino di uno specifico argomento.

Certo che non conoscere l'inglese è un handicap abbastanza importante nella programmazione. Anche su questo aspetto consiglio di lavorarci.

Ciao e buono studio.
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 10, 2021, 01:30:09 am
In allegato un miniprogetto con un DB.

C'è il file Leggimi.TXT come spiegazione più o meno esauriente.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 10, 2021, 01:17:13 pm
In allegato un miniprogetto con un DB.

C'è il file Leggimi.TXT come spiegazione più o meno esauriente.

Ciao

all'1.30 di mattina


grazie
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 10, 2021, 02:26:39 pm
E' un'ora standard per rispondere sul forum.

I veri programmatori non dormono mai, sonnecchiamo sopra la tastiera ma non non dormono  ;D ;D ;D
Titolo: Re:informazioni per creare database
Inserito da: nomorelogic - Novembre 10, 2021, 03:10:16 pm
E se proprio dormono... stanno sognando un uovo programma da sviluppare!
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 10, 2021, 03:50:06 pm
E se proprio dormono... stanno sognando un uovo programma da sviluppare!

 ;D ;D ;D Si si, è proprio un UOVO programma  ;D ;D ;D
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 10, 2021, 04:15:22 pm
E' un'ora standard per rispondere sul forum.

I veri programmatori non dormono mai, sonnecchiamo sopra la tastiera ma non non dormono  ;D ;D ;D

da sposati è un pò più difficile


cmq ho guardato il programmino che mi hai postato,
e ci ho finalmente capito qualcosina,

ora se io volessi aggiungere due Bottoni al form,

il primo bottone che quando premuto, con uno showmessage mi visualizza il secondo cognome memorizzato nel database,

e con l'altro bottone che mi aggiunga al database un nuovo nome,
nome bruce, cognome Wayne, città gotham city

quale codice dovrei inserire al tocco dei tasti?
Titolo: Re:informazioni per creare database
Inserito da: nomorelogic - Novembre 10, 2021, 04:20:58 pm
E se proprio dormono... stanno sognando un uovo programma da sviluppare!

 ;D ;D ;D Si si, è proprio un UOVO programma  ;D ;D ;D

è perchè dormivo...   ;D
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 10, 2021, 04:35:52 pm
L'inserimento da codice è semplice e ci sono diversi modi per farlo:

Primo modo:

1) Poni il tuo componente (in questo caso direttamente la ZTable1) in modalità INSERT.

2) Riempi i campi (sarebbero le colonne) con i valori che vuoi).

3) Esegui il POST della ZTable1.

Secondo modo:

1) Componi una query SQL con i dati.

2) la Esegui.

Il secondo modo prevede che tu conosca il linguaggio SQL, perchè devi comporre la query perfetta, con apici, virgole e tutto il resto correttamente.
Non conosco ZEOS a sufficienza per dirti se puoi eseguire una query diertta tramite la Table1 o se devi usare un componente query nuova (che quindi devi costruire a runtime o prevedere a design time).

Io se ho a disposizione una tabella inserisco i dati tramite la modalità INSERT della tabella. Se invece lavoro con i Thread uso le query SQL anche per le tabelle.

Comunque per il primo modo il codice è questo:

Vado a memoria ...

Codice: [Seleziona]
procedure TFMain.ButtonxxxClick(Sender: TObject);
begin
  DataModule1.ZTable1.Insert;
  DataModule1.ZTable1.FieldByName('Cognome').Value := 'Wayne';
  DataModule1.ZTable1.FieldByName('Nome').Value := 'Bruce';
  DataModule1.ZTable1.FieldByName('Citta').Value := 'Gotham City';
  DataModule1.ZTable1.Post;
end;

Può essere che l'ordinamento di visualizzazione della griglia non sia corretto.
Se vuoi l'ordinamento per il campo ID ad esempio inserisci "ID" (senza virgolette) come valore della proprietà SortedFields della ZTable1.

.........................
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 10, 2021, 05:20:32 pm
il primo bottone che quando premuto, con uno showmessage mi visualizza il secondo cognome memorizzato nel database,

Questa richiesta invece è posta in modo errato.
Non esiste un secondo cognome, così come l'hai detta tu, in un database.

Nei database esiste un ordinamento che per default segue la chiave primaria di modalità ascendente.
L'ordinamento per default dovrebbe essere secondo ID in formato numero, quindi 1,2,7,20,31,156, .....

Una volta chiarito ciò se vale ancora la tua richiesta, dobbiamo necessariamente eseguire una query sul database per carpire il secondo cognome.
E' da sottolineare che difficilmente ci saranno richieste tipo: dammi il quindicesimo numero che appre sul terza riga della tabella n. 5  ..... ho esagerato per far capire che i dati in un database si leggono e ragruppano in modo logico e che il "secondo" cognome non ha un senso pratico.

Ulteriore info, l'ordine di immissione e quindi probabilmente anche l'ordine originario rappresentato in una tabella normalmente ha poco senso in generale: prova a pensare a diversi operatori che immettono dati, l'ordine di immissione è quasi causale, ciò che importa normalmente è il contenuto e su quello verranno fatte le query.

Il dato si potrebbe prendere anche dalla griglia, ma a priori non sappiamo se la griglia ha qualche ordinamento suo, oppure magari qualche filtro che inibisce la visualizzazione di certe righe, ovvero non possiamo fare pieno affidamento sul componente grafico.

In ogni caso, per farla breve questo è il codice per la tua richiesta. La premessa è che tu inserisca nel DATAMODULE1 un componeten nuovo ZQUERY1 (di tipo TZQUERY) e compili l'abbinamento con la ZConnection (devi solo riempire una proprietà).

Codice: [Seleziona]
procedure TFMain.ButtonxxxClick(Sender: TObject);
begin
  DataModule1.ZQuery1.Active := false;
  DataModule1.ZQuery1.SQL.Text := 'Select * from Utenti order by ID';
  DataModule1.ZQuery1.Active := true;
  if DataModule1.ZQuery1.RecordCount > 1 then
    begin
      DataModule1.ZQuery1.RecNo := 2; //Secondo record
      ShowMessage(DataModule1.ZQuery1.FieldByName('Cognome').AsString);
    end
  else
   ShowMessage('Non ci sono record che soddisfano la richiesta');
end;

Ciao
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 10, 2021, 05:31:39 pm
Questo è un ulteriore modo, scorrendo tutti i record trovati:

Codice: [Seleziona]
procedure TFMain.Button4Click(Sender: TObject);
var counter: integer;
begin
  DataModule1.ZQuery1.Active := false;
  DataModule1.ZQuery1.SQL.Text := 'Select * from Utenti order by ID';
  DataModule1.ZQuery1.Active := true;
  if DataModule1.ZQuery1.RecordCount > 1 then
    begin
     counter := 0;
     DataModule1.ZQuery1.First;
     while not DataModule1.ZQuery1.Eof do
      begin
        if counter = 1 then //secondo record
          ShowMessage(DataModule1.ZQuery1.FieldByName('Cognome').AsString);
        DataModule1.ZQuery1.Next;
        inc(counter);
      end;
    end
  else
   ShowMessage('Non ci sono record che soddisfano la richiesta');
end;
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 10, 2021, 09:55:11 pm
il primo bottone che quando premuto, con uno showmessage mi visualizza il secondo cognome memorizzato nel database,

Questa richiesta invece è posta in modo errato.
Non esiste un secondo cognome, così come l'hai detta tu, in un database.

Nei database esiste un ordinamento che per default segue la chiave primaria di modalità ascendente.
L'ordinamento per default dovrebbe essere secondo ID in formato numero, quindi 1,2,7,20,31,156, .....

Una volta chiarito ciò se vale ancora la tua richiesta, dobbiamo necessariamente eseguire una query sul database per carpire il secondo cognome.
E' da sottolineare che difficilmente ci saranno richieste tipo: dammi il quindicesimo numero che appre sul terza riga della tabella n. 5  ..... ho esagerato per far capire che i dati in un database si leggono e ragruppano in modo logico e che il "secondo" cognome non ha un senso pratico.

Ulteriore info, l'ordine di immissione e quindi probabilmente anche l'ordine originario rappresentato in una tabella normalmente ha poco senso in generale: prova a pensare a diversi operatori che immettono dati, l'ordine di immissione è quasi causale, ciò che importa normalmente è il contenuto e su quello verranno fatte le query.

Il dato si potrebbe prendere anche dalla griglia, ma a priori non sappiamo se la griglia ha qualche ordinamento suo, oppure magari qualche filtro che inibisce la visualizzazione di certe righe, ovvero non possiamo fare pieno affidamento sul componente grafico.

In ogni caso, per farla breve questo è il codice per la tua richiesta. La premessa è che tu inserisca nel DATAMODULE1 un componeten nuovo ZQUERY1 (di tipo TZQUERY) e compili l'abbinamento con la ZConnection (devi solo riempire una proprietà).

Codice: [Seleziona]
procedure TFMain.ButtonxxxClick(Sender: TObject);
begin
  DataModule1.ZQuery1.Active := false;
  DataModule1.ZQuery1.SQL.Text := 'Select * from Utenti order by ID';
  DataModule1.ZQuery1.Active := true;
  if DataModule1.ZQuery1.RecordCount > 1 then
    begin
      DataModule1.ZQuery1.RecNo := 2; //Secondo record
      ShowMessage(DataModule1.ZQuery1.FieldByName('Cognome').AsString);
    end
  else
   ShowMessage('Non ci sono record che soddisfano la richiesta');
end;

Ciao

non intendevo il secondo cognome nel senso che hai detto tu,
intendevo appunto l'ID2

Devo fare un pò di prove per prenderci la mano,
ci ho capito un bel pò, ma ancora sono in alto mare.

Ma posso fare prove anche da un programma console?
così essendo più pulito, è tutto più facile.

Devo usare per forza Zeo con i relativi oggetti da mettere sul form?

se volessi fare un programmino console che appena lanciato nel database dell'esempio memorizzasse due nomi a caso,
e subito dopo chiuso il database,
lo interroghi e mi scriva con writeln sullo schermo ciò che è memorizzato,
si potrebbe fare?

Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 10, 2021, 10:28:55 pm
Si, crei un programma console, ci aggiungi le uses che hai nel programma visuale che ti servono (riguardanti zeos ad esempio) e crei tutto a runtime. Devi stare attento a crere ed usare le interfacce e non le parti visuali (non hai il supporto visuale nei programmi console).

@bonmario ha riportato in qualche post precedente che usa il tutto a runtime. Prova a vedere i riferimenti che ha inserito in quel post.

Però, prima di andare alla console, a mio parere, dovresti lavorare un pò a livello Visuale: è più semplice fare prove, fare debug.

Ovviamente ripeto è solo un mio parere.

Inoltre già a livello visuale puoi incominciare ad usare le interfacce, a creare a runtime gli oggetti.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 10, 2021, 10:33:09 pm
Si, crei un programma console, ci aggiungi le uses che hai nel programma visuale che ti servono (riguardanti zeos ad esempio) e crei tutto a runtime. Devi stare attento a crere ed usare le interfacce e non le parti visuali (non hai il supporto visuale nei programmi console).

@bonmario ha riportato in qualche post precedente che usa il tutto a runtime. Prova a vedere i riferimenti che ha inserito in quel post.

Però, prima di andare alla console, a mio parere, dovresti lavorare un pò a livello Visuale: è più semplice fare prove, fare debug.

Ovviamente ripeto è solo un mio parere.

Inoltre già a livello visuale puoi incominciare ad usare le interfacce, a creare a runtime gli oggetti.

Ciao

va bene,
domani sarò a casa e farò un pò di test tutto il giorno

grazie
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 11, 2021, 12:23:12 am
perfetto,
ho capito come funziona,

ho creato un nuovo progetto,
e nel form1 ho inserito tramite Zeos TZconnection che punta al database dell'esempio di prima, specificando il Protocollo Sqllite3,
e poi una TZquery che si collega a TZconection

poi ho messo un bottone nel form1 che esegue questo codice:
Codice: [Seleziona]
procedure TForm1.Button2Click(Sender: TObject);
begin
  Form1.ZQuery1.Active := false;
  Form1.ZQuery1.SQL.Text := 'Select * from Utenti order by ID';    //filtro
  Form1.ZQuery1.Active := true;    //attiva la query
  Form1.ZQuery1.First; //va al primo record
  ShowMessage(Form1.ZQuery1.FieldByName('Cognome').AsString);   //visualizza record corrente 'mouse'
  Form1.ZQuery1.edit;  //inizia modifica cognome record corrente
  Form1.ZQuery1.FieldByName('Cognome').Value := 'Rossi'; //modifica il cognome in Rossi
  Form1.ZQuery1.Post;  //fine modifica cognome corrente;
  Form1.ZQuery1.Recno := 2;     //va al record n. 2
  ShowMessage(Form1.ZQuery1.FieldByName('Cognome').AsString);  //visualizza il record n. 2 'De peppis'
  Form1.ZQuery1.First;    //torna al primo record
  ShowMessage(Form1.ZQuery1.FieldByName('Cognome').AsString);  //visualizza di nuovo il primo record (che stavolta è diventato Rossi)
end;           

ho capito così come leggere i record, spostarmi nel database, e modificare i campi

oltre i .Recno. .First . Next .edit
c'è anche il .delete per cancellare tutto il record?
il .post salva, giusto?

altre chicche da suggerire?


Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 11, 2021, 12:44:38 am
Fai attenzione a quando navighi nei record, potresti avere brutte sorprese.

Quando fai delle modifiche (EDIT, INSERT, DELETE) o fai un SELECT, il puntatore al record (chiamato anche cursore) potrebbe non puntare al record che tu ritieni .... ossia quelle operazioni potrebbero modificare il record selezionato.

Inoltre anche altre attività sulla Query (come il refresh) modificano la posizione del cursore.

In genere, per fare una EDIT ad esempio si cerca di fare prima una SELECT che limiti il risultato a un solo rerocrd o a un numero limitato di record (ad esempio tutti quelli che si chiamano PIPPO e sono di Topolinia) poi andando a selezionarlo con il FIRST, NEXT, PREC o LAST.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 11, 2021, 12:54:56 am
Fai attenzione a quando navighi nei record, potresti avere brutte sorprese.

Quando fai delle modifiche (EDIT, INSERT, DELETE) o fai un SELECT, il puntatore al record (chiamato anche cursore) potrebbe non puntare al record che tu ritieni .... ossia quelle operazioni potrebbero modificare il record selezionato.

Inoltre anche altre attività sulla Query (come il refresh) modificano la posizione del cursore.

In genere, per fare una EDIT ad esempio si cerca di fare prima una SELECT che limiti il risultato a un solo rerocrd o a un numero limitato di record (ad esempio tutti quelli che si chiamano PIPPO e sono di Topolinia) poi andando a selezionarlo con il FIRST, NEXT, PREC o LAST.

Ciao

ok,
un errore del genere farebbe casino nel database,


un altra cosa ti volevo chiedere,
quando facevo i programmi negli anni 90,
spesso i clienti volevano dei filtri per data che andava dal periodo x al periodo y,
ad esempio, un centro revisioni che vuole interrogare l'archivio per vedere a quali clienti scade la revisione della macchina
dal 01/10/2021 al 31/10/2021

come andrebbe modificata la riga select order by?
  Form1.ZQuery1.SQL.Text := 'Select * from Utenti order by ID';

per creare un database devo per forza usare programmi esterni come SqliteStudio? o posso usare direttamente il pascal?


 
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 11, 2021, 01:20:16 am
Puoi filtrare qualsiasi cosa in qualsiasi modo, basta che il database abbia da qualche parte il dato.

In questo caso non ci sono campi "data" e quindi questa operazione non la puoi fare.

Ci sono ancora un "sacco" di modificatori in SQL come WHERE, LIKE e diversi altri. Inoltre puoi usare le espressioni logiche.

Dai una occhiata a qualche tutorial, vedrai che ti sarà più chiara la cosa.

Per creare Tabelle, modificarle o altro lo puoi fare in Pascal, con i comandi "CREATE TABLE" e "ALTER TABLE".

Però, occorre fare attenzione perchè non tutti i database accettano questi costruttori.

In particolare, ricordo che la ALTER TABLE non funziona in SQLite (o almeno non funzionava qualche versione fà). Per farla io usavo un trucco creando una tabella nuova temporanea con i nuovi campi, trasferendo tutti i record dalla vecchia alla nuova, e se andava tutto a buon fine cancellavo la vecchia tabella e rinominavo la nuova.

Se usi invece SQLiteStudio (o altri tool) questi ti rendono trasparente queste funzioni.

Poi, altra cosa con i tool esterni puoi vedere tutte le possibili opzioni e costruire legami logici (ad esempio le foreign keys e le index keys) vedendo cosa stai facendo.

In ogni caso si può fare tutto da runtime in PASCAL.
Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 11, 2021, 11:01:03 pm
where, like, non li conosco proprio,
ancora ho tanta strada da fare,

ho provato a scaricare l manuale di lazarus completo che si trova nella pagina principale di questo forum, ma non funziona il link,
dove lo posso trovare?
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 11, 2021, 11:56:14 pm
Il nuovo link è:
https://www.blaisepascalmagazine.eu/ (https://www.blaisepascalmagazine.eu/)

Il manuale è disponibile in due pubblicazioni diverse con costo di € 65 o € 40 in offerta alla data odierna.

Ciao.
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 12, 2021, 02:03:46 pm
Il nuovo link è:
https://www.blaisepascalmagazine.eu/ (https://www.blaisepascalmagazine.eu/)

Il manuale è disponibile in due pubblicazioni diverse con costo di € 65 o € 40 in offerta alla data odierna.

Ciao.

pensavo fosse gratuito,
in questo caso visto che è in inglese non credo ne valga la pena,
non ci capirei molto.

ho comprato quello del c# tempo fa, pagato una 40ina di euro e in italiano,
ma poi non ho mai avuto tempo di leggerlo.


Non mi ricordo se l'ho letto in qualche post o visto in qualche esempio,
il .commit serve per salvare il database? lo devo usare?
ho visto che nell'ispettore degli oggetti c'è abilitato un auto commit,
è sempre la stessa cosa? mi convinene lasciarlo attivo?
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 12, 2021, 02:31:36 pm
La commit è la funzione legata alla transazione.

Quando si usano le transazioni, il database apre una transazione per ogni operazione / gruppo di operazioni effettuate. E solo al termine positivo di TUTTE le operazioni viene effettuato appunto il commit, ossia la chiusura della transazione con la registrazione effettiva delle operazioni.

Se le operazioni non vanno a buon fine (anche solo una) il database effettua un rollback, ossia ritorna allo stato precedente all'inizio transazione.

In genere le transazioni vengono usate e attivate dal programma applicativo e chiuse sempre dal programma applicativo. Il rollback invece è a discrezione del database (nel senso che qualche database c'è l'ha implicito altri no).

L'autocommit fà si che il componente esegua in automatico una transazione per ogni operazione, registrando le modifiche solo se la transazione và a buon fine.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 15, 2021, 01:39:14 am
sto sviluppando il mio primo archivio usando sqlite come da te suggerito,

è un archivio di clienti di un negozio,

per l'inserimento dei clienti tutto ok,
ho creato il form con i tedit e alla fine va a salvare nel database,
funziona perfettamente.

ora sto creando il form per la ricerca dei clienti,

nel form con un tedit chiede il nome del cliente da cercare,
e poi premendo sul tasto cerca,
dovrei andare a farlo cercare nel database,

che diavolo ci devo mettere qui:
  DataModule1.ZQuery1.SQL.Text := 'Select * from clienti order by nomecliente = '+TEnome.text;

è corretto?

provando a fare una ricerca mi viene fuori il messaggio "Il progetto ha sollevato un errore di classe EZSQLException

come devo settare DataModule1.ZQuery1sql.text in modo che cerchi nel database i record contenenti nomecliente(sql) uguale al tedit TENome?
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 01:46:09 am
  DataModule1.ZQuery1.SQL.Text := 'Select * from clienti order by nomecliente = '+TEnome.text;

Quella corretta dovrebbe essere:
Codice: [Seleziona]
  DataModule1.ZQuery1.SQL.Text := 'Select * from clienti order by nomecliente = '+'"'+TEnome.text+'";

EDIT: NO ERRATA - LA NOTTE PORTA CONSIGLIO, MA ANCHE RINCOGLION...... :o

Il testo deve essere tra virgolette.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 01:49:46 am
Altra cosa, l'uguale nella SELECT corrisponde ad un confronto case sensitive .... se vuoi cercare un cognome case insensitive sostituisci l'uguale con LIKE (si proprio la parola LIKE).

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 15, 2021, 01:54:39 am
il codice sopra mi da errore durante la compilazione

non ho capito a che servono quelle virgolette, visto che non devono essere nella sql.text
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 07:28:24 am
Ero io rinco  :o:

il codice è:

Codice: [Seleziona]
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where nomecliente = '+'"'+TEnome.text+'"'+' order by nomecliente';
EDIT:------------------------------------------------------------------------------------------------------------^ mancava un apice ....

se è quello che intendevi.
La ricerca per "uguaglianza" del campo deve essere composta da WHERE  e = o LIKE.
Order by è un argomento facoltativo che definisce un ordinamento diverso dallao standard.

Virgolette o apici dovrebbe essere indifferente in Lazarus pr l'SQL.

EDIT: Se non usi le virgolette il valore di TEnome.Text viene preso come nome di un campo (che non esiste evidentemente), non per il valore da ricercare.

Altra cosa: non usare i nomi dei componenti con inizialmente la T maiuscola (TEnome): normalmente vengono usati per definire i tipi (classi, record, etc ...) come TEdit o TLabel. Chiamalo ENome eventualmente. Tieni anche presente che ciò che inizia per "E" si "desidererebbe" fosse un Eccezione (Exception), ma quest'ultima è già meno sentita come esigenza.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 15, 2021, 01:44:54 pm
grazie,
tra poco mi rimetto a lavoro e provo,

quindi, sostituendo il simbolo = con like
la ricerca diventa case insensitive,

e la differenza tra like e where qual'è?

in questo modo con .prev e .next si sposta tra i soli record che corrispondono alla ricerca, giusto?
come succedeva con il vecchio dbase.

Se ho una variabile integer totaleclienti ,
e gli voglio assegnare il valore del totale dei clienti presenti nell'archivio,
devo scrivere totaleclienti := zquery1. (cosa?)


ti ringrazio per l'aiuto che mi stai dando,
non mi è stato semplicissimo saltare dalla programmazione del vecchio turbo pascal 6 in dos, alla programmazione oggetti su windows,
dopo che fai un pò di pratica ti rendi conto che non è difficile, ma bisogna cmq lavorarci per comprendere.
Anche nell'altro thread dove ho chiesto come sistemare gli oggetti sul form quando questo viene allargato o reso a tutto schermo,
non mi sembra tanto facile da applicare,
se non come dici tu aumentando la scala,
ma io speravo ci fossero delle proprietà che facevano l'autoaggiustamento in automatico,
con il vecchio dos quest'aspetto era più facile,
cominciavo con un clrscr per pulire la pagina,
e poi sapendo che la schermata era sempre di 80x25,
mi sistemavo il tutto tramite il comando gotoxy,
con windows mica tutti abbiamo la stessa risoluzione,
io per esempio uso 1366x768
ma vedo che tanti addirittura settano 1920,
e poi per leggere ciò che c'è scritto sullo schermo ci vuole il microscopio.
Cmq su quest'aspetto ci lavorerò dopo aver compreso bene come usare sqlite.

Un altra cosa un pò off topic che non ho capito ieri mentre facevo il programma,

nel form1 ho messo un tedit per chiedere la password di accesso,
se sbagliata chiudeva il peogramma,
e e corretta mi apriva il form2 per lavorare.
aprendo il form2 con .showmodal impediva l'uso del form1, ma questo restava visibile sullo schermo, ed io lo volevo chiudere,
ma mettendo form1.close nell'onshow del form2,
mi diceva che non trovava il form1,
perchè? dove sbaglio?
perchè nel form2 non potevo lanciare codice riferito al form1?

alla fine ho tamponato il problema
mettendo il comando form1.hide nel form1 stesso prima di caricare il form2,
se ci mettevo .close, si chiudeva il form e ovviamente poi non caricava neanche il form2,
cmq così non era più visibile, ma è stato solo un metodo arrangiato.



Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 15, 2021, 02:29:29 pm
provato

da sempre errore durante la compilazione
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 02:45:40 pm
Se ho una variabile integer totaleclienti ,
e gli voglio assegnare il valore del totale dei clienti presenti nell'archivio,
devo scrivere totaleclienti := zquery1. (cosa?)

Esegui una query:

Codice: [Seleziona]
Select * from tabella 

dove tabella è il nome della tua tabella.

Poi leggi la proprietà della query RecordCount (ZQuery1.RecordCount) che ti ritorna il numero di record ritornati.
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 02:54:17 pm
quindi, sostituendo il simbolo = con like
la ricerca diventa case insensitive,

e la differenza tra like e where qual'è?

"Where" ci deve essere, puoi usare '=' o 'LIKE' se vuoi avere una ricerca case sensitive o no.

Giusto per incasinarti un pò, se usi LIKE il tuo testo di ricerca può contenere il carattere '%' e la ricerca lo usa come Jolly (un pò come il carattere * per il dos).

"%onno" con il LIKE ti torna "nonno" "tonno" "totonno" "risonno", ma non "sonnolenza" ad esempio.

in questo modo con .prev e .next si sposta tra i soli record che corrispondono alla ricerca, giusto?
come succedeva con il vecchio dbase.

Quello che ritorna un Query è come fosse una tabella limitata ai riusltati della query. Quindi i comandi di "navigazione" lavorano su questa nuova tabella.
Titolo: Re:informazioni per creare database
Inserito da: bonmario - Novembre 15, 2021, 03:02:10 pm
quindi, sostituendo il simbolo = con like
la ricerca diventa case insensitive,

Secondo me, ti conviene cercare un mini corso SQL, tanto per avere le basi su come funzionano le select, insert, update ecc.

Ciao, Mario
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 03:15:53 pm
nel form1 ho messo un tedit per chiedere la password di accesso,
se sbagliata chiudeva il peogramma,
e e corretta mi apriva il form2 per lavorare.
aprendo il form2 con .showmodal impediva l'uso del form1, ma questo restava visibile sullo schermo, ed io lo volevo chiudere,
ma mettendo form1.close nell'onshow del form2,
mi diceva che non trovava il form1,
perchè? dove sbaglio?
perchè nel form2 non potevo lanciare codice riferito al form1?

alla fine ho tamponato il problema
mettendo il comando form1.hide nel form1 stesso prima di caricare il form2,
se ci mettevo .close, si chiudeva il form e ovviamente poi non caricava neanche il form2,
cmq così non era più visibile, ma è stato solo un metodo arrangiato.

Il metodo ShowModal è un metodo "bloccante", ossia porta in primo piano la Form oggetto dello ShowModal ed il chiamante rimane "inchiodato" in attesa della chiusura della Form. Per rimane inchiodato intendo che non possono essere eseguiti metodi, funzioni od altro che implichino nella Form chiamante la gestione della coda dei messaggi. Il Close, l'Hide, etc... sono tutti metodi che "usano" la coda dei messaggi.

Se vuoi nascondere la Form chiamante (in gergo si chiama Madre) devi usare il metodo Hide (meglio però il "visible = false") prima di chiamare lo ShowModal (come hai fatto giustamente alla fine) e ricordarti di chiamare lo Show (meglio il "visible = true") appena ritorna la Form chiamata (in gergo Figlia).

ATTENZIONE: se chiami il metodo CLOSE della Form principale (ossia la prima Form che il tuo programma crea) .... chiudi l'applicazione.

Per quello che riguarda la gestione della grafica, Windows ed in genere tutti i S.O. che hanno una superficie grafica di lavoro (praticamente tutti oramai, eccetto che tu non svolga programmi console, ossia a linea di comando) hanno logiche, funzionamenti e metodi che non hanno nulla a che fare con il mondo testuale.

Questo non è ne un bene ne un male, bisgona vedere cosa si deve fare (vedi il topic nella Community sull'eterno conflitto Windows vs Linux).

Ci sono altri modi, relativamente semplici, per posizionare i controlli grafici sulla superficie utile, ma questo prevede una progettazione. Non si può generalizzare o fare a caso.

Ad esempio: vuoi mantenere centrati i tuoi componenti ? Poni un oggetto invisibile al centro della FORM, e lega l'Anchor di tutti i componenti a quell'oggetto invisibile.

A Runtime, vedrai che i tuoi componenti saranno sempre centrati nella Form. Però non penso sia l'obiettivo che si voglia ottenere.
 
Fare girare un applicativo (senza usare un motore 3D come Direct3d) su diverse risoluzioni non è così banale.

Pensa che è anni, più di una decina, che il DPI dello schermo (e pensa a più schermi con diversi DPI  ;D ) rappresenta un problema tuttora non risolto completamente. Si, sono state messe delle pezze, ma la soluzione TOTALE non c'è ancora.

Sono convinto però che ognuno con la pratica e con la sua fantasia trovi la soluzione calzante per lui.

Ciao Ciao.
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 15, 2021, 03:18:03 pm
perfetto, ci sono riuscito,

il codice corretto è:
Codice: [Seleziona]
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where nomecliente like "%'+TEnome.text+'%"'+' order by nomecliente';


ho usato il % come carattere jolly così è più comodo nelle ricerche,
e invece di = ho usato like in modo da non dovermi preoccupare se il testo era maiuscolo o minuscolo,

il problema erano le virgolette,
free pascal accetta solo l'apice in quella riga lì,
le virgolette vanno messe all'interno dell'apice
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 15, 2021, 03:27:07 pm
nel form1 ho messo un tedit per chiedere la password di accesso,
se sbagliata chiudeva il peogramma,
e e corretta mi apriva il form2 per lavorare.
aprendo il form2 con .showmodal impediva l'uso del form1, ma questo restava visibile sullo schermo, ed io lo volevo chiudere,
ma mettendo form1.close nell'onshow del form2,
mi diceva che non trovava il form1,
perchè? dove sbaglio?
perchè nel form2 non potevo lanciare codice riferito al form1?

alla fine ho tamponato il problema
mettendo il comando form1.hide nel form1 stesso prima di caricare il form2,
se ci mettevo .close, si chiudeva il form e ovviamente poi non caricava neanche il form2,
cmq così non era più visibile, ma è stato solo un metodo arrangiato.

Il metodo ShowModal è un metodo "bloccante", ossia porta in primo piano la Form oggetto dello ShowModal ed il chiamante rimane "inchiodato" in attesa della chiusura della Form. Per rimane inchiodato intendo che non possono essere eseguiti metodi, funzioni od altro che implichino nella Form chiamante la gestione della coda dei messaggi. Il Close, l'Hide, etc... sono tutti metodi che "usano" la coda dei messaggi.

Se vuoi nascondere la Form chiamante (in gergo si chiama Madre) devi usare il metodo Hide (meglio però il "visible = false") prima di chiamare lo ShowModal (come hai fatto giustamente alla fine) e ricordarti di chiamare lo Show (meglio il "visible = true") appena ritorna la Form chiamata (in gergo Figlia).

ATTENZIONE: se chiami il metodo CLOSE della Form principale (ossia la prima Form che il tuo programma crea) .... chiudi l'applicazione.

Per quello che riguarda la gestione della grafica, Windows ed in genere tutti i S.O. che hanno una superficie grafica di lavoro (praticamente tutti oramai, eccetto che tu non svolga programmi console, ossia a linea di comando) hanno logiche, funzionamenti e metodi che non hanno nulla a che fare con il mondo testuale.

Questo non è ne un bene ne un male, bisgona vedere cosa si deve fare (vedi il topic nella Community sull'eterno conflitto Windows vs Linux).

Ci sono altri modi, relativamente semplici, per posizionare i controlli grafici sulla superficie utile, ma questo prevede una progettazione. Non si può generalizzare o fare a caso.

Ad esempio: vuoi mantenere centrati i tuoi componenti ? Poni un oggetto invisibile al centro della FORM, e lega l'Anchor di tutti i componenti a quell'oggetto invisibile.

A Runtime, vedrai che i tuoi componenti saranno sempre centrati nella Form. Però non penso sia l'obiettivo che si voglia ottenere.
 
Fare girare un applicativo (senza usare un motore 3D come Direct3d) su diverse risoluzioni non è così banale.

Pensa che è anni, più di una decina, che il DPI dello schermo (e pensa a più schermi con diversi DPI  ;D ) rappresenta un problema tuttora non risolto completamente. Si, sono state messe delle pezze, ma la soluzione TOTALE non c'è ancora.

Sono convinto però che ognuno con la pratica e con la sua fantasia trovi la soluzione calzante per lui.

Ciao Ciao.

quindi usando .show al posto di showmodal posso dalla form2 controllare anche la form1? che in questo caso non dovrebbe essere bloccata


un altra domandina veloce,
come faccio ad assegnare ad un bottone, che quando premuto mi porti il cursore su un tedit?
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 03:32:30 pm
A memoria dovrebbe essere Controllo.SetFocus (ossia Edit1.SetFocus) o giu di li.
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 15, 2021, 03:36:08 pm
A memoria dovrebbe essere Controllo.SetFocus (ossia Edit1.SetFocus) o giu di li.

si si,
era proprio qusto,
appena provato e funziona
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 03:41:02 pm
quindi usando .show al posto di showmodal posso dalla form2 controllare anche la form1? che in questo caso non dovrebbe essere bloccata

Occhio all'uso dello Show per le Form normali, se la Form madre è completamente sovrapposta alla figlia (chiamata con lo show), cliccnado sulla Form madre nascondi la figlia, e nel caso di un touch screen senza tastiera sei nelle pesti ... parlo per esperienza.

Ciao.
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 15, 2021, 04:24:47 pm
quindi usando .show al posto di showmodal posso dalla form2 controllare anche la form1? che in questo caso non dovrebbe essere bloccata

Occhio all'uso dello Show per le Form normali, se la Form madre è completamente sovrapposta alla figlia (chiamata con lo show), cliccnado sulla Form madre nascondi la figlia, e nel caso di un touch screen senza tastiera sei nelle pesti ... parlo per esperienza.

Ciao.

non so come ringraziarti,
ora il programma funziona perfettamente,
inserisce le schede dei clienti nel database,
le ricerca con il carattere jolly,
le modifica e le cancella.

Ho voluto fare questo programmino perchè solo sul campo avrei notato ciò che mi sfuggiva,
e finalmente diciamo mi sono fatto una base.

posso chiederti le ultime tre cose?

1) alla fine di un operazione, qual'è il comando per rilanciare il form attuale da zero?
ad esempio, compilo tutti i campi nel form in modo che li memorizzi nel database alla premuta del bottone Salva,
dopo aver salvato appunto, come gli dico ricarica questo form da zero?

2) una cosa che mi chiedevano spesso quando programmavo negli anni 90,
era di ricercare nel database tutti i contratti in scadenza in un determinato periodo,

io ora nel file sql ho creato un campo chiamato scadcontratto del tipo Date,
qual'è la sintassi :
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where scadcontratto .................

che gli  faccia ricercare le schede con periodo compreso tra 01/01/21 e 31/12/21 ?

3) esiste un comando per uscire dalla procedura in corso?
tipo dopo aver premuto il tasto annulla
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 04:53:54 pm
2) una cosa che mi chiedevano spesso quando programmavo negli anni 90,
era di ricercare nel database tutti i contratti in scadenza in un determinato periodo,

io ora nel file sql ho creato un campo chiamato scadcontratto del tipo Date,
qual'è la sintassi :
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where scadcontratto .................

che gli  faccia ricercare le schede con periodo compreso tra 01/01/21 e 31/12/21 ?

Il formato della data che si usa (almeno io) in SQLite per la comparazione è:

Codice: [Seleziona]
                                              ' Data >= ' + QuotedStr(FormatDateTime('yyyy-mm-dd''T''hh:nn:ss',datainiziale)) +
                                              ' AND Data <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd''T''hh:nn:ss',datafinale))

//dove datainiziale e datafinale sono in formato TDateTime. QuotedStr è la funzione che ti consente di racchiudere un argomento testuale tra virgolette, senza rompersi con i caratteri.

//Quindi la tua query sarà:

'Select * from clienti where scadcontratto >= ' + QuotedStr(FormatDateTime('yyyy-mm-dd''T''hh:nn:ss', datainiziale)) +
                                              ' AND scadcontratto <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd''T''hh:nn:ss', datafinale))


Salvo errori ed omissioni  ;D
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 15, 2021, 05:22:47 pm
1) alla fine di un operazione, qual'è il comando per rilanciare il form attuale da zero?
ad esempio, compilo tutti i campi nel form in modo che li memorizzi nel database alla premuta del bottone Salva,
dopo aver salvato appunto, come gli dico ricarica questo form da zero?

3) esiste un comando per uscire dalla procedura in corso?
tipo dopo aver premuto il tasto annulla

Non c'è un comando che io conosca per ricaricare la Form da "zero" ossia come fosse alla partenza. Devi creare un metodo che riporti tutti i tuoi controlli alla condizione di default.

Non ho capito cosa intendi per "uscire dalla procedura in corso". Il tuo programma gestisce le proprie fasi di elaborazione e quando premi un tasto (ad esempio Annulla) dovrà eseguire qualcosa tipo chiudere un DialogBox, non scrivere dati, non aggiornare variabili, etc ....

Se ti riferisci invece al ritorno del dato di una finestra modale (quella visualizzata con lo ShowModal), quando la finestra si chiude deve assegnare un valore alla propria proprietà ModalResult. Questo valore è il risultato che la funzione ShowModal ritornerà al chiamante.
Normalmente si usa 'mrOK' per dare l'OK alle operazioni e 'mrCancel' (che è il default assegnato al tasto Annulla di una DialogBox) per dire che qualcosa è andato storto e l'operazione è stata annullata.

Codice: [Seleziona]
if Form2.ShowModal = mrOK then
  begin
     ------ TUTTO OK
  end
else
  begin
     ------ TUTTO KO
  end;

EDIT: quando premi un tasto in una finestra modale, la sua proprietà ModalResult viene assegnata in automatico alla Form. Quindi la la ModalResult dell'ulitmo tasto che premi prima dell'uscita sarà quella assegnata allo ShowModal (a meno che nell'evento di chiusura tu non vada a sovrascriverla).
 
Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 26, 2021, 04:58:31 pm
ma con delphi 10 si può usare anche sqlite?
è già integrato?
o bisogna installare qualcosa come zeoslib?
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 26, 2021, 05:11:42 pm
Con Delphi è già integrato (FireDAC), ma di fatto è uguale a ZEOS.

Non cambia praticamente nulla.
L'installazione di ZEOS è comunque una operazione semplice, quindi non la vedo come una grossa problematica.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Novembre 26, 2021, 05:27:04 pm
ok grazie per la risposta,

ma tu pensi che mi convenga comprare delphi 11 insieme a dei colleghi?

avrei più vantaggi o svantaggi?
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Novembre 26, 2021, 05:52:03 pm
Intanto, ammesso di avere voglia di investire in Delphi, comunque verrebbe concessa una sola installazione.

Potete usare per un anno la versione Community, l'ultima è la 10.4.2 CE, che è gratuita per quel periodo.

E di questa ne potete avere una a testa. Fermo restando che non dovete avere introiti sulla attività legata alla programmazione per più di tot Euro all'anno (non ricordo quanto sia il tot).

EDIT: Non potete usare la CE per fare applicazioni commerciali, ossia da vendere (a meno che non abbiano cambiato la licenza).

Altra cosa, è che ovviamente poi bisogna scegliere se continuare (e pagare) oppure rivolgersi ad altro.

Io ho la licenza di Delphi, ma tutto sommato vedo che Lazarus è una buona controparte. Ha la stragrande maggioranza delle funzionalità di Delphi e soddisfa il 99% delle esigenze di un programmatore.

Certo essendo Delphi un progetto gestito e mantenuto da una società strutturata paragoni completi non se ne possono fare.

Giusto un esempio: in un altro post odierno ho allegato un programmino che fà vedere alcuni effetti .... Quello in Delphi si fà in 1 minuto (si fà per dire ...). Ma nella mia vita attuale, e anche quella futura penso, non mi è mai servita ne ritengo userò mai quella tecnologia.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Marzo 18, 2022, 02:09:44 pm
con sqlite si può lavorare da più postazioni piazzando l'archivio su un server? o bisogna usare mysql?


mysql si può usare con lazarus?
se si come?
stesse istruzioni di sqlite?

grazie
Titolo: Re:informazioni per creare database
Inserito da: xinyiman - Marzo 18, 2022, 03:16:03 pm
Se la tua necessità e lavorare con un DBMS degno di questo nome usa Firebird. Vedrai che ti troverai bene.
MySQL ha problemi di licenza. Ovvero se non rilasci i tuoi sorgenti come codice open source devi pagare la licenza. SQLite va bene per progetti non condivisi. Se vuoi database open source e multipiattaforma, con una relazione client server rimangono due belle opzioni. Firebird o PostrgeSQL
con sqlite si può lavorare da più postazioni piazzando l'archivio su un server? o bisogna usare mysql?


mysql si può usare con lazarus?
se si come?
stesse istruzioni di sqlite?

grazie
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Marzo 18, 2022, 03:38:32 pm
con sqlite si può lavorare da più postazioni piazzando l'archivio su un server? o bisogna usare mysql?
Sqlite è un database monoutente. Non supporta attività contemporanee di scrittura. In realtà più di qualcuno lo ha usato in rete e non solo come multiutenza, ma non è strutturato per ciò.
Io lo sconsiglio vivamente.
Se cerchi sul nostro forum "SQLITE", troverai delle discussioni su ciò.

mysql si può usare con lazarus?
se si come?
stesse istruzioni di sqlite?

MySQL si può usare con Lazarus, come tantissimi altri db di varia natura: se usi ZEOS, nel componente ZConnection la proprietà "protocol" te li elenca tutti.
Tutti i DB si usano più o meno allo stesso modo (anzi, volendo dire si potrebbero usare tutti alla stessa maniera senza neanche sapere che DB si stà usando) se si usa SQL.

A parte la costruzione del db, che è consigliato fare con l'apposito TOOL fornito normalmente dal sviluppatore del DB o da TOOL free di terze parti, tutto il resto è esattamente identico.

Usare un db o un altro è nella maggior parte delle volte questione di gusti e abitudine.

Poi nel dettaglio ognuno ha delle proprie peculiarità e caratteristiche, ma qui si entra in un dettaglio dove si potrebbe discutere e sfornare migliaia di pagine di discussione.

Tanto per intenderci: SQLite non ha bisogno di distribuzioni o installazioni (il tuo programma deve essere accompagnato da una sola DLL, e nella maggior parte dei SO neanche da quella perchè è supportato nativamente).

MySql ha necessità di una installazione (ma come c'è l'ha Postgres, MSSql, etc ...).
 
Una volta installato MySQL, devi crearti il DB con campi, indici, tabelle e altro.

Da Zeos (ZConnection) scegli dalla proprietà "protocol" quale Motore DB e quale DB agganci alla connessione e poi puoi usare i componenti ZQuery / ZTable per interrogare  allo stesso identico modo di SQLite il tuo DB.

Di fatto come ti accennavo, avere un DB o un altro è in pratica totalmente indifferente (per l'uso). Potrebbe non esserlo per una particolar esigenza.

Non ho mai usato MySql ne conosco a fondo le sue caratteristiche, quindi non saprei darti ulteriori info.

EDIT: come citato nel post di @xinyiman che mi ha preceduto, occorre valutare le limitazioni d'uso, come ad esempio la licenza in primis oppure le particolari condizioni d'uso.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: casey - Marzo 18, 2022, 10:49:01 pm
con sqlite si può lavorare da più postazioni piazzando l'archivio su un server? o bisogna usare mysql?
Sqlite è un database monoutente. Non supporta attività contemporanee di scrittura. In realtà più di qualcuno lo ha usato in rete e non solo come multiutenza, ma non è strutturato per ciò.
Io lo sconsiglio vivamente.
Se cerchi sul nostro forum "SQLITE", troverai delle discussioni su ciò.

mysql si può usare con lazarus?
se si come?
stesse istruzioni di sqlite?

MySQL si può usare con Lazarus, come tantissimi altri db di varia natura: se usi ZEOS, nel componente ZConnection la proprietà "protocol" te li elenca tutti.
Tutti i DB si usano più o meno allo stesso modo (anzi, volendo dire si potrebbero usare tutti alla stessa maniera senza neanche sapere che DB si stà usando) se si usa SQL.

A parte la costruzione del db, che è consigliato fare con l'apposito TOOL fornito normalmente dal sviluppatore del DB o da TOOL free di terze parti, tutto il resto è esattamente identico.

Usare un db o un altro è nella maggior parte delle volte questione di gusti e abitudine.

Poi nel dettaglio ognuno ha delle proprie peculiarità e caratteristiche, ma qui si entra in un dettaglio dove si potrebbe discutere e sfornare migliaia di pagine di discussione.

Tanto per intenderci: SQLite non ha bisogno di distribuzioni o installazioni (il tuo programma deve essere accompagnato da una sola DLL, e nella maggior parte dei SO neanche da quella perchè è supportato nativamente).

MySql ha necessità di una installazione (ma come c'è l'ha Postgres, MSSql, etc ...).
 
Una volta installato MySQL, devi crearti il DB con campi, indici, tabelle e altro.

Da Zeos (ZConnection) scegli dalla proprietà "protocol" quale Motore DB e quale DB agganci alla connessione e poi puoi usare i componenti ZQuery / ZTable per interrogare  allo stesso identico modo di SQLite il tuo DB.

Di fatto come ti accennavo, avere un DB o un altro è in pratica totalmente indifferente (per l'uso). Potrebbe non esserlo per una particolar esigenza.

Non ho mai usato MySql ne conosco a fondo le sue caratteristiche, quindi non saprei darti ulteriori info.

EDIT: come citato nel post di @xinyiman che mi ha preceduto, occorre valutare le limitazioni d'uso, come ad esempio la licenza in primis oppure le particolari condizioni d'uso.

Ciao
[/quote
ciao ragazzi,
vi ringrazio per le risposte,

avevo pensato a mysql perchè quando si acquista un dominio ed uno spazio web,
mysql è già incluso, insieme al php,
per cui pensavo ad un server remoto,
al quale si potrebbero collegare i vari client con software scritti con lazarus.

Al momento sto usando lazarus a 32 bit e la libreria sqlite a 32 bit,
in modo che i miei software girino anche su wibdows xp.

Se installo lazarus 64 bit,
i file exe compilati saranno solo a 64 bit?
la dll sqlite da includere deve essere per forza quella a 64 bit?
Titolo: Re:informazioni per creare database
Inserito da: casey - Marzo 18, 2022, 11:00:25 pm
Se la tua necessità e lavorare con un DBMS degno di questo nome usa Firebird. Vedrai che ti troverai bene.
MySQL ha problemi di licenza. Ovvero se non rilasci i tuoi sorgenti come codice open source devi pagare la licenza. SQLite va bene per progetti non condivisi. Se vuoi database open source e multipiattaforma, con una relazione client server rimangono due belle opzioni. Firebird o PostrgeSQL
con sqlite si può lavorare da più postazioni piazzando l'archivio su un server? o bisogna usare mysql?


mysql si può usare con lazarus?
se si come?
stesse istruzioni di sqlite?

grazie

Ma firebird non è un sql, giusto?
per cui non posso usarlo come faccio ora con sqlite,
e vista la mancanza di documentazione in italiano,
mi riesce difficile imparare,
in effetti sto pensando di buttarmi sul C#,
per il quale esistono molti ottimi libri.
Cmq devo anche imparare PHP e Javascript,
ormai vengono richieste soprattutto web app, si fa tutto via internet,
mentre i programmi per windows sono in declino.
io sono stato un ottimo programmatore dos ai miei tempi,
ma essendomi fermato alla fine degli anni 90,
sono rimasto parecchio indietro.

Ho letto su internet di Mariasql, che è come mysql senza problemi di licenza,
e anche di mongodb, con il quale i campi non hanno spazi limitati,
ma ognuno può avere dimensione diverse,
insomma non necessita di una struttura rigida.
Che ne pensati di questi?
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Marzo 18, 2022, 11:28:20 pm
Lazarus, in funzione alla versione installata 32 o 64 bit compila nativamente per quella versione.

Puoi comunque aggiungere il cross-compiler per la versione che ti manca.

Nelle opzioni di progetto potrai settare come verrà generato il programma, a 32 o 64 bit. L'exe così creato girerà in quella configurazione (x32 o x64) e potrà caricare solo librerie corrispondenti.

Un programma a 32 bit può caricare solo librerie a 32 bit, uno a 64 solo librerie a 64 bit.

Non ci sono deroghe a questo, le istruzioni a 32 bit e a 64 bit non possono essere eseguite nello stesso spazio di memoria.

Puoi in ogni momento ricompilare l'eseguibile in una configurazione diversa (ovviamente se hai installato il cross compiler).

Puoi installare cross compiler anche di altri SO (ad esempio Linux), ma ovviamente potrai solo generare l'eseguibile senza poterlo fare girare sotto Windows (.... in realtà Windows avrebbe anche il WSL2, ossia Linux che gira nativamente in background  ;D , per cui .....).

Invece, con riferimento all'hosting di siti web (dominio + spazio WEB + DB + ....) fai attenzione che appunto quello è uno spazio web e non sei libero di fare quello che vuoi: non è che acquisendo MySql nello spazio web puoi accedervi dall'esterno. MySql rimarra confinato e usabile solo dal dominio (ad esempio con php o asp o pyton o HTML o tramite ISAPI o CGI). Potrai trasferire dati con tutti i formati che vuoi (o quasi) tramite http, ma non potrai comunicare direttamente con MySql dall'esterno (a meno che non "hackeri" il tuo stesso sito  :o

Per fare quello che penso di aver compreso hai necessità di un server CLOUD o di un hosting di un server.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Marzo 18, 2022, 11:48:58 pm
Ma firebird non è un sql, giusto?
per cui non posso usarlo come faccio ora con sqlite,
e vista la mancanza di documentazione in italiano,
mi riesce difficile imparare,
in effetti sto pensando di buttarmi sul C#,
per il quale esistono molti ottimi libri.
Cmq devo anche imparare PHP e Javascript,
ormai vengono richieste soprattutto web app, si fa tutto via internet,
mentre i programmi per windows sono in declino.
io sono stato un ottimo programmatore dos ai miei tempi,
ma essendomi fermato alla fine degli anni 90,
sono rimasto parecchio indietro.

Ho letto su internet di Mariasql, che è come mysql senza problemi di licenza,
e anche di mongodb, con il quale i campi non hanno spazi limitati,
ma ognuno può avere dimensione diverse,
insomma non necessita di una struttura rigida.
Che ne pensati di questi?

Come ti ho riportato, un DB vale un altro. Per sceglierlo a ragion veduta occore conoscerlo, anzi conoscerne diversi e comprenderne le peculiarità e le diversità-

I db che hai citati sono tutti db usati comunemente e che vanno bene, ma ti mentirei se affermassi che uno di loro và bene per un determinato scopo.

Un db: ha una installazione ? ha un runtime ? per quali ambienti è disponibile ? storicamente le versioni sono compatibili tra loro ? è multiutenza ? è ACID ? etc ... etc ... etc ...

In ogni caso, tieni molto presente che quando si parla di applicazioni WEB, si parla di tutto .... e di niente.

Guarda questo: https://cloud.dyn-o-saur.com/ (https://cloud.dyn-o-saur.com/)

e questo  https://cloud.dyn-o-saur.com/lazwebdemo.html (https://cloud.dyn-o-saur.com/lazwebdemo.html)

Uno è un eseguibile DELPHI (porting anche in Lazarus) e non ha niente che fare con il WEB (anche se sembre), l'altro è un progetto totalmente Lazarus ....

Ciao
Titolo: Re:informazioni per creare database
Inserito da: xinyiman - Marzo 20, 2022, 04:11:01 pm
Firebird è un database relazionale che supporta anche il dialetto SQL. Inoltre il discorso web/desktop application non è proprio come la racconti tu. Dipende molto dal settore. Però dipende dalle tue necessità, se devi fare delle web application, la cosa migliore rimane lo stack lamp (linux, apache, mysql, php). Se invece devi sviluppare applicazioni che lavorano con i DB in breve tempo e con una continua manutenzione/implementazione, Lazarus o Delphi sono i due ambienti per me migliori.

Se la tua necessità e lavorare con un DBMS degno di questo nome usa Firebird. Vedrai che ti troverai bene.
MySQL ha problemi di licenza. Ovvero se non rilasci i tuoi sorgenti come codice open source devi pagare la licenza. SQLite va bene per progetti non condivisi. Se vuoi database open source e multipiattaforma, con una relazione client server rimangono due belle opzioni. Firebird o PostrgeSQL
con sqlite si può lavorare da più postazioni piazzando l'archivio su un server? o bisogna usare mysql?


mysql si può usare con lazarus?
se si come?
stesse istruzioni di sqlite?

grazie

Ma firebird non è un sql, giusto?
per cui non posso usarlo come faccio ora con sqlite,
e vista la mancanza di documentazione in italiano,
mi riesce difficile imparare,
in effetti sto pensando di buttarmi sul C#,
per il quale esistono molti ottimi libri.
Cmq devo anche imparare PHP e Javascript,
ormai vengono richieste soprattutto web app, si fa tutto via internet,
mentre i programmi per windows sono in declino.
io sono stato un ottimo programmatore dos ai miei tempi,
ma essendomi fermato alla fine degli anni 90,
sono rimasto parecchio indietro.

Ho letto su internet di Mariasql, che è come mysql senza problemi di licenza,
e anche di mongodb, con il quale i campi non hanno spazi limitati,
ma ognuno può avere dimensione diverse,
insomma non necessita di una struttura rigida.
Che ne pensati di questi?
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 02, 2023, 04:38:18 pm
Salve ragazzi, non so se sto postando nel posto giusto ... spero di si ... ho un problema che voi sicuramente potete risolvermi e ve ne sarei veramente grato:

Non ho alcuna esperienza con sql e sono 15 anni che non scrivo più codice

Sto sviluppando un programma basato su sqllit3 per la prima volta, utilizzo i componenti di lazarus per gestirlo DBNavigator,DBGrid,DBEdit e così via …

Molto belli questi componenti, molto efficienti e duttili, credo che quando il progetto sarà terminato la stabilità che otterrò sarà sorprendente (il mio codice è veramente poco).

Ho anche letto che che sqlite3 non è certo un campione nella gestione della concorrenza ed eccoci alla mia domanda … vorrei limitare le operazioni di I/O il più possibile lavorando prevalentemente in memoria.

Molte delle tabelle del DB sono praticamente statiche (sono 4/5), quindi le leggo una volta all’avvio e non ho più necessità di accedervi nuovamente.

Una volta lette le tabelle vorrei poterle conservare in una query statica che ne mantenga il contenuto se è possibile (soluzione che sarebbe la mia preferita) non ho trovato nulla a tale proposito …

Ho pensato allora di typizzare delle matrici nelle quali mantenere le tabelle una volta caricate in memoria, non mi viene in mente altro ed è per questo che mi sto rivolgendo a voi.

Consigli, suggerimenti, soluzioni diverse o alternative ...???

Spero di essermi spiegato e se così non fosse sono a disposizione per ogni ulteriore eventuale chiarimento … grazie a chiunque vorrà darmi un consiglio..!
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Maggio 02, 2023, 05:27:24 pm
Una volta che esegui una query su una tabella, che non deve ovviamente poi venire toccata, i risultati della query sono permanenti.

Quindi una volta attivata (la query) se non la "chiudi" rimane li e puoi usare il risultato quante volte vuoi nel codice.

Ciao

P.S.: @Maurizio De Sanctis ben arrivato nella "community", scusate il termine anglofono ma suona meglio della versione italiana.
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 02, 2023, 05:52:28 pm
Una volta che esegui una query su una tabella, che non deve ovviamente poi venire toccata, i risultati della query sono permanenti.

Quindi una volta attivata (la query) se non la "chiudi" rimane li e puoi usare il risultato quante volte vuoi nel codice.

Ciao

P.S.: @Maurizio De Sanctis ben arrivato nella "community", scusate il termine anglofono ma suona meglio della versione italiana.

Grazie per l'immediatezza e la chiarezza ... evidentemente la chiudo dopo averla caricata ... ricevo un errore quando vado a rileggerla ... mi riguardo il codice e ancora grazie..! 😉👍👍👍
Titolo: Re:informazioni per creare database
Inserito da: xinyiman - Maggio 03, 2023, 08:21:10 am
Una volta che esegui una query su una tabella, che non deve ovviamente poi venire toccata, i risultati della query sono permanenti.

Quindi una volta attivata (la query) se non la "chiudi" rimane li e puoi usare il risultato quante volte vuoi nel codice.

Ciao

P.S.: @Maurizio De Sanctis ben arrivato nella "community", scusate il termine anglofono ma suona meglio della versione italiana.

Si è vero quello che dici, ma la connessione tcp al db mi pare venga mantenuta attiva. Se a lui non frega nulla ha risolto il problema. Diversamente può portarsi il risultato in un dataset virtuale.

Alcune considerazioni sui dataset virtuali scritte da me tempo fa: http://www.lazaruspascal.it/index.php?page=86
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Maggio 03, 2023, 10:01:41 am
Si è vero quello che dici, ma la connessione tcp al db mi pare venga mantenuta attiva. Se a lui non frega nulla ha risolto il problema. Diversamente può portarsi il risultato in un dataset virtuale.
Alcune considerazioni sui dataset virtuali scritte da me tempo fa: http://www.lazaruspascal.it/index.php?page=86

La connessione a SQLite viene effettuata tramite una libreria dinamica (.dll, .so, .dylib x Lazarus) ed integrata in Delphi. La query ritornata è statica dal punto di vista risultato. Se la tabella/e da cui la query ha estratto i risultati vengono modificate, il risultato della query rimane inalterato (anche se potrebbe non essere più coerente).

Per aggiornare la query occorre un refresh o una "chiusura / apertura" della stessa.

Si possono usare gli eventi per aggiornare la query in caso di variazione delle tabelle interessate, oppure altre metodologie.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 03, 2023, 04:06:06 pm
OK DragoRosso, ovviamente hai ragione, continuo vederne il contenuto ma se chiudo la connessione mi chiude anche la query... sbaglio..?
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 03, 2023, 04:28:36 pm
Una volta che esegui una query su una tabella, che non deve ovviamente poi venire toccata, i risultati della query sono permanenti.

Quindi una volta attivata (la query) se non la "chiudi" rimane li e puoi usare il risultato quante volte vuoi nel codice.

Ciao

P.S.: @Maurizio De Sanctis ben arrivato nella "community", scusate il termine anglofono ma suona meglio della versione italiana.

Infatti è quel che accade, considerando che su questo db potrebbero dover lavorare fino ad una decina di utenti e trattandosi di sqllite monoutente credo che la soluzione migliore sia quella di lavorare in memoria il più possibile limitando cosi conflitti e tempi d'attesa..!


Si è vero quello che dici, ma la connessione tcp al db mi pare venga mantenuta attiva. Se a lui non frega nulla ha risolto il problema. Diversamente può portarsi il risultato in un dataset virtuale.

Alcune considerazioni sui dataset virtuali scritte da me tempo fa: http://www.lazaruspascal.it/index.php?page=86
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 03, 2023, 04:38:49 pm
Credo di aver fatto un poco di casino con i post delle mie risposte ... abbiate pazienza sono molto vecchio ed anche un poco rincoglionito...! 😒😒😒😁👍
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Maggio 03, 2023, 05:29:52 pm
OK DragoRosso, ovviamente hai ragione, continuo vederne il contenuto ma se chiudo la connessione mi chiude anche la query... sbaglio..?

Non puoi avere componenti DB attivi senza connessione al database. Quindi ritengo, ma è da verificare, che tutti le query e gli altri componenti legati alla connessione vengano chiusi e gli eventuali risultati vengano posti a nil.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 03, 2023, 05:54:59 pm
OK DragoRosso, ovviamente hai ragione, continuo vederne il contenuto ma se chiudo la connessione mi chiude anche la query... sbaglio..?

Non puoi avere componenti DB attivi senza connessione al database. Quindi ritengo, ma è da verificare, che tutti le query e gli altri componenti legati alla connessione vengano chiusi e gli eventuali risultati vengano posti a nil.

Ciao

Chiarissimo DragoRosso, cercavo questa conferma, quindi per poter usare sqlit3 in multiutenza debbo limitare l'I/O e trasferire i risulatati delle query in un buffer in memoria..! Grazie ancora..!
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Maggio 03, 2023, 06:16:53 pm
Come diceva @xinyiman, puoi usare un dataset in memoria copiando le tabelle che ti servono, così eviti di fare tanti I/O.

Fai attenzione, lavorare in rete con SQLite (ma pure con altri insieme di dati, qualsiasi essi siano) è abbastanza rischioso. La funzionalità del database viene garantita se il DB stesso si trova nello stesso sistema in cui opera la DLL (non c'è scritto da nessuna parte questo, ma basta leggere le note sul sito di SQLite https://sqlite.org/index.html (https://sqlite.org/index.html) per capirlo).

Non è pensato ne strutturato per lavorare in rete. Se cerchi nel ns. forum SQLITE troverai delle discussioni anche "accese" su ciò.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 03, 2023, 07:21:35 pm
Come diceva @xinyiman, puoi usare un dataset in memoria copiando le tabelle che ti servono, così eviti di fare tanti I/O.

Fai attenzione, lavorare in rete con SQLite (ma pure con altri insieme di dati, qualsiasi essi siano) è abbastanza rischioso. La funzionalità del database viene garantita se il DB stesso si trova nello stesso sistema in cui opera la DLL (non c'è scritto da nessuna parte questo, ma basta leggere le note sul sito di SQLite https://sqlite.org/index.html (https://sqlite.org/index.html) per capirlo).

Non è pensato ne strutturato per lavorare in rete. Se cerchi nel ns. forum SQLITE troverai delle discussioni anche "accese" su ciò.

Ciao

Grazie DragoRosso ho letto un poco dei post relativi alla concorrenza e lo approfondirò sicuramente ...
tieni presente che che gli accessi all'archivio saranno veramente il minimo sindacale risolvo il problema
delle connessioni gestendo le tabelle in questo modo:

type
    VociTF = record

    ID_VociTF    : integer;
    Tipo            : string[1];
    CapoFila      : string[1];
    Codice         : string[10];
    Descrizione  : string[100];
end;

ArrayVociTF : array of VociTF;

Quanto sopra per ogni tabella, in questo modo evito anche le singole select agli ID e poi stiamo a vedere...

Ho ripreso un progetto che avevo già realizzato moltissimi anni or sono e dei quali ho ... PERSO I SORGENTI ...
credo di essere un maniaco per eccellenza dei backup ... che dire..?

Dammi se puoi un parere sulla mia soluzione di tipizzare gli array o se pensi ad altra soluzione ... Grazie ancora a tutti voi..!


 
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Maggio 03, 2023, 07:57:04 pm
type
    VociTF = record

    ID_VociTF    : integer;
    Tipo            : string[1];
    CapoFila      : string[1];
    Codice         : string[10];
    Descrizione  : string[100];
end;
ArrayVociTF : array of VociTF;

Quanto sopra per ogni tabella, in questo modo evito anche le singole select agli ID e poi stiamo a vedere...
Ho ripreso un progetto che avevo già realizzato moltissimi anni or sono e dei quali ho ... PERSO I SORGENTI ...
credo di essere un maniaco per eccellenza dei backup ... che dire..?
Dammi se puoi un parere sulla mia soluzione di tipizzare gli array o se pensi ad altra soluzione ... Grazie ancora a tutti voi..!

Và bene anche il classico array. Era più elegante un dataset virtuale, ma se non hai necessità di visualizzarle in controlli visuali và bene così.

E comunque se dovessi visualizzarli, invece di usare un controllo DB userai un controllo normale con la complicazione di riempirlo a codice.

Ciao.
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 07, 2023, 02:48:29 pm
Ragazzi, sono basito ... ho posto questa domanda a chatGPT: multiutenza con sqllite3

Ecco la risposta:

SQLite3 supporta l'accesso multiutenza al database, il che significa che più utenti possono accedere contemporaneamente allo stesso database. Tuttavia, è importante prendere alcune precauzioni per garantire che l'accesso multiutenza non causi problemi di concorrenza o corruzione del database.

Ecco alcuni suggerimenti per supportare l'accesso multiutenza a un database SQLite3:

Utilizza una connessione al database separata per ogni utente che accede al database. In questo modo, ogni utente ha la propria istanza del database e le operazioni di scrittura effettuate da un utente non interferiranno con quelle degli altri utenti.

Utilizza il meccanismo di blocco di SQLite3 per garantire che le operazioni di scrittura siano effettuate in modo sicuro. SQLite3 utilizza un sistema di locking basato sui file per garantire che solo un utente alla volta possa scrivere sul database. Ciò significa che se un utente sta scrivendo sul database, gli altri utenti possono solo leggere il database e non possono effettuare operazioni di scrittura.

Utilizza la transazione di SQLite3 per garantire l'integrità dei dati. Le transazioni consentono di eseguire una serie di operazioni di scrittura come un'unità atomica, in modo che tutte le operazioni di scrittura vengano eseguite o tutte vengano annullate in caso di errore. Ciò garantisce che il database rimanga in uno stato coerente anche in caso di problemi di concorrenza.

Evita di utilizzare tabelle temporanee condivise tra gli utenti, poiché ciò può causare problemi di concorrenza. Se è necessario utilizzare tabelle temporanee, assicurati di creare una tabella temporanea separata per ogni utente.

Assicurati che tutti gli utenti utilizzino la stessa versione del database. Se si utilizzano versioni diverse del database, potrebbero verificarsi problemi di compatibilità che causano problemi di corruzione dei dati.

In generale, è importante prestare attenzione alla progettazione e all'implementazione del sistema multiutenza per garantire la sicurezza e l'integrità dei dati del database.

PS... lo sto usando per la prima volta...!
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Maggio 07, 2023, 04:43:50 pm
Ho sempre detto che ChatGPT è oltre ....  ;D ;D ;D

A parte gli scherzi, SQLite non è multiutenza nativamente.

Puoi renderlo multiutenza posizionando tra i client e il db un tuo server (programma server) che gestisca la multiutenza e soprattutto la comunicazione. In pratica i client non faranno accesso diretto al DB ma solo al tuo server.

Ricordiamoci sempre che l'accesso al DB tramite SQL è senza crittografia, indi per cui il traffico è visibile (a meno che tu non crittografi il contenuto a priori) in rete.

Ma a questo punto forse è meglio pensare ad un'altra struttura con DB diversi (tipo FireBird ad esempio) che è multiutenza.

Per ciò che riguarda ChatGPT invece, è sempre necessario prendere con le pinze quanto suggerisce. L'IA che vediamo nei film (dal mitico Blade Runner originale, al Io Robot) non esiste ancora ... per fortuna almeno per il nostro tempo.

Ciao
Titolo: Re:informazioni per creare database
Inserito da: Maurizio De Santis - Maggio 07, 2023, 07:53:27 pm
Ho sempre detto che ChatGPT è oltre ....  ;D ;D ;D

A parte gli scherzi, SQLite non è multiutenza nativamente.

Puoi renderlo multiutenza posizionando tra i client e il db un tuo server (programma server) che gestisca la multiutenza e soprattutto la comunicazione. In pratica i client non faranno accesso diretto al DB ma solo al tuo server.

Ricordiamoci sempre che l'accesso al DB tramite SQL è senza crittografia, indi per cui il traffico è visibile (a meno che tu non crittografi il contenuto a priori) in rete.


Ma a questo punto forse è meglio pensare ad un'altra struttura con DB diversi (tipo FireBird ad esempio) che è multiutenza.

Per ciò che riguarda ChatGPT invece, è sempre necessario prendere con le pinze quanto suggerisce. L'IA che vediamo nei film (dal mitico Blade Runner originale, al Io Robot) non esiste ancora ... per fortuna almeno per il nostro tempo.

Ciao

Ciao DragoRosso, io ho scoperto chatGPT oggi e mi ha lasciato basito per il supporto in termini di linguaggi di programmazione con esempi chiari ed esaustivi ... certo sempre e comunque con le pinze ... comunque il supporto alla programmazione è eccellente..!😉👍
Titolo: Re:informazioni per creare database
Inserito da: giacomarko - Maggio 08, 2023, 08:24:06 am
Chat GPT  a parte,

provato anche io per quel programma sostitutivo della barra di Windows di qualche mese fa, alla fine il supporto non è stato risolutivo e la soluzione è arrivata dal forum, non mi ha impressionato più di tanto,

detto questo domando per curiosità,

non capisco perché voler usare un DB, che non è progettato per la multiutenza, e infarcirlo di controlli per usarlo in multiutenza,

con tutti i rischi del caso, e i problemi che ne potrebbero derivare,

m
Titolo: Re:informazioni per creare database
Inserito da: bonmario - Maggio 08, 2023, 08:31:37 am
detto questo domando per curiosità,

non capisco perché voler usare un DB, che non è progettato per la multiutenza, e infarcirlo di controlli per usarlo in multiutenza,

con tutti i rischi del caso, e i problemi che ne potrebbero derivare,

m

Per quanto mi riguarda, l'ho fatto tempo fa con un progetto ormai in disuso, per pura semplicità e comodità: a memoria, per far funzionare SQLite, basta copiare una dll nella stessa directory dove c'è l'eseguibile. Per quanto riguarda quel progetto, sapevo già in partenza che il programma sarebbe stato usato al massimo da 3 o 4 persone contemporaneamente, ma che la probabilità che 2 o più persone avessero potuto scrivere nel DB contemporaneamente erano quasi nulle. Quindi, avevo gestito il tutto tramite un file civetta, che mi permetteva di capire se potevo scrivere o se dovevo aspettare perché altri stavano scrivendo.
Il programma è stato usato per 2 o 3 anni senza nessun problema dal punto di vista della concorrenzialità.

Ciao, Mario
Titolo: Re:informazioni per creare database
Inserito da: giacomarko - Maggio 08, 2023, 09:40:20 am
Capito,

resta però una soluzione "anomala",

dove giochi la carta che serve solo una dll, a fronte del fatto di gestire gli accessi al DB, per una cosa che nasce limitata e quasi nulla espandibile,

voglio dire,

ti avessero chiesto, un anno dopo, abbiamo necessità di ampliare, allargare il numero di utenti....
avresti dovuto cambiare tutto,

non è che personalmente SQLite lo schifo, di fatto lo uso principalmente per le configurazione personali.
Titolo: Re:informazioni per creare database
Inserito da: tito_livio - Maggio 08, 2023, 10:05:03 am
Anche se la concorrenza è poca o nulla, mettere il file sqlite su di un server è una cosa che non farei (quasi) mai.
Con sqlite non c'è un programma che per noi fa le query sul server ma la query viene fatta, elaborata, dal pc client.
Quindi tutti i dati della o delle tabelle interessate devono "camminare" attraverso la rete per essere elaborati sul client e poi eventualmente devono tornare i record modificati se ce ne sono.
A questo punto il programma diventa lento se cresce come quantità di dati oppure se si usa una connessione lenta.
Quindi, una volta che si comincia a costruire una nuova applicazione e se si pensa che i dati col tempo poi diventino tanti, secondo me è meglio partire col piede giusto.
Titolo: Re:informazioni per creare database
Inserito da: bonmario - Maggio 08, 2023, 10:19:51 am
Naturalmente, ognuno fa le valutazioni in base al caso specifico.
Nell'esempio che ho fatto prima, si sapeva già in partenza che quello era un programma che sarebbe durato per 2 o 3 anni al massimo, e delle altre considerazioni che ho spiegato prima.

Naturalmente, se il contesto fosse stato diverso, quindi col sospetto che il numero di utenti sarebbe potuto aumentare, o altro, avrei fatto il tutto con Firebird o altro.

Ciao, Mario
Titolo: Re:informazioni per creare database
Inserito da: DragoRosso - Maggio 08, 2023, 04:14:54 pm
L'uso di un DB o un altro dipende prevalentemente dallo scopo e dal grado di domestichezza che ha il programmatore con i DB / RDBMS e con il linguaggio di programmazione (tipo Lazarus, ASP, .net, etc ...) e con il linguaggio di interfacciamento con il motore DB (normalmente SQL).

Se pensate che SQLite non necessita di installazione, provate viceversa a pensare all'installazione e manutenzione di DB che invece hanno necessità di essere installati e mantenuti (FireBird in primis ad esempio). E le console di gestione e manutenzione ?

Un utente alla prime armi vede e segue delle dinamiche che gli appaiono più semplici, ma d'altronde tali utenti non gestiscono ovviamente il magazzino di Amazon ...  ;D

L'uso di SQLite è sempre stato sconsigliato in RETE e in Multiutenza: ovviamente se gestiamo i ns. conti della spesa ... bhè allora forse è giustificato, non è che se perdiamo la registrazione di uno scontrino ci arriva la finanza a casa.

Ciao