Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 42
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188

    [VB6] Copia dati in tabella da Access a MySQL

    Salve a tutti,

    ho cercato parecchio (probabilmente non abbastanza se non ho risolto il problema), una, anzi 2 istruzioni sql per creare una copia di una tabella da usare come tabella temporanea.
    Lavoro con 2 archivi, uno in locale (al momento mdb, in futuro MySQL o SQL) ed uno su server Mysql.
    Al fine di velocizzare alcune operazioni di confronto per aggiornamento, mi vedo costretto a copiare una tabella che è sul server in locale e viceversa. Ora, dopo tante ricerche, questa mattina, al primo colpo, ho trovato l'istruzione che mi permette di copiare la tabella dal db sql al db access (protetto con pwd, per cui fino ad oggi, toglievo la password, operavo e poi rimettevo la password) che è la seguente:

    INSERT INTO tabella_nuova IN '' 'MS Access;PWD=sandavidemb;DATABASE=percorsodb' " _
    & "SELECT tabella_origine.* " _
    & "From tabella_origine " _
    & "WHERE 1=0

    (mi preme dire che la parte relativa alla password, è opera di un un utente (grande) di questo forum)

    ... questa per creare e copiare la tabella (vuota o con filtro), presupponendo quindi che non esiste la tabella (il mio caso)

    Purtroppo, non trovo la stessa istruzione, ma che ha come origine il db Access e come destinazione il db SQL.

    Ho trovato questa istruzione sql

    CREATE TABLE tabella_nuova LIKE tabella_origine

    che, spero di non esprimermi male, ma è la pari istruzione su db MySQL della

    Select tabella_origine into tabella_nuova (ADO)

    Io, ho provato

    CREATE TABLE tabella_nuova like tabella_origine from '' 'MS Access;PWD=sandavidemb;DATABASE=percorsodb

    e così

    CREATE TABLE tabella_nuova from tabella_origine in '' 'MS Access;PWD=sandavidemb;DATABASE=percorsodb

    ... ma senza risultati.

    Spero che qualcuno mi sappia 'completare' l'istruzione come da mie intenzioni. Grazie

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Se il database sorgente è sempre disponibile, fai molto meglio e prima collegando la tabella su Access, via ODBC.
    A quel punto non devi fare null'altro.
    Se aggiorni i dati da una parte automaticamente te li ritrovi dall'altra.

    I due database sono entrambi in locale?

    Se dai qualche dettaglio in più sull'operatività a cui è soggetta la tabella (INSERT, UPDATE, DELETE) sarebbe utile per inquadrare lo scenario.
    Copiare una tabella da una parte all'altra è sempre indice di rischio di perdersi qualche modifica.
    Quindi, spiega il perché hai pensato di copiare la tabella...

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188
    Innanzi tutto, grazie per l'intervento, caro Gibra.

    il db sql è 'sempre' disponibile, in quanto appoggiato presso un server esterno (a pagamento)

    Per quanto riguarda l'operatività, mi serve per aggiornare il db sql da access (si tratta di una tabella 'appuntamenti' dove un indice univoco potrebbe essere dato dalla combinazione di 4 campi ed ho una media di 1500-2000 record da confrotare/aggiornare al mese) e, già che ci sono, se fosse la prima volta che gira la nuova versione di programma, devo anche creare la tabella.

    Perchè la prima volta? in quanto il programma standard lavora in locale, ma, se qualche utente vuole anche una soluzione esterna, creo le tabelle dedicate all'utente e le popolo. Ho più utenti, non un utente solo, da qui la mia volontà di avere uno strumento vb6 che, attivato il modulo, mi passa i dati su sql e, se no ci sono, mi crea anche le tabelle con la struttura di quell'utente. del momento.

    Inoltre, vorrei evitare di dare all'utente i dati di connessione al db. Se creo la connessione nel db access, anche se protetto da password, se sono scafati, possono trovare la password, entrare nel db e mi scovano la connessione al server (o sbaglio?)


    Saluti

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Come ho già detto, se i due db sono in linea, potresti
    1. Collegare la tabella MySQL su Access (ovviamente userai un nome differente)
    2. Aggiornare i dati
    3. Eliminare la tabella linkata
    A mio avviso questa è la soluzione più semplice, efficiente ed efficacie, perchéla tabella linkata diventa accessibile come se fosse una tabella locale, quindi puoi aprirla e fare tutti i tuoi aggiornamenti.

    Cerca sul web:
    How to Use ADOX to Create and Refresh Linked Jet Tables



    In alternativa, dato che il db esterno è sempre in linea, e data la poca mole di dati da aggiornare, può essere quella di usare due recordset ADO:
    uno aperto sulla connessione locale (MDB), l'altro su quella server (MySQL)
    Diamo ovviamente per scontato che la prima volta dovrai creare la tabella sul server.

    I due recordset ti permetteranno di confrontare/aggiornare i dati tra le due tabelle (non so come intendi procedere, ma immagino tu sappia già cosa devi fare).

    Sinceramente non ho informazioni né per la INSERT INTO da un database Access a MySQL né per la CREATE TABLE new_table LIKE orig_table pensando che la orig_tab sia una tabella di un database Access.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188
    Innanzitutto.

    mi scuso se non mi sono più fatto sentire ma sono stato fuori.

    Dopodichè provo a riprendere:


    Quote Originariamente inviata da gibra Visualizza il messaggio

    Sinceramente non ho informazioni né per la INSERT INTO da un database Access a MySQL né per la CREATE TABLE new_table LIKE orig_table pensando che la orig_tab sia una tabella di un database Access.
    Forse, ho sbagliato io nel fare le prove, in quanto il problema della password su db access lo sorpasso solo tra db access (l'istruzione riportata sopra), nel momento che voglio 'mischiare' connessioni su sql e connessioni access, mi va in errore, con o senza password. Ora, se non fosse possibile un istruzione del genere

    sql_6 = "insert into appuntamenti select * from appuntamenti in '' 'MS Access;DATABASE=C:\percorso\archivio.mdb' "

    oppure


    sql5 = "select appuntamenti .* INTO appuntamenti _x in '' 'MS Access;PWD=parolach;DATABASE=C:\percorso\archivio. mdb' " _
    & "From appuntamenti "


    dbextfarm.Execute (sql_n)

    dove dbextfarm è così definita

    dbextfarm.Open "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=miodb;uid=ute;pw d=parola;Option=3;Port=3306;"



    potrebbe fare al caso mio una soluzione paventata da GIBRA

    1. Collegare la tabella MySQL su Access (ovviamente userai un nome differente)
    2. Aggiornare i dati
    3. Eliminare la tabella linkata

    se, scusate l'ignoranza, per creare il link ho a disposizione una qualche istruzione sql da mettere nel programma (VB6)

    La mia necessità, in questo frangente è quella di confronto ed aggiornamento dei dati SULLA tabella sql dal db access e di 'scarico' di alcuni dati DA sql AD Access.

    Le istruzioni le ho riprese da una discussione [http://forum.html.it/forum/showthread/t-1456154.html]

    nella quale ALKA risolveva alla grande, ma forse, come ho accennato prima, non è permesso mischiare SQL e ACCESS fino al punto che desidererei io.
    Grazie a tutti.
    Ultima modifica di benjy; 17-08-2015 a 11:56 Motivo: ho sbagliato ad inviare

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Hai frainteso completamente la discussione a cui ti riferisci (a cui ho partecipato anch'io).
    In quel caso si parla di due database ACCESS (MDB) dello stesso tipo, quindi.

    Quello che vuoi fare tu NON è fattibile da database di diverso tipo (se non un paio di vecchi database e per cui MS Access offre una certa compatibilità, come Paradox, DBF,...

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188
    Infatti, mi era sorto il dubbio, anzi, il DUBBIO!!!

    A questo punto, immagino che anche il tuo discorso del link alla tabella, sia da creare manualmente, e non tramite istruzione, giusto?


    In alternativa, dato che il db esterno è sempre in linea, e data la poca mole di dati da aggiornare, può essere quella di usare due recordset ADO:
    Perdonami, qual'è la mole di dati (mediamente parlando, intendo, e se è possibile 'quantificare') per la quale si inizia ad 'appesantire' l'operazione con uso di recordset? Tanto per rendermi conto in un futuro se mi dovesse capitare di dover lavorare con tabelle contententi parecchi record. Grazie

  8. #8
    riepilogando, tu devi leggere da un db access e scrivere su un db sql, corretto? anche viceversa? i db (soprattutto quello access) sono sempre gli stessi?

  9. #9
    in più, di quanti dati stiamo parlano? decine, centinaia, migliaia, milioni di record?

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188
    Quote Originariamente inviata da optime Visualizza il messaggio
    riepilogando, tu devi leggere da un db access e scrivere su un db sql, corretto? anche viceversa? i db (soprattutto quello access) sono sempre gli stessi?
    genericamente parlando, sì. In quanto ho vari programmi e, potrebbe servirmi qualcosa del genere anche in altri programmi, da qui la mia intenzione di avere qualcosa di generico!

    Al momento leggo e trascrivo record per record e poi faccio quello che devo fare, confronto, aggiornamento etc. etc, ma volevo velocizzarelo, per lo meno, pensavo di velocizzarlo. Purtroppo Gibra mi ha confermato l'incompatibilità fra i i 2 tipi di database per certe istruzioni/operazioni

    optime
    in più, di quanti dati stiamo parlano? decine, centinaia, migliaia, milioni di record?
    l'avevo segnalato nella mia risposta a Gibra, comunque ecco:

    Per quanto riguarda l'operatività, mi serve per aggiornare il db sql da access (si tratta di una tabella 'appuntamenti' dove un indice univoco potrebbe essere dato dalla combinazione di 4 campi ed ho una media di 1500-2000 record da confrotare/aggiornare al mese) e, già che ci sono, se fosse la prima volta che gira la nuova versione di programma, devo anche creare la tabella

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.