* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

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

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

101 Visitatori, 0 Utenti

Autore Topic: informazioni per creare database  (Letto 29997 volte)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #75 il: 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
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Maurizio De Santis

  • Newbie
  • *
  • Post: 11
  • Karma: +0/-0
    • Perchè pagare ciò che è gratuito..?
Re:informazioni per creare database
« Risposta #76 il: 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..!
L’uomo saggio agisce prima di parlare ed in seguito parla secondo la sua azione ... By Confucio.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #77 il: 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 per capirlo).

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

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Maurizio De Santis

  • Newbie
  • *
  • Post: 11
  • Karma: +0/-0
    • Perchè pagare ciò che è gratuito..?
Re:informazioni per creare database
« Risposta #78 il: 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 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..!


 
« Ultima modifica: Maggio 03, 2023, 07:24:54 pm da Maurizio De Santis »
L’uomo saggio agisce prima di parlare ed in seguito parla secondo la sua azione ... By Confucio.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #79 il: 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.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Maurizio De Santis

  • Newbie
  • *
  • Post: 11
  • Karma: +0/-0
    • Perchè pagare ciò che è gratuito..?
Re:informazioni per creare database
« Risposta #80 il: 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...!
« Ultima modifica: Maggio 07, 2023, 03:47:09 pm da Maurizio De Santis »
L’uomo saggio agisce prima di parlare ed in seguito parla secondo la sua azione ... By Confucio.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #81 il: 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
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Maurizio De Santis

  • Newbie
  • *
  • Post: 11
  • Karma: +0/-0
    • Perchè pagare ciò che è gratuito..?
Re:informazioni per creare database
« Risposta #82 il: 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..!😉👍
L’uomo saggio agisce prima di parlare ed in seguito parla secondo la sua azione ... By Confucio.

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:informazioni per creare database
« Risposta #83 il: 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
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:informazioni per creare database
« Risposta #84 il: 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

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:informazioni per creare database
« Risposta #85 il: 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.
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:informazioni per creare database
« Risposta #86 il: 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.
« Ultima modifica: Maggio 08, 2023, 10:09:09 am da tito_livio »

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:informazioni per creare database
« Risposta #87 il: 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

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #88 il: 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
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19169
  • Topic in totale: 2286
  • Online Today: 123
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 101
Total: 101

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.