Newsgroup: it.comp.lang.visual-basic
Titolo: MySQL vs Access

Non è proprio una sfida....
La mia applicazione (che funzia con db access 2000) deve finire per 
funzionare in rete.
Ora come ora la cosa è mezza fattibile, perchè nelle opzioni si può 
scegliere il percorso di rete (o locale) su cui si trova il db.
Il problema è che per fare certe stampe, faccio largo uso di tabelle 
temporanee creat e distrutte in runtime, e questo allarga le dimensioni 
del database.
Finchè ero solo io a usare il software per le stampe, le importazioni di 
lunghi elenchi di contratti e altro, allora no problem... ogni tanto una 
bella compattazione/ripristino del database la facevo da access.
Potrei anche implementare la funzione nel mio software, ma non posso 
sapere a priori quando questa funzione è libera di essere chiamata 
perchè potrebbero esserci altri utenti collegati al db... nè posso stare 
io a compattarlo manualmente a fine serata...
Detto tutto ciò, e premesso che ne ho sentite parecchie in giro su DB 
Access che si sono imputtanati negli indici e via discorrendo, chiedo: 
quanto mi conviene apportare le modifiche al mio sotware (questione di 
query) per adattarlo ad un MySQL?
Cioè... so che in prestazioni MySQL è superiore ad Access, e quindi do 
per scontato questo punto a suo favore; per il resto (crescita del db e 
quel pensiero fisso della compattazione quando si gestiscono grosse 
quantità di dati che poi vengono buttate via) mi conviene proprio 
passare a MySQL o si può ancora ancora usare una "pezza a colori" (v. 
toppa)?
Tenete presente che nel db ci finiscono al mese 1700 record di contratti 
e un 70.000 record di telefonate, e questi record vengono cancellati 
ogni 3-4 mesi... quindi immaginate che bel viavai di record...
Attendo ansioso!!!
-- 
Quando noi ignoranti eravamo di più,
tutto era più bello...
(Adriano Celentano)

 del database.
<quoting>
che tipo di report usi? prendi in considerazione, a mio modo di vedere 
due piste:
1) recordset disconnessi: sono dei recordset che in realtà non si 
appoggiano su nessun db fisico, ma solo nella ram del pc che li sta 
generando...assicurati prima però che i report che usi possano avere come 
datasource un recordset di questo tipo (datareport sì, altri non so)
2) usi un db server mysql per i dati, e un altro db su ciascun client che 
crei di volta in volta per le stampe...
good coding!!!
--
Alletun
"Se ti va di spassartela adesso
Prendi il Vettore oggi stesso."
Terre Desolate - Stephen King
Inviato da 
www.mynewsgate.net

 good coding!!!
saluti
--
[CapoBecchino]
www [dot] boundlessminds [dot] it
Da Barzellette.it:
 In una lapide di un cimitero c'è questo epitaffio:
"Qui riposa, per la seconda volta, Ernesto Rossi.
Una prece."
Un tizio, incuriosito, chiede informazioni al
necroforo che, fra l'altro, conosceva il defunto e
così gli risponde:
- Vede signore, il defunto Rossi in vita lavorava
in Comune...
Inviato da 
www.mynewsgate.net

Io non uso nessun programma per i report.
Mi creo uno schema in HTML (tabella con una sola riga) e poi in runtime 
gestisco quello schema per generare la tabella finale.
Il tutto poi lo visualizzo su un form col browser integrato.
Le tabelle le creo in runtime nello stesso DB in cui faccio il resto.
Vada anche per usare un db stand-alone su ogni macchina che richiede le 
stampe, ma... MySQL permette di selezionare dei dati e sbatterli in un 
db access? Ammesso che lo faccia, per rendere visibile quel db access 
dovrei condividere la cartella dell'utente in modo da renderla visibile 
al pc su cui risiede mysql. E se poi l'utente non la condivide più (ci 
mette mani....)?
Per evitare tutto questo creo tabelle in runtime che "droppo" a fine 
calcoli.
Per il discorso dei recordset disconnessi... non ricordo più.... com'è 
che si crea una tabella in un db che non esiste?


 
Scusa a questo punto allora visto che hai la possibilità di poter creare
qualcosa anche sulla macchina client ma hai la NECESSITA' che questo qualcosa
debba essere cancellato dopo i calcoli e che non interferisca con utonti vari
. davvero prendi in considerazione un file xml .. ti semplificheresti la vita
:) ed avresti gia i dati pronti .. 
Salutoni


Io sviluppo in VB6.
In che consiste l'utilizzo di codesti file XML?
Con cosa li creo?
Con che li visualizzo?
Li vedo dappertutto ma non so proprio come vengano 
creati/gestiti/visualizzati...
Attendo sbavante :D


 Attendo sbavante :D
Saluti


 Con che li visualizzo?
allora, parti un po' alla lontana, ma vediamo di essere concisi...
un file xml è un file di testo (di fatto lo puoi creare anche on Open #1 e 
Close #1, per dire), ma essendo gerarchico, è più comodo usare MSXML, che è un 
motore di parser creato appositamente per, appunto XML. Cerca qualcosa su msdn 
per maggiori dettagli.
Supponendo che tu sia riuscito a creare un xml contenente i dati che vuoi 
mandare in stampa, basta che alla fine crei un file xsl (che non è excel), che 
non fa altro che "tradurre" il tuo xml in html, impaginato come vuoi.
sul web ci sono un sacco di tool/utility che ti aiuteranno, gratuiti e non.


 soluzione alternativa senza immetterti in una cosa che non conosci .. :)
Allora, stando ai vostri suggerimenti io potrei benissimo non utilizzare 
il mio file .mdb per le tabelle temporanee, ma dei file xml direttamente 
dai client. Così li cancello dopo averli usati senza dover creare 
tabelle temporanee nel database.
Questo è quello che mi avete suggerito.
La mia situazione è questa: devo fare delle stampe, uso un file html 
progettato da me con FrontPage e che altro non è se non uno schema 
bell'e pronto da leggere in runtime, riempire con i valori ottenuti 
dalle query, visualizzarlo su un browser e basta.
Il problema (da me parzialmente risolto) è che a volte non ottengo tutti 
i risultati desiderati facendo un'unica grossa intrecciata query.
A volte devo fare un CREATE TABLE TempXXXX con i campi che mi servono, 
sbatterci dentro di volta in volta i risultati che ottengo dalle query, 
fare un'update con left join fra questa TempXXXX e un'eventuale TempYYYY 
ottenuta da un'altra query temporanea ecc. ecc.
Quindi alla fine ottengo la prima tabella riempita coi valori utili fra 
insert into e update e le altre inutili da cancellare.
Dopo aver scandito l'intera tabella TempXXXX e riempito il file html, 
visualizzo il tutto sul browser integrato et-voilà!!! E cancello tutte 
le Temp che ho creato.
Ora che mi dici? :D


[MEGACUT]
Scusa ma da quello che ho capito la tua struttura dovrebbe essere pressapoco cosi :)
DATA BASE 
-> TABELLA ORIGINE
Su questa tabella tu fai i tuoi calcoli e le tue query e tiri fuori dei dati che
li immetti in una tabella temporanea ed avrai:
DATA BASE
-> TABELLA ORIGINE
-> TABELLA TEMPORANEA
Alla fine dei tuoi calcoli te metti la tabella temporanea nel file HTML creato
da te e la cancelli per riavere di nuovo 
DATA BASE 
-> TABELLA ORIGINE
.............
Ma scusa a te servono i dati incolonnati allora esegui questi passaggi senza
tabelle temporanee di sorta 
1) Scrivi l'intestazione del tuo file HTML fino alla gestione per l'apertura
della tabella da visualizzare
2) Recuperi dalla base dati tutti i dati che ti servono ma a questo punto invece
di risalvarli in una tabella temporanea li accodi al file che hai creato 
3) Scrivi la parte finale del file includendo la chiusura della tabella ed il
gioco è fatto...
Esempio:
DATA BASE 
-> TABELLA 1 [NOME, COGNOME]
-> TABELLA 2 [NOME, COGNOME]
-> TABELLA 3 [NOME, COGNOME]
1) scrivo nel file 
-> <table><tr><td>NOME</td><td>COGNOME</td></tr>
2) eseguo le mie query e accodo al file (select di nome e cognome su tutte le
tabelle) 
-><tr><td>[stampo il nome]</td><td>[stampo il cognome]</td></tr>
3) chiudo la tabella, il file e la connessione 
-> </table>
. 
spero di esserti stato d'aiuto .. 


chiedo venia x l'italiano ma ho un mal di testa fotonico e solo ora rileggendo
mi sono accorto di alcuni errori che saranno pane per i puristi della lingua :)
Salutoni


Scuse accettate per l'italiano, ma ti dò una brutta notizia: la 
conclusione a cui sei giunto è proprio quella che adotto io :) :) :)
Io creo un file HTML che è uno schema:
<html>
<body>
....
<center>Stampa delle ore lavorative
<table ....>
<td><tr>Cognome</tr><tr>Ore lavorative</tr></td>
[riga]
<td><tr>[COGNOME]</tr><tr>[ORE]</tr></td>
[/riga]
</table>
</center>
</html>
Io all'inizio della stampa apro questo file html, leggo finchè non trovo 
[riga]. Fino a quel momento accodo tutto a una variabile stringa 
chiamata DataHeader.
Quando trovo [riga] vuol dire che i dati che seguono sono il "corpo" 
della tabella (lo schema di caratteri/colori della riga della tabella) e 
quindi metto tutto in DataRiga, finchè non trovo [/riga]
Allora si tratta della chiusura del file html, e accodo tutto a DataEnd.
Quindi:
Dim DataHeader as String, DataRiga as String, DataEnd as String
quando ho letto tutto 'sto schemino html, comincio a scansionare 
l'intera tabella temporanea che ho aperto facendo una o più query ai 
dati che ho nel db.
Faccio qualcosa del tipo
Open "Temp.htm" For output as #1
Print #1, DataHeader
RS.Open "SELECT....", Connessione, ..., ...
While Not RS.EOF
     Riga = Replace$(DataRiga, "[COGNOME]", RS!Cognome)
     Riga = Replace$(Riga, "[ORE]", RS!SommaOre)
     RS.MoveNext
Wend
RS.Close
Print #1, DataEnd
Close #1
MioBrowser.Navigate "Temp.htm"
Quindi faccio proprio questo.
Ora mi spiegate a cosa possono servirmi questi file XML?
O come posso fare a usare 'sti recordset disconnessi senza dover ogni 
volta creare ste tabelle temporanee nel db?
E (domanda di inziio thread) per evitare questo pericolo di Access di 
imputtanare tabelle man mano che crescono di dimensione, mi conviene 
passare al mio amato MySQL (vedi i problemi che ho spiegato a inizio 
thread per l'uso di Compatta/ripristina)...
Attendo ancora ansioso...


 </html>
cioè se ho capito giusto tu riempi questa tabella temporanea con i dati
provenienti da varie tabelle vero o falso??
quindi a questo punto il passo è facile invece di metterle nella tabella temp le
accodi al file che stai creando .. è facile .. :) ma forse sono io che non
riesco a farmi capire .. sorry .. :(
in definitiva .. anche io uso MySql con vb .. è mi trovo un amore :D
Ciao ciao 
ps. domani dalle 9 sarò a tua disposizione ora x entrambi è ora del meritato
riposo ..
saluti


 riposo ..
Ok attendo domattina per una tua risposta :)
-- 
Quando noi ignoranti eravamo di più,
tutto era più bello...
(A. Celentano)

[megacut]
Ora rileggendo la tua risposta ho capito quello che volevi :) ieri ero davvero
fuori fase :) sorry ...
Allora in definitiva ti sei risposto da solo visto che vuoi usare MySql quindi
problemi non ne hai :)
Per quanto riguarda i dataset disconnessi, se usi .Net so darti una risposta in
vb6 non li ho mai usati e non so se esistano (scusa l'ignoranza). In sostanza
sono dei piccoli DB relazionali che possono accettare dati da varie sorgenti,
quindi in questo caso dal tuo file access. Una volta popolati li usi proprio
come se fossero dei DB con query ed inserimenti vari senza preoccuparti della
base dati che li contengano in quanto si trovano in memoria del client :) quindi
da qui disconnessi da qualunque base dati .. una volta che hai elaborato tutti i
dati esegui le operazioni che ti interessa, che di solito si traduce in
inserimento o modifica dei dati che tu hai prelevato dalla base dati mentre nel
tuo caso si tratta solo di stampare e poi distruggere il dataset :)
Il file XML è un file di testo (come gia ti è stato detto) ma organizza i dati
al suo interno in modo ordinato. Quindi avrai nel tuo esempio:
TIZIO 
--ORE LAVORATIVE
CAIO
--ORE LAVORATIVE
e cosi via. I dati posso essere aggiornati proprio come se fosse un db, l'unica
cosa che il file deve essere presente fisicamente ( a differenza dei dataset
disconnessi che sono solo in memoria)
Spero di esserto stato d'aiuto .. 
Ciao e fammi sapere come va :
Salutoni


Si effettivamente ieri abbiamo girato intorno all'argomento parlando 
però di un problema che non mi ero posto :)
Cmq sono passato (sto passando piano piano) a MySQL.
Sto cioè convertendo il software in modo che possa usare quest'ultimo 
piuttosto che Access.
Ovviamente sto sviluppando parallelamente, nel senso che continuerà ad 
esistere sia il progetto che usa Access che quello che usa MySQL (due 
progetti diversi).
Purtroppo questa cosa devo farla per forza, perchè non posso usare MySQL 
4.0 in quanto non prevede determinate funzioni per il calcolo di 
differenza tra ore (ce ne sono pochissime) nè sub-query e tabelle derivate.
MySQL 4.1.x possiede queste migliorie ma mi è giunta voce che dia 
problemi con i dati nel senso che a volte si imputtana tutto, essendo 
una versione alfa (è capitato al sys-admin amico di un ragazzo che 
conosco e che gestisce un sito, ed è dovuto tornare alla 4.0).
Non so (e spero di no) se questa cosa sia vera, ma nel dubbio farò 
lavorare tutti qui in ufficio ancora con la versione per Access e io 
testerò pesantemente gli inserimenti/cancellazioni di grosse q.tà di 
dati col programma MySQL per vedere se (e quando) i dati si incasinano.
Cmq grazie di tutto!!!
A buon rendere a tutti coloro che mi hanno risposto!
-- 
Quando noi ignoranti eravamo di più,
tutto era più bello...
(Adriano Celentano)