Newsgroup: it.comp.appl.access
Titolo: Access e Mysql

buongiorno a tutti 
 
Vorrei convertire il file tabelle in formato Mysql a tal proposito ho trovato un tools ufficiale sul sito mysql di nome "MySQL Migration Toolkit" a quanto pare "se ho capito bene" questo tool riceve in ingresso un file di tabelle acces e restituisce un file .sql
 
a questo punto mi domando:
 
1. una volta ottenuto il file .sql che suppongo sia il file delle stesse tabelle access convertite in formato mysql, dove metto quel file? posso installare xampp e mettere quel file in una cartella dedicata in xampp?
 
2. in che modo collego le tabelle di mysql al client che prima aveva collegate le tabelle del file formato access? forse usando ODBC qualcuno sa delucidarmi sulla procedura?
 
3.
facendo questa abbinata Clent Access + Mysql tabelle ottengo una vera e propria 
applicazione client server con tutti i benefici in termini di prestazioni anche se il numero di utenti e di record aumenta notevolmente?
 
4. effetti indesiderati di cui avete avuto esperienza facendo client access e tabelle mysql?
 
grazie a tutti.

Xché MySql invece di SQL server express?

 Xché MySql invece di SQL server express?
 
in effetti Roberto non hai tutti i torti ma non so da che parte partire ne in un caso ne nell'altro, esiste una guida passo passo per chi sa zero per fare upgrade delle tabelle access in Sq Server? ma a quel punto mi sorgono alcune domande banali per alcuni di voi
 
che tipo di file ottengo quando è convertito il file iniziare di access delle sole tabelle? il file tabelle.accdb diventa che cosa?
 
in che cartella devo metterlo questo file convertito sul server?
 
cosa devo installare sul server per mettere a disposizione dei client questo file tabelle Sql server?
 
se volessi fare un backup giornaliero del file tabelle formato sql server presente sul server che file devo salvare?
 
il cliente sviluppato in access 2016 come lo collego alle tabelle presenti nel file formato sql server? tramite ODBC? guadagno in affidabilità e perdo in prestazioni?
 
Il codice vba e le query che ho sviluppato nel cliente rimarranno invariati o devo prepararmi a varie modifiche nel client a causa del nuovo formato sql server delle tabelle?
 
qualcuno di voi a fatto le 2 conversioni? 
1 client access e tabelle mysql 
2 client access e tabelle sql server? 
quale delle 2 è la migliore? pregi? difetti?
 
grazie a tutti.
 
 


ho provato a scaricare la versione 2017 di sql server express 
file SQLServer2017-SSEI-Expr.exe 
l'ho eseguito e installato la versione standard senza modificare nulla.
 
alla fine ottengo il messaggio: 
Errore
Non è possibile installare SQL server (setup.exe)
Exit Code (decimal): -2068052378Error description: L'installazione di VS Shell non è riuscita con codice di uscita 1638
 
(cominciamo bene! dico io! )


Questo vecchio tutorial, seppur non specifico per MySQL, dovrebbe chiarirti le idee sulla connettività ODBC:
 
http://mirror.masterdrive.it/alessandrobaraldi/DettaglioFaq.asp%3FIdFAQ=281.html
 
 
Saluti


sono riuscito a installare sql server express 2012 ora devo aprire il file tabelle access da access e convertirlo in qualche modo in formato sql server
 
oppure 
 
devo aprire sql server management e importare il file tabelle access direttamente da li?
 
grazie a tutti.

grazie a tutti.
 
Ciao, ho realizzato un software Access + MySQL che gestisce 5.000.000 di 
record, con query che forniscono risultati in mezzo secondo.
Se cerchi tra gli archivi messaggi di questo newsgroup (es. tramite Google 
Gruppi) trovi varie indicazioni.
Ho utilizzato il Migration Toolkit per trasferire l'intero database Access 
in MySQL. Tale software è fermo come sviluppo ma è perfettamente funzionante 
e le nuove versioni dei workbench le ritengo non tanto flessibili quanto il 
toolkit nel portare i db Access in MySQL.
Recentemente ho effettuato l'operazione Access a SQL Server, però il driver 
riconosce il formato mdb, quindi prima salva da accdb a mdb.
Dopodiché in SQL Server Management Studio c'è la procedura wizard che ti 
segue passo passo. 
 


grazie infinite, puoi indicarmi qui il post in cui spieghi la procedura con mysql?


Non ho mai compreso bene se MySql si possa utilizzare gratuitamente in 
applicazioni commerciali oppure bisogna cacciare il grano
Vedo che l'hai usato in passato, quindi sicuramente ne sai piu' di me
Puoi dirci qualcosa a riguardo?
 

 con mysql?
 
Dunque, ho recuperato il post e cerco di integrare con altre informazioni 
piu tecniche.
L'argomento richiederebbe la stesura di un articolo che vi prometto di 
scrivere quando ho tempo.
 
Ho realizzato un software Access + MySQL che gestisce 5.000.000 di record, 
con query che forniscono risultati in mezzo secondo.
L'installazione del DBMS "MySQL Community Edition" richiede un capitolo 
parte: da quando è passato sotto Oracle, sono stati messi alcuni vincoli 
soprattutto sull'utilizzo dell'utente root.
Anche riguardo l'installazione dei driver ODBC non mi soffermo in quanto 
l'operazione è banale:
https://downloads.mysql.com/archives/c-odbc/
 
Assumo che entrambi i suddetti sistemi siano installati sotto ambiente 
Windows client o server.
 
Ho utilizzato il Migration Toolkit per trasferire l'intero database Access 
in MySQL.
Lo sviluppo di tale software è fermo ma è perfettamente funzionante, e le 
nuove versioni dei Workbench non le ritengo tanto flessibili quanto il 
Toolkit.
Utilizzo la vecchia versione di Migration Toolkit (v.1.0.25):
https://downloads.mysql.com/archives/migration/
 
che richiede un Java Runtime Environment installato, nel caso l'ultima 
versione del JRE non fosse riconosciuta installatene una piu vecchia 
(v.1.4.2 o 5.0) e mantenetele entrambe.
Senza il Migration Toolkit è necessario ricorrere all'opzione "Migration 
Wizard" disponibile su Workbench:
https://downloads.mysql.com/archives/workbench/
 
ma richiede *obbligatoriamente* la definizione di una connessione tramite 
driver ODBC per connettersi ad Access. Poco male, ma macchinoso e quindi da 
evitare, preferendo l'utilizzo di Migration Toolkit.
 
Ora racconto come ho realizzato il documentale.
La mole di documenti da indicizzare ha le dimensioni nell'ordine dei 10 TB, 
che comprende tutte le tipologie di file dalle foto, agli office, PDF, ecc.,
Non potendo costringere centinaia di dipendenti a catalogare i documenti con 
una codifica dei nomi file decisa a priori e condivisa, oppure specificando 
delle classi di appartenenza dei file, ho dovuto agire con una logica lato 
server:  ogni utente/ufficio è libero di memorizzare i propri file come e 
dove vuole, e con libera scelta del nomefile.
Ogni notte parte un batch schedulato dalla funzionalità di Windows "Utilita 
di pianificazione" (che ho scartato in quanto non mi ha soddisfatto) oppure 
da utility di terze parti come questa:
https://www.splinterware.com/products/scheduler.html
 
Il batch fa delle semplici DIR nelle cartelle di rete da indicizzare, il 
quale produce dei file txt costituiti da elenchi di percorsi\nomefile.ext:
chcp 65001
dir "F:\File_in_Rete" /b /s > Documenti.txt
 
Quindi i path\nomefile.txt vengono caricati riga per riga in una tabella 
MySQL "documento" tramite il comando MySQL:
DELETE FROM database.documento;
LOAD DATA LOCAL INFILE 'D:/DOCUMENTI.txt' INTO TABLE database.documento 
FIELDS ESCAPED BY '';
 
Questi comandi memorizzati in un file .sql e schedulati per essere lanciati 
da riga di comando MySQL.
Ovviamente le due operazioni vengono schedulate con margine di tempo 
congruo, in altre parole, la DIR parte alle 21.00 mentre la SQL parte alle 
4.00 per permettere che tutti i dati vengano completamente letti, caricati e 
processati prima dell'inizio della giornata lavorativa.
 
Una volta alimentata la tabella, i record "percorsi\nomefile.ext" vengono 
processati per isolare i singoli termini, i quali serviranno come keywords 
per le ricerche su clausole Where. A tal proposito, un campo chiamato 
Keywords è stato creato per contenere tali parole e su questo campo verranno 
effettuate le query dal client Access.
La query (schedulata) di creazione parole chiave funziona circa cosi:
UPDATE database.documento
SET documento.Keywords = replace( replace ( ...
replace(PathFile,'\\',' '),':',' ') ... )
 
In conclusione ottengo la seguente tabella MySQL alimentata ogni notte in 
automatico (su un server virtualizzato, quindi sempre acceso):
documento(Keywords,PathFile)
 
Passiamo ora al client Access.
Effettuare delle ricerche con termini liberi su 5.000.000 di record 
utilizzando JET di Access produce risposte in 30 secondi... troppo!
La soluzione è stata trovata in questo modo:
- utilizzo le query Pass-Through di Access: di fatto utilizzo il server 
MySQL per eseguire le query;
- il campo Keywords è di tipo FULLTEXT;
- utilizzo la clausola di MySQL "MATCH ... AGAINST" (n.b.: esiste un'analoga 
per SQL Server);
- collego la tabella "documento" ad Access tramite collegamento ODBC di 
MySQL;
- definisco in Access una maschera master non associata chiamata 
"fDocumento", che conterrà il campo testuale "Ricerca" e il pulsante 
cmdRicerca (che chiama una sub "Cerca" per poter essere riutilizzata), e 
dentro di essa una sottomaschera "fDocumentoSub" con i campi della tabella 
collegata "documento", a cui verrà associato il recordset restituito dalla 
query Pass-Through;
- la ricerca avviene con il codice seguente (all'incirca):
 
Dim strRicerca as String
 
Private Sub Cerca()
On Error GoTo Err_Cerca
Dim db As dao.Database
Dim qdf As dao.QueryDef
Dim rst As dao.Recordset
Dim Ricerca1 As String
 
' Preparazione della stringa di ricerca
strRicerca = RicercaStringa(Trim(Nz(Me.Ricerca.Value, "")))
 
....
Set db = CurrentDb
Set qdf = db.CreateQueryDef("")
qdf.Connect = 
"ODBC;DSN=MyBGV;SERVER=<ip>;UID=<username>;PWD=<password>;DATABASE=<database>;PORT=3306;;DFLT_BIGINT_BIND_STR=1;TABLE=documento"
 
qdf.SQL = "SELECT documento.pathfile,documento.pagina FROM 
database.documento" _
& " WHERE MATCH(keywords) AGAINST ('" & strRicerca & "*' IN BOOLEAN MODE)"
 
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset
Set Me!fDocumentoSub.Form.Recordset = rst
 
Exit_Cerca:
Exit Sub
 
Err_Cerca:
' Response = MsgBox("fDocumento - Sub Cerca - " & Err.Description, 
vbCritical, "Errore")
Resume Exit_Cerca
End Sub
 
La sottomaschera fDocumentoSub mostrerà i dati restituiti da MySQL.
Poi con doppio click sul record visualizzato si può programmare l'apertura 
del file grazie alle associazioni con le app correnti di Windows.
 
Al momento dell'interrogazione lato client, la sicurezza dell'accesso ai 
file viene garantita dalle policy di Active Directory, cioè se un utente non 
è autorizzato ad accedere ad una  cartella, i file non possono essere 
aperti; comunque agendo sul nome utente + autorizzazioni è possibile 
programmare la sicurezza anche da Access, questo anche per nascondere i 
percorsi path\nomefile.ext che l'utente specifico non deve neanche leggere.
Infine il sistema è interrogabile con macro da altri programmi office oppure 
con vbscript, con possibilità quindi di agganciare il sistema ad altri 
software, per esempio al gestionale. A tal proposito, ecco alcuni pezzi di 
codice che richiamano il client Access con un dato di filtro:
 
VBScript
...
Servizio = "fDocumento"
Filtro = .......
SQL = "INSERT INTO Filtro(Filtro01) VALUES ('" & Filtro & "')"
Set objConn = CreateObject("ADODB.Connection")
objConn.open Connessione
Set rs = objConn.execute("DELETE * FROM Filtro")
Set rs = objConn.execute(SQL)
set oWsh = CreateObject ("Wscript.Shell")
oWsh.run """" & "C:\Program Files\Microsoft Office\Office14\MSACCESS" & """" 
& Sistema & " /x Avvio /cmd " & """" & Servizio & """"
 
VBA
Outlook che lancia il client Access e restituisce il percorso\file con 
parola chiave una stringa selezionata con doppio click del mouse sul testo 
di una email:
...
Case Else:
Sistema = SistemaMain
Servizio = "fDocumento"
Filtro = SelezioneLeggi
SQL = "INSERT INTO Filtro(Filtro01) VALUES ('" & RicercaStringa(Filtro) & 
"')"
End Select
 
Dim db As DAO.Database
Set db = DAO.OpenDatabase(Sistema)
db.Execute "DELETE * FROM Filtro"
db.Execute SQL
db.Close
 
Dim Retval As Variant
Retval = Shell("""" & Connessione & """" & " " & """" & Sistema & """" & " 
/x Avvio /cmd " & """" & Servizio & """", vbNormalFocus)