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.
Ma sqlite3 è sempre l'sqlite di cui abbiamo parlato sopra, giusto?
sqldb un altro tipo di sql più avanzato?
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
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
ma quindi alla fine tra sqlite, sqldb, mysql, mssql, che cosa cambia?
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
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
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
In allegato un miniprogetto con un DB.
C'è il file Leggimi.TXT come spiegazione più o meno esauriente.
Ciao
E se proprio dormono... stanno sognando un uovo programma da sviluppare!
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
E se proprio dormono... stanno sognando un uovo programma da sviluppare!
;D ;D ;D Si si, è proprio un UOVO programma ;D ;D ;D
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;
il primo bottone che quando premuto, con uno showmessage mi visualizza il secondo cognome memorizzato nel database,
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;
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;
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
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
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;
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
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.
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti order by nomecliente = '+TEnome.text;
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti order by nomecliente = '+'"'+TEnome.text+'";
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where nomecliente = '+'"'+TEnome.text+'"'+' order by nomecliente';
Se ho una variabile integer totaleclienti ,
e gli voglio assegnare il valore del totale dei clienti presenti nell'archivio,
devo scrivere totaleclienti := zquery1. (cosa?)
Select * from tabella
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.
quindi, sostituendo il simbolo = con like
la ricerca diventa case insensitive,
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.
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where nomecliente like "%'+TEnome.text+'%"'+' order by nomecliente';
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.
A memoria dovrebbe essere Controllo.SetFocus (ossia Edit1.SetFocus) o giu di li.
quindi usando .show al posto di showmodal posso dalla form2 controllare anche la form1? che in questo caso non dovrebbe essere bloccata
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.
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 ?
' 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))
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
if Form2.ShowModal = mrOK then
begin
------ TUTTO OK
end
else
begin
------ TUTTO KO
end;
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
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ò.
mysql si può usare con lazarus?
se si come?
stesse istruzioni di sqlite?
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?
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 PostrgeSQLcon 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?
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 PostrgeSQLcon 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?
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.
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
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
OK DragoRosso, ovviamente hai ragione, continuo vederne il contenuto ma se chiudo la connessione mi chiude anche la query... sbaglio..?
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
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
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..!
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
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