ho letto in giro di varie possiblità tra MS SQL , MYSQL , FIREBIRD etc
e i vari ADO , dbexpress e "terze parti" gratuite e no
sono un po confuso in quanto non riesco a fare una valutazione
chiara , volevo chiedere qualche consiglio agli esperti che hanno già
sviluppato gestionali con Delphi
l'applicazione dovrebbe gestire in rete un DB che arriva a massimo
10000 record per anno , stavo pensando di separare il DB uno per ogni
anno per semplificare la gestione dei dati vecchi
ho la necessità di creare un tool di visualizzazione/scorrimento dei
dati per l'utente finale dove , con varie selezioni, poter
visualizzare solo una parte dei record e su questi poter effettuare
direttamente modifiche , cancellazioni e duplicazioni
attualmente ho un programma che fa questo e che ha un tool di
visualizzazione avanzato che scorre i record "in tempo" reale , cioè ,
nel caso di installazione in rete , se un utente inserisce o aggiorna
da altra postazione un nuovo record e questo rientra nella query di
ricerca dell'utente che sta scorrendo i record, quest'ultimo se lo
ritrova direttamente nel suo "scorrimento" appena preme un tasto (up,
down)
vorrei chiedere consigli su quale DB dirigermi e con quale tipo di
accesso
in generale se ho capito bene dbexpress rende indipendenti dal DB ma
richiede l'acquisto di una licenza più costosa di Delphi
mi sono state suggerite soluzioni del tipo MYSQL , ma sostanzialmente
la mia applicazione non sarà weboriented. sono anche un po scettico su
MYSQL che è gratuito ma non lo è in realtà quando si vende una
applicazione a terzi (se ho capito bene)
oppure MS SQL express che è gratuito fino a 5 postazioni (dovrebbero
bastare salvo qualche caso raro)
trovandomi a sviluppare ex novo stavo pensando di evitare di
utilizzare ADO (o altri tool terzi gratuiti e non) x evitare in un
prossimo futuro di dover "correggere e portare" verso dbexpress
in ogni caso considerando la capacità della tecnologia/db di
scorrimento dei record
so che ci sono anche molti tools di terze parti (gratuiti e non )ma
bisognerebbe avere esperienza in merito per poterli valutare
grazie per gli eventuali consigli
saluti
Alessandro
Forse pi� Zeos che IBX cos� ti sleghi dal motore db.
Database : Firebird
Pro:
- Gratuito per tutte i tipi di programmi che vuoi creare
- Di facilissima manutenzione
- Multipiattaforma (il server pu� anche essere Linux il che ha i suoi
vantaggi)
- Leggero e veloce (almeno per le necessit� che hai descritto)
- � client/server (niente directory condivise, basta conoscere l'IP del
server dove gira il servizio di FB e l'alias assegnato al db o, in
alternativa, il suo percorso)
- Buona documentazione
Contro:
- Un client installato su ogni PC che si connette (non � un "contro" ma
� una necessit�)
- � client/server (devi studiarti le transazioni altrimenti il prossimo
messaggio che posti sar� "Come mai il client X non vede quello che salva
il client Y?" :) )
- Dovrai sostenere inutili discussioni con quelli che continueranno a
dirti "Ma come?! Non usi XXXSiquel?! Ma � meraviglioso, potentissimo,
ultrafighissimo, stravelocissimo, va bene anche per le uebapplicascions"
(a me capita ad ogni nuovo progetto e quelli che m'hanno detto la frase
si ricredono sempre alla fine)
Se non si fosse capito uso FB + IBX/Zeos da tempo e non ho mai avuto
ragione di cambiare.
Usi la versione unicode?
Se posso, come ti trovi?
la trovi abbastanza affidabile per la produzione?
Io sto usando la 6.6.6 ma con D5
Grazie, ciao.
Questo mi interessa: stai dicendo che con zeos c'� un meccanismo di
obesrving che mostra i dati live proprio come il caso proposto dall'OP ?
Cio�, mentre scorro il dataset, se un altro client aggiunge un record,
me lo ritrovo automaticamente nella mia griglia ?
Con l'adodataset per vedere il record aggiunto bisognava farsi un "refresh".
--
morde
QT 4.7
Delphi (5,6,7.. expired)
Firebird Database
Zeos o IBX c'entrano poco.
Ci� che pu� rendere immediata la visualizzazione della modifica operata
ad una tabella dopo il Commit (o il CommiRetaining) � il sistema di
eventi di Firebird.
L'applicazione rimane in ascolto di questi eventi tramite un componente
(negli IBX c'� TIBevents) e quando arriva l'evento opera le azioni
richieste.
No.
> Io sto usando la 6.6.6 ma con D5
Io l'ho usata con D7 per un mio personale software di conversione
archivi Access -> FB visto che ero stufo di scrivere un software apposta
per ogni conversione.
L'ho fatto pi� per curiosit� che per vera necessit� e prima o poi
compir� il grande passo di sostituire i componenti IBX con Zeos in tutti
i miei progetti.
Per ora vale ancora il detto "se funziona non toccare". :)
> l'applicazione dovrebbe gestire in rete un DB che arriva a massimo
> 10000 record per anno , stavo pensando di separare il DB uno per ogni
> anno per semplificare la gestione dei dati vecchi
Questo dipende da cosa ci sar� negli archivi dei singoli anni.
Non si pu� dare un consiglio in un senso o nell'altro.
Io ho iniziato un progetto nel 1997 (peccato di giovent� :) ) dividendo
gli archivi per anni ed ora sto pensando di riunire tutti gli archivi in
un unico db. In tutti i progetti nuovi, memore dell'errore, parto sempre
con un unico db e divido gli anni all'interno del db segnando
l'appartenenza dei vari record all'anno (fatture, movimenti,
rottamazioni ecc...).
Per farti un esempio legato al progetto del 1997 io identifico ogni
materiale con un ID automatico generato da FB. Nei vari anni lo stesso
ID pu� fare riferimento a materiali diversi perch�, nel periodo di
passaggio, vengono creati nuovi materiali sia nell'anno precedente sia
in quello attuale. Il programma opera solo in un anno alla volta e
quindi non ci sono problemi ma � un problema al quale devo porre rimedio
per poter unire tutto insieme.
Tieni conto, poi, che se vuoi far usare pi� ambienti (come capiter�
senz'altro) dovrai memorizzare da qualche parte (TXT, INI, altro db,...)
i percorsi (o gli alias). Usando un solo db, invece, hai un unico
percorso (o alias) e puoi far gestire l'anno pi� semplicemente. Inoltre
fai il backup di un solo db.
Ok ho capito: � proprio quello che voglio fare anche io per il mio
programma in qt.
http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf
XE2....! :-D
Il primo step riguarda capire se vuoi mettere mano al portafogli o no.
Potendo spendere, scarterei SqlServer:
1) gira solo su winzozz
2) gira solo su versioni winzozz SERVER
Per la mode di dati che hai al momento, andare su oracle non esiste.
Da valutare sarebbero Sybase e Db2 che a partire dalla versione 9 ha
semplificato parecchio la parte di gestione e configurazione rendendo
automatiche parecchie cose. Cmq, per entrambi XE2 dovrebbe se non erro
includere i driver dbx.
Se non vuoi e/o puoi mettere mano alla tasca scarterei MySql per i
problemi legati alla licenza da te stesso citati.
Firebird e' un po che non lo uso.
Ultimamente un db che fa parlare parecchio di se e' postgres.
Ti suggerisco di fare un cfr tra i due prodotti.
Riguardo l'accesso ai dati, potendo scappare da ADO lo farei IERI.
Qua usiamo ADO su xp, seven, windows server, sia su 32 che 64 bit..
Non o dati oggettivi ma la sensazione e' che ogni tanto qualcosa vada
ai festini del nano di arcore.
Cmq, alle tue info mancano un pezzo.. Va bene 10.000 record, ma.....
1) per QUANTI UTENTI? 2, 10, 500...?
2) non e' che i 10.000 record arrivano tutti nell'arco di 2 minuti??
> 10000 record per anno , stavo pensando di separare il DB uno per ogni
> anno per semplificare la gestione dei dati vecchi
Esatto di Esa Software lavora(va) cosi'...
E puntualmente l'utente imprecava in quanto costretto a uscire-
rientrare-uscire-rientrare ogni volta che doveva consultare i dati
dell'anno precedente...
> in generale se ho capito bene dbexpress rende indipendenti dal DB ma
> richiede l'acquisto di una licenza più costosa di Delphi
Questa cosa e' vera in parte.
Se hai la stessa struttura di tabelle e stored procedure che hanno gli
stessi parametri anche se il codice sorgente e' diverso, SI.
Ma va detto che non tutti i db sono uguali...
Oracle, Db2 e Firebird hanno sequences/generators, ma SqlServer di
certo fino a qualche versione fa questa cosa non l'aveva...
Ergo, se hai una stored procedure su un db Oracle che usa una
sequence, per spostarla su SqlServer dovrai inventarti TU qualcosa per
calcolarti un ID...
Generalizzando, l'accesso ai dati e' solo un pezzo.
Anche la applicazione dovrebbe eve essere *pensata*, progettata e
scritta per essere indipendente dal db.
Questa cosa si chiama MDA (Model Driver Architecture).
A.
A.
--
Trasformare i sudditi in cittadini ᅵ miracolo che solo la scuola puᅵ
compiere. (Piero Calamandrei)
Per il tipo di applicazione che è stato indicato, ci si può stupire di qualsiasi database non venga citato, data la genericità della richiesta. :)
--
Marco Breveglieri
(http://www.marco.breveglieri.name)
Sono interessato a postgres: hai qualche link di
risorse/community/gruppi in italiano ?
Non ho link a risorse in italiano. In genere la documentazione e
qualche forum come stackoverflow ecc. mi sono sufficienti a risolvere i
problemi, ma sono in inglese.
Tu dici che non si possono escludere nemmeno dbIII, dbIV e FileMaker? :)
In realtᅵ mi riferivo in generale. Postgres ᅵ un db ignorato e non ne
comprendo francamente il motivo.
Lo uso da anni in applicazioni impegnative e ho avuto solo
soddisfazioni. L'unica cosa ᅵ che, con Delphi ho camprato il PgDAC
della Devart cosᅵ ci accedo direttamente.
So cosa sono le transazioni ma non ci ho mai avuto a che fare quindi
al momento ignoro tutte le fasi necessarie per far si che il db si
aggiorni dopo che l'utente ha convalidato un form e renda disponibile
il record anche agli altri utenti che , se ho capito bene , dovranno
cmq rieffettuare la query per vedere il record ? oppure , ad esempio,
alla pressione di un tasto o ogni x secondi l'altro client puo
controllare se il db è stato modificato e rifare da se la query
aggiornando il dbgrid ? (cosi attualmente lavoro)
Si parla di 10000 record x anno e fortunatamente non ho mai avuto
necessità di confronti con gli anni passati. Se l'utente ha necessità
entra nel vecchio archivio che semplicemente di chiama 200x.dat
potrebbe essere un vantaggio ma , anche uno svantaggio nel caso le
dimensioni del DB sono uniche e non archiviabili per anno mettendone a
parte "pezzi alla volta". Avendo un DB unico consente di effettuare
ricerche e confronti su tutti i record ma anche avere un db enorme e
che dovrebbe essere piu lento nelle ricerche immagino? !
normalmente ho 2 o 3 utenti che simultaneamente inseriscono record ma
parliamo di 1 record ogni 5/10 minuti piu varie funzioni di ricerca
sul db per duplicare record etc. Potrei arrivare ad un massimo di 10
client che fanno ricerche e inseriscono sempre 1 o 2 record ogni 5
minuti e quindi "quest'è"
altro parametro per me importante è la longevità. Ovvio che MS SQL non
morirà mai se non per il nome che ha e che varierà nel tempo ...... e
i suoi driver nativi e qui mi viente in mente Firebird e forse anche
Postregre ma ripeto non ho esperienze in merito
Parametro fondamentali sono la longevità+la possibilità di avere
facilmente su 5000 record una estrapolazione degli stessi in una
DBgrid che ad esempio si autoaggiorna sul pc-utente1 se qualcuno da
altra postazione aggiunge un record che rientra nella ricerca fatta
dall'utente pc-utente1. Se pc-utente1 duplica uno dei 5000 record
ritroverà automaticamente il nuovo record nella sua ricerca e puo
entrarci in modifica.
(considerando ovviamente la mia mole di dati e gli accessi simultanei)
Quello che mi preoccupa è che attualmente i moderni SQL hanno una
serie di funzioni che forse a me non servono (tipo gestione controllo
etc) e mi complicherebbero solo la vita nel caso di crash macchina che
danneggia il db o crash applicazione che danneggia sempre il db. Io ho
un "archivio pratiche" con 100 campi e faccio ricerche su 15 di questi
(campi numerici o testo da 35 caratteri max). Ognuna di queste
pratiche puo avere da 1 a 100 sottopratiche collegate alla pratica
madre.
> So cosa sono le transazioni ma non ci ho mai avuto a che fare quindi
> al momento ignoro tutte le fasi necessarie per far si che il db si
> aggiorni dopo che l'utente ha convalidato un form e renda disponibile
> il record anche agli altri utenti che , se ho capito bene , dovranno
> cmq rieffettuare la query per vedere il record ? oppure , ad esempio,
> alla pressione di un tasto o ogni x secondi l'altro client puo
> controllare se il db � stato modificato e rifare da se la query
> aggiornando il dbgrid ? (cosi attualmente lavoro)
Io ti parlo di FB.
Come avrai capito non serve un timer perch� � il motore stesso del db
che avvisa i client, tramite gli eventi, che � ora che aggiornino la
visualizzazione. Cosa aggiornare e come farlo �, ovviamente, compito del
programma. FB si limita a dire che bisogna farlo.
Ignoro se altri db abbiano meccanismi simili.
> Si parla di 10000 record x anno e fortunatamente non ho mai avuto
> necessit� di confronti con gli anni passati. Se l'utente ha necessit�
> entra nel vecchio archivio che semplicemente di chiama 200x.dat
> potrebbe essere un vantaggio ma , anche uno svantaggio nel caso le
> dimensioni del DB sono uniche e non archiviabili per anno mettendone a
> parte "pezzi alla volta". Avendo un DB unico consente di effettuare
> ricerche e confronti su tutti i record ma anche avere un db enorme e
> che dovrebbe essere piu lento nelle ricerche immagino? !
Dipende cosa intendi con "enorme".
Io gestisco un db con 200.000 record di materiali e con almeno un paio
di movimenti per materiale. E non � nemmeno uno dei pi� grandi.
Un db client/server serio � fatto apposta per gestire grandi quantit� di
dati. Dove "grandi" pu� anche arrivare, ed a volte arriva senza
problemi, alle sei cifre di record.
Il tuo compito � fare in modo, progettando accuratamente la struttura
del db, che le estrazioni dei dati siano le pi� rapide possibili. Gli
indici servono proprio a questo.
> altro parametro per me importante � la longevit�.
Longevit�... longevit�...
Allora vediamo:
- dBase (dbIII, dbIV e Clipper 1987-1997)
- Access (VB, Delphi 1994-2011 ebbene s�, lo ammetto, ho ancora qualcosa
in Access, ma sto cercando di smettere :) )
- DB2 (2001 un unico progetto)
- Paradox (brevissima parentesi tra Access e Firebird)
- MSSQL (2002 guardato e lasciato subito da parte a favore di Firebird)
- Firebird (2002-2011)
S�, il concetto di db � longevo. :)
Se trovi qualcosa di meglio � ovvio che porti i tuoi dati verso altri
lidi dove possono essere gestiti meglio, altrimenti saremmo ancora tutti
ai file di testo. :)
> Sono interessato a postgres: hai qualche link di
> risorse/community/gruppi in italiano ?
Qua trovi la mailing list: http://lists.psql.it/mailman/listinfo/postgresql-
it
Enrico
> Qua trovi la mailing list:
:/
http://lists.psql.it/mailman/listinfo/postgresql-it
Enrico
> - Un client installato su ogni PC che si connette (non è un "contro" ma
> è una necessità)
Uh? Non dovrebbe bastare fbclient.(dll|so) e amen?
Enrico
Sì.
L'ho messo nei "contro" perché, anche se è un solo file, è pur sempre
qualcosa da fornire che sul PC del client non è detto ci sia.
È qualcosa a cui pensare quando si crea l'installazione, insomma.
Quindi anzichè controllare con un timer , devo controllare un evento
usando un timing specifico
> Ignoro se altri db abbiano meccanismi simili.
da profano immagino proprio di si......
ho sentito parlare di FB come ottimo prodotto ma non credo abbia
caratteristiche "cosi' uniche"
a proposito ma è gratuito o a pagamento ?
se acquistassi ANYDAC riuscirei a "svincolarmi" dal DB nel caso un
domani volessi portare i dati su altra piattaforma ? (intesa come DB
non solo come S.O.)
> Il tuo compito fare in modo, progettando accuratamente la struttura
> del db, che le estrazioni dei dati siano le pi rapide possibili. Gli
> indici servono proprio a questo.
Infatti , ipotizzando 10000 record x anno e conservando sempre gli
ultimi 5 addietro , dovrei testare con qualche softwrae quanto tempo
impiegherei a visualizzare in una grid 1500 record selezionati a mezzo
indice
ma la dimensione del DB quindi x le prestazioni non conta ?
io attualmente oltre agli indici faccio delle ricerche sull'intero
record e qui mi sa che "mi faccio male" , dovendoli leggere uno ad uno
a proposito di dbgrid , avete qualche componente terzo da
consigliare ?
> - MSSQL (2002 guardato e lasciato subito da parte a favore di Firebird)
posso chiederti come mai ? che parametri di valutazione hai usato
Infatti
sempre perchè sono completamente allo scuro volevo chiedere :
per utilizzare un DB
bisogna :
1) installare il motore del DB su un server e accerdervi tramite IP
(l'ho visto fare 1 volta con MSSQL)
2) installare il motore in locale nel caso di installazione su singola
postazione ?
3) installare eventuale client oppure DLL come per FB per dialogare
via ANYDAC con il client del DB
giusto ?
Ma il DB come si crea la prima volta ? ci sono tool stesso del DB che
consentono la creazione la prima volta ?
se in futuro c'è bisogno di aggiungere campi al record bisogna
progettare routines ad hoc oppure ci sono funzionalità apposte già nel
motore ?
tra l'altro mi chiedevo, se ho 6 postazioni nel caso di MSSQL EXPRESS
posso cmq utilizzare ma non accedere contemporaneamente in 6 al DB
immagino
ma ......se volessi acquistare una licenza del DB per max 10 utenti
qualcuno puo dirmi quanto potrebbe costare ?
Non accedi al motore, ma al db che � gestito dal motore.
La parte riguardante l'IP � corretta. Quindi � ovvio che l'IP del PC su
cui installi il motore del db deve essere fisso.
> 2) installare il motore in locale nel caso di installazione su singola
> postazione ?
Sul PC che deve connettersi installi la parte client del motore, quella
che colloquia col server. Non devi installare tutto il motore del db.
> Ma il DB come si crea la prima volta ? ci sono tool stesso del DB che
> consentono la creazione la prima volta ?
Io uso FlameRobin che consente una gestione sufficientemente rapida e
semplice, ma non � l'unico attrezzo disponibile.
> se in futuro c'� bisogno di aggiungere campi al record bisogna
> progettare routines ad hoc oppure ci sono funzionalit� apposte gi� nel
> motore ?
Io faccio tutto a livello di codice anche perch� non ho accesso fisico
al server.
In una try...except controllo che il campo che devo creare esista gi�,
se cos� non � lo creo tramite ALTER TABLE...
Se devo creare una tabella nuova controllo, tramite un TIBDatabaseInfo,
che esista un unico utente connesso e se � cos� creo la tabella sempre
tramite SQL, altrimenti esco dal programma e dico all'utente di far
sconnettere gli altri.
La "funzionalit� apposte gi� nel motore" si chiama SQL
(http://en.wikipedia.org/wiki/SQL) che � standard... quasi. :)
Ti vengono proposti almeno due db gratuiti (FB e PostgreSQL) e vuoi
usare SQLServer? Auguri. :)
> tra l'altro mi chiedevo, se ho 6 postazioni nel caso di MSSQL EXPRESS
> posso cmq utilizzare ma non accedere contemporaneamente in 6 al DB
> immagino
Da http://en.wikipedia.org/wiki/SQL_Server_Express
- 1 GB of RAM (runs on a system with any RAM amount, but uses only at
most 1 GB)
> ma ......se volessi acquistare una licenza del DB per max 10 utenti
> qualcuno puo dirmi quanto potrebbe costare ?
Qui passo. Le licenze MS sono diventate esame obbligatorio nei master di
enigmistica avanzata. :)
...un rivenditore...?
> Quindi anzich� controllare con un timer , devo controllare un evento
> usando un timing specifico
No.
Il componente TIBEvents ha un metodo OnEventAlert in cui uno dei
parametri � il nome dell'evento ricevuto. A seconda del nome dell'evento
ricevuto dal motore db ti comporti di conseguenza.
Esempio:
- Nel db FB definisci che ad ogni nuovo INSERT nella tabella CLIENTI
parte un evento NEW_CLIENTE
- Al componente di tipo TIBEvents nel data module nel progetto Delphi
arriver� NEW_CLIENTE
- Nell'evento OnEventAlter del componente di tipo TIBEvents scriverai il
codice che deve essere eseguito ad ogni inserimento di un nuovo cliente.
� FB che ti dice che devi fare qualcosa, non sei tu che ogni tot
millisecondi vai a fare dei controlli, magari inutili.
> a proposito ma � gratuito o a pagamento ?
Gratuito e gratuito per davvero.
> Infatti , ipotizzando 10000 record x anno e conservando sempre gli
> ultimi 5 addietro , dovrei testare con qualche softwrae quanto tempo
> impiegherei a visualizzare in una grid 1500 record selezionati a mezzo
> indice
> ma la dimensione del DB quindi x le prestazioni non conta ?
Conta, eccome.
Cos� come conta anche ci� che il tuo cliente ci metter� dentro.
A me � capitato di veder saturare un file FileMaker, non progettato da
me, perch� chi lo usava ci metteva dentro le foto degli oggetti da
inventariare prese direttamente dalla altorisoluzionatissima fotocamera
senza passarle per nessun altro software che le potesse ridurre di
dimensione. Dopo 200 record FileMaker ha alzato bandiera bianca.
Tieni conto, per�, che se non devi gestire Blob, 10.000 record di solo
testo/numeri/date sono poca roba per un db serio come quelli che ti sono
stati consigliati. Persino il buon vecchio dBIII ce la farebbe. :)
> io attualmente oltre agli indici faccio delle ricerche sull'intero
> record e qui mi sa che "mi faccio male" , dovendoli leggere uno ad uno
Non capisco cosa intendi con "ricerche sull'intero record".
Fai fare al cliente un filtro tipo il filtro in base a maschera di Access?
> a proposito di dbgrid , avete qualche componente terzo da
> consigliare ?
Se vuoi restare sul gratis ti consiglio la TJVDBGrid. A pagamento ce ne
sono altre che, per�, non conosco.
>> - MSSQL (2002 guardato e lasciato subito da parte a favore di Firebird)
>
> posso chiederti come mai ? che parametri di valutazione hai usato
Prezzo ed elefantiasi del motore.
La versione pi� economica che vedo nel listino ms segna 1.221,95 al
netto di iva.
Effettivamente come gi� fatto notare da Warp10 il licensing MS � un
rebus quindi non vado oltre, prendila come un cut&paste.
Segui i consigli che ti hanno gi� dato su FB/Postgresql che � meglio e
non solo per il prezzo.
--
Design for the future, because it will be here sooner than you think.
(C) Eric S. Raymond, from "The Art of Unix Programming"
> Uso Delphi XE, il componente TIBEvent credo usasse un timer per verificare
> le variazioni del db.
TIBEvents e scrivi del codice per gestire l'evento nell'OnEventAlert
Esempio:
if (eventname = 'new_prenotazione') or (eventname = 'del_prenotazione') then
begin
main.tbaggiornaClick(sender);
end;
> Quanta gente nuova che scrive in questo post.....
Se ti riferisci a me ho perso l'attributo di "nuovo" da... oh... da
prima che tu nascessi. :)