La clonazione di un database di un'applicazione PHP / MySQL (w / qualche automatismo) in MS Access o OpenOffice.org Base

StackOverflow https://stackoverflow.com/questions/4824078

Domanda

Non ero sicuro se chiedere questo qui o sulla SuperUser, quindi mi scuso se non appartiene qui.

Ho creato un piccolo PHP / MySQL database di app per gestire i dati di fidelizzazione della clientela per il negozio di mia madre, con l'intenzione di configurarlo in locale sul suo computer registratore di cassa con XAMPP. Tuttavia, mi è stato chiesto di reimplementare il sistema in un database relazionale GUI come MS Access o OpenOffice Base, in primo luogo in modo che possa fare cose come la stampa unione e report grafici con una GUI (che io non devo scrivere) .

Posso facilmente replicare la mia struttura della tabella di MySQL e le relazioni, e di creare alcune delle forme più basilari e rapporti, ma non ho mai fatto alcun script, macro ecc in Access o Base. Il mio PHP ha gestito molto di più di un semplice modulo di input, c'era un po 'di scripting coinvolto che non so come implementare in Access / Base. Da segnalare:. Se finisco con Access, sarà Access 2007

Ecco una rapida panoramica di quello che sto cercando di fare, in caso aiuta. Scusate per la lunghezza.

Il business è un mercato del cibo take & cuocere, e il database sta sostituendo un sistema di fidelizzazione timbro-carta fisica. Ogni cliente riceve un timbro sulla loro carta per ogni $ 25 E spendono. Guadagnano pasti gratuiti come segue:
- L'8 timbro, che guadagnano un contorno libera il trasferimento. - Il 16 timbro, che guadagnano un pasto gratuito dimensioni regolari
. - Sul francobollo 24, che guadagnano un pasto gratuito dimensione della famiglia, e il loro ripristina carta a zero francobolli
. deve essere registrato alla data di ogni francobollo (altrimenti sarei campo un solo incremento invece di avere un tavolo francobolli).

Ho 3 tabelle: customers, stamps e freebies. customers ha un rapporto 1-a-molti sia con stamps e freebies.

  • customers è un elenco di contatti semplice.
    colonne: ID, firstname, lastname, email, phone
  • stamps tiene traccia di ogni francobollo guadagnato.
    colonne: ID, customerID, date, index (1-24; il timbro ennesimo sulla carta che del cliente)
  • freebies tiene traccia di ogni pasto gratuito che hanno guadagnato.
    colonne: ID, customerID, date, size, is_redeemed

Ecco la magia del mio PHP che non so come implementare in Access / Base:

  1. quando un utente seleziona un cliente e fa clic su un pulsante "aggiungi un timbro":

    • stamps viene interrogato per afferrare l'indice dall'ultimo bollo per quel cliente => variabile locale N
    • se N == 24, impostare N = 0. Incremento N di 1.
    • un record viene inserito per stamps con la data corrente, ID cliente e un indice di N
    • se N == 8, 16 o 24 un record viene inserito in freebies con la dimensione appropriata e viene visualizzato un avviso per informare l'utente che il cliente ha guadagnato un po 'di merda gratuito.
  2. Una sorta di pagina "vista del cliente" (forma? Report?) Che mostra tutti i francobolli e omaggi che hanno guadagnato, con "redimere" i pulsanti accanto ai omaggi che non sono state rimborsate.

In generale, ho bisogno per renderlo abbastanza a prova di idiota e "big-pulsante" - automazione ove possibile -. Cassieri presso il negozio dovrebbe essere in grado di utilizzarlo senza alcuna conoscenza preliminare di basi di dati

E 'questo pratico in un programma come Access o Base, o devo solo convincerla a usare la mia versione di PHP? Se ho bisogno di scrivere codice, quale lingua (s) ho bisogno di insegnare a me stesso? Dovrei essere strutturo i miei dati in modo diverso? Io non sono sicuro da dove cominciare qui.

È stato utile?

Soluzione

Il mio suggerimento: non farlo. Eseguire un server MySQL sul PC in questione, hanno la vostra applicazione PHP come front-end per i cassieri, e quindi se si vuole rapporti di MS di accesso alle funzioni, basta avere accesso connettersi al database mysql con ODBC.

La migliore implementazione è abbastanza frequentemente quello che già avete.

Altri suggerimenti

In realtà credo che questo sarebbe un pezzo di torta. E 'vero come Tony ha detto che è possibile continuare a utilizzare le stesse tabelle / backend e questo è probabilmente il percorso mi consiglia. Avrete bisogno di installare driver ODBC di MySQL su qualsiasi macchina che sarà il collegamento al database MySQL. Dopo di che creare un DSN e quindi accedere alle tabelle attraverso quel dall'interno di accesso. Si consiglia di aggiungere il codice più tardi per ricollegare le tabelle ogni volta che i carichi software utilizzando tabelle di DSN. In questo modo il database può essere eseguito su un computer che non dispone di un DSN configurato. Io consiglio di andare sia con MySQL o SQL Server Express al contrario di un MS Access backend, ma io non ho intenzione di prendere il tempo di approfondire il perché.

Penso che si può effettivamente ottenere molto di più funzionalità da un tradizionale desktop di Windows Application (costruito in MS Access o VB.Net) di quanto si potrebbe con PHP. Ed è mia opinione che sarete in grado di farlo con il codice sempre meno tempo investito. Ho detto VB.Net ma probabilmente sarei consiglio MS Access sopra VB.Net per i database, anche se uno dei due farà il lavoro.

Come già detto Tony, Access utilizza il linguaggio VBA. Ci vuole un po 'per davvero prenderlo a meno che non si dispone già di una certa esperienza con altri linguaggi di programmazione che utilizzano la sintassi di base. Ho scoperto che il passaggio da VBA / ASP a PHP / JavaScript è stato lento andando anche se non necessariamente così difficile. PHP utilizza il codice di stile C con parentesi graffe e VBA non lo fa.

Venendo da PHP, ecco alcune cose che possono essere una novità per voi:

Più forte variabile Typing - In Access si può effettivamente dichiarare le variabili con dati specificati tipo come String, data, Integer, Long, singole, doppie, ecc vi consiglio di utilizzare questo, per quanto possibile. Ci sono pochissimi momenti in cui sarà necessario utilizzare i tipi più generali come oggetto o variante. Le variabili dichiarate con un tipo di dati specificato genera un errore se si tenta di mettere il tipo di dati sbagliato in loro. Questo ti aiuta a scrivere codice migliore, a mio parere.

Option Explicit - Option Explicit è una dichiarazione si può mettere nella parte superiore di ciascun modulo di codice per imporre che si deve dichiarare una variabile con un'istruzione Dim prima di utilizzarlo. Mi raccomando che si esegue questa operazione. Ti farà risparmiare un sacco di problemi di tempo la risoluzione dei problemi.

Set MyVariable = Nothing - pulizia variabili oggetto dopo il loro utilizzo è una delle migliori pratiche di utilizzo di MS Access. Potrai utilizzare questo per ripulire le variabili Recordset DAO, variabili ADO Connection, variabili ADO Recordset, variabili di modulo, ecc Qualsiasi variabile che si dichiara come un oggetto (o un certo tipo specifico di oggetto) dovrebbe ottenere ripulito impostandolo a Nothing quando non è più necessario utilizzare la variabile.

No Include - Non esiste una cosa come un'istruzione include in MS Access. È possibile importare i moduli di codice da altri database di Access. È possibile chiamare funzioni contenute in una DLL. Ma non c'è includono in Access che ci sia in PHP.

DoCmd - Dovrete utilizzare l'oggetto DoCmd di MS Access a forme aperte e report ed eseguire altre attività comuni. Solo un avvertimento: è spesso irrazionale. Da lungo tempo gli utenti di accesso non pensano gran parte di essa, ma ho trovato questi comandi per avere poca coesione o la coerenza. Lasciate che vi faccia un esempio. Se si desidera chiudere un modulo che utilizza questo codice: DoCmd.Close acForm, "frmSomeFormName" , ma se si desidera aprire un modulo si utilizza questo codice: DoCmd.OpenForm "frmName" In questo esempio, il motivo per cui non l'apertura di un modulo di ottenere una propria funzione OpenForm durante la chiusura di un modulo semplice usi Chiudi seguito da una costante che indica ad Access si vogliono chiudere una maschera? Non ho una risposta. DoCmd è piena di questo tipo di inconsistency. Blueclaw fa un lavoro abbastanza buono di elencare i più comuni del DoCmd anche se non credo che gli esempi ci sono esattamente stellari.

riferimenti - non si dovrebbe essere necessario utilizzare riferimenti molto frequentemente. Si dovrà utilizzarli per consentire cose come DAO e ADO (vedi più in basso) o Microsoft Scripting Runtime (spesso utilizzato per l'accesso, lettura, scrittura, ecc per file e cartelle). Si tratta fondamentalmente di qualcosa che si fa una volta e poi si dimentica su di esso.

Controlli

?? ActiveX - Probabilmente meglio per cercare di costruire il vostro progetto senza l'utilizzo di questi. Essi richiedono lo stesso controllo per essere installato su ogni computer che verrà eseguito il software. Non so molto su di esso, ma ho capito ci sono alcuni problemi di compatibilità che possono venire in su se si utilizzano i controlli ActiveX nel progetto.

DAO - Data Access Objects - DAO è originale di accesso, insieme nativo di oggetti utilizzati per interfaccia al contenitore di dati. Anche se è utilizzato principalmente per data di accesso tenuto in un database di Access backend / contenitore, può anche essere utilizzato per alcune attività quando si utilizza ODBC tabelle collegate. DAO è molto utile quando si ha bisogno di un ciclo tra i recordset per apportare modifiche alla rinfusa. È anche possibile utilizzarlo per collegare attraverso i controlli dei moduli. Un posto che uso è quello di numeri di riga di riordino in dettagli della fattura dopo una riga viene cancellato. Un altro uso tipico è quello di utilizzarlo in funzioni di "Utilità" in cui è necessario cambiare qualcosa in un determinato campo o campi che non può essere fatto con una query di aggiornamento.

CurrentDb.Execute ( "Update o query di eliminazione qui ...") Il metodo Execute dell'oggetto CurrentDb è, nella mia comprensione, una chiamata DAO implicita. Esso consente di eseguire le query Update o Delete sulle tavole locali e collegati a codice VBA. È inoltre possibile ottenere ciò utilizzando DoCmd.RunSQL ma CurrentDb.Execute è il metodo preferito perché ti dà migliorato messaggi di errore se qualcosa non riesce se si aggiunge "dbFailOnError" come secondo argomento.

ADO - ActiveX Data Objects - Non raccomandato utilizzare i controlli ActiveX, ma questo è uno ActiveX La tecnologia potrebbe essere necessario. A mia conoscenza, ADO è l'unica cosa che è possibile utilizzare per eseguire le stored procedure da Access. ADO è simile a DAO e doveva sostituire DAO anche se non ha fatto davvero. Io tendo ad usare entrambi nelle mie applicazioni. Ci vuole un po 'per capire che si farà il lavoro per voi, o che si farà meglio. In generale, mi bastone con DAO per tutto tranne per l'esecuzione di procedure memorizzate o connessione alle origini dati esterne (cioè non utilizzando tabelle collegate). DAO e ADO sono entrambi parte di MDAC (Microsoft Data Access Components), che viene installato con MS Access.

File System Object - Questo oggetto, di cui sopra, è spesso usato per accedere ai file e alle cartelle. Troverete potrebbe essere necessario utilizzare per copiare i file, creare file di testo, leggere file di testo, scrivere su file di testo, ecc Si tratta di una parte di Microsoft Scripting Runtime che fa parte di Windows Script Host (esiste su tutti i computer di Windows anche se può diventare "spezzato"). L'accesso ti dà alcuni modi di accedere a file e cartelle utilizzando built-in funzioni / metodi quali Dir (), ma queste funzioni non coprire tutte le basi della VBA.

SQL - Query Language Server di - probabilmente siete a conoscenza di SQL già, ma avrete bisogno di abituarsi a "melari di accessoet" del linguaggio SQL. Non è drasticamente diverso, ma Access non consente di utilizzare le funzioni di accesso (ad esempio, Len, sinistra, destra) o funzioni personalizzate. vostre funzioni solo bisogno di esistere in un modulo di codice e di essere dichiarata come pubblico . un esempio della propria funzione sarebbe di ripetizione (non esiste in MS Access, esiste in MySQL) che viene talvolta usato per creare rientro sulla base di Count (*) in tabelle con relazioni padre del bambino. sto dando che come ad esempio anche se è improbabile che avrete bisogno di utilizzare tale funzione a meno che non si sta per essere utilizzando il modello Nested Set per tenere categorie gerarchiche.

Le variabili non possono essere in stringhe letterali - Questa è una differenza enorme tra Access e PHP. PHP permette di scrivere: "SELECT * FROM WHERE tag tagtext = '$ mytag'" In MS Access dovreste scrivere in questo modo: "SELECT * FROM WHERE tag tagtext = '" & strMyTag & "'" (si può non sempre è necessario preoccuparsi di questo a meno che non si formatta una query in VBA per recuperare un DAO o ADO recordset. Quello che ho appena detto non influisce in genere le query del modulo o RecordSource del report o salvati perché in genere non uso variabili in quelli).

Domanda - Non è difficile da capire, ma in Access una query è fondamentalmente una vista MySQL. Io in realtà non salvare le query molto spesso. Io in genere li uso solo per derivare il mio "codice" di SQL e poi prendo che SQL e incollarlo nella mia forma come l'origine record, invece di legare un modulo per una query salvata. Non importa in che modo si desidera farlo. Ci sono pro e contro in entrambi i casi si sceglie di fare questo. Come nota a margine, non abbiate paura di creare viste in MySQL e link a loro in Access. Quando si collega a loro accesso li vede come tabelle. Se o non è aggiornabile / scrivibile dipenderanno dalla costruzione della vista. Alcuni tipi di query / viste (come i sindacati) sono di sola lettura.

Come nota finale, vi consiglio di MS Access su OpenOffice.org Base. Ho provato base un paio di anni fa e ho trovato che mancano così tante funzioni. Tuttavia, mi è stato già sperimentato in MS Access in modo da non sono sicuro che ho dato OpenOffice Base un processo equo. Quello che ho trovato mancava era eventi. Io sono abituato a essere in grado di mettere a punto le mie forme di MS Access per offrire agli utenti un molto reattivo UI con un sacco di feedback e non riuscivo a capire come fare questo in Base. Forse le cose sono cambiate da quando dall'ultima volta che ho provato, non lo so. Ecco un articolo confrontando Base per MS Access.

Altri guru quindi l'accesso, si sentono liberi di segnalare eventuali errori nella mia risposta. Io ancora mi considero un rookie nella programmazione.

Non posso parlare per la Base. Tuttavia L'accesso può collegarsi al database MySQL direttamente in modo da non dover rifare i dati. Per quanto riguarda la creazione dei pezzi di codice in Access che sarebbe abbastanza facile. Access, Word ed Excel, utilizzare VBA che è identico, tranne che per l'accesso, Word o cose specifiche del modello a oggetti di Excel, a Visual Basic 6.0. In effetti un minore bug oscuro quando si utilizza l'editor VBA è presente nell'editor VB6 anche.

Vorrei anche aggiungere che uno dei miei database di Access ha avuto 160 tabelle, query 1200, 350 forme, 450 rapporti e 70K righe di codice. Quindi la vostra applicazione è abbastanza piccolo da paragone.

Sul tavolo omaggi che avrebbe cambiato il campo is_redeemed ad un date_redeemed. Sono assolutamente d'accordo con la registrazione di ogni timbro e Freebie e guadagnato come record separati in tabelle. THSS modo è facile reale per mostrare al cliente una storia piuttosto che solo affermando che hai solo x francobolli.

Considera anche un lettore di codice a barre e redigere gli utenti a barre codificate portafoglio carte di plastica. Ciò notevolmente accelerare il tempo richiesto dal impiegato per cercare i loro record. Infatti considerare l'utilizzo comune per la tua zona di carte fedeltà che potrebbero già avere ad esempio una scheda Safeway o miglia aeree. Avevo messo quel numero in una tabella separata anche se nel caso in cui essi perdono la prima carta che è stata data. O in modo che possano monitorare più schede. Una famiglia potrebbe desiderare voglia di punti di accumulare su un unico conto.

Grazie per il distacco lenghty. Questo ci permette di darvi alcuni suggerimenti su diversi aspetti si potrebbe non avere pensato in primo luogo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top