DOMANDA E' possibile Importare un txt in un Db Sql server tramite una macro di un Db Access?

Pubblicità

Informaticalecce

Nuovo Utente
Messaggi
24
Reazioni
1
Punteggio
23
Salve a tutti,

premetto che non sono ferratissimo nella programmazione, però diciamo che me la cavo.

Comunque vi presento il problema:

Ho un Db Access in cui dovrò implementare nuove funzionalità. Queste nuove funzioni si baseranno su dei dati che dovrò importare mensilmente. Dati che saranno contenuti in un txt di quasi 3gb ( e che aumenta nel tempo) . Da quanto ho capito con Access non ho speranze, per cui vorrei sapere come posso fare a importare in SQL Server questo file e aggiornarlo mensilmente e come avviare la procedura dal DbAccess.


Vi ringrazio per ogni aiuto e consiglio :thanks:
 
Access non è un DBMS, non è strano che non abbia feature che ad esempio SQL Server ha. Comunque puoi fare un programma che si connette al file .mdb ed usare OleDb come driver. Da lì fai le varie query (INSERT INTO ecc.)
 
Per lavoro devo fare una cosa simile ma giornalmente. Utilizzo MySQL e non dei file .txt ma .csv e la query di inserimento è la seguente:
Codice:
LOAD DATA LOCAL INFILE 'Nome_File' INTO TABLE t FIELDS TERMINATED BY ';' (col1, col2, col3 etc etc)
Nota che Nome_File è l'intero percorso.
La stessa query dovrebbe funzionare anche con i file txt. Ricordati che la query LAOD DATA LOCAL INFILE di default usa il TAB come limitatore mentre nel mio esempio utilizzo il ';'
 
Access non è un DBMS, non è strano che non abbia feature che ad esempio SQL Server ha. Comunque puoi fare un programma che si connette al file .mdb ed usare OleDb come driver. Da lì fai le varie query (INSERT INTO ecc.)


Penso di aver capito cosa intendi, ma smanettando un po' ho capito che cio che mi serve è importare il file in un DbSQL con tabelle e viste di cui ho bisogno e poi creare su Access un tabella collegata(tramite ODBC)


Per lavoro devo fare una cosa simile ma giornalmente. Utilizzo MySQL e non dei file .txt ma .csv e la query di inserimento è la seguente:
Codice:
LOAD DATA LOCAL INFILE 'Nome_File' INTO TABLE t FIELDS TERMINATED BY ';' (col1, col2, col3 etc etc)
Nota che Nome_File è l'intero percorso.
La stessa query dovrebbe funzionare anche con i file txt. Ricordati che la query LAOD DATA LOCAL INFILE di default usa il TAB come limitatore mentre nel mio esempio utilizzo il ';'


Si infatti è proprio ciò che mi serve, solo che il fatto che il mio sia un txt a larghezza fissa complica la procedura, perchè devo creare un file di formato.


La situazione si complica passo dopo passo... help!!
 
Penso di aver capito cosa intendi, ma smanettando un po' ho capito che cio che mi serve è importare il file in un DbSQL con tabelle e viste di cui ho bisogno e poi creare su Access un tabella collegata(tramite ODBC)





Si infatti è proprio ciò che mi serve, solo che il fatto che il mio sia un txt a larghezza fissa complica la procedura, perchè devo creare un file di formato.


La situazione si complica passo dopo passo... help!!
Potresti postare il file txt?
 
Se non è chiedere troppo, come è composto il database? Quali e quante colonne?

No no anzi..figurati!!

Codice:
IDMAR Codice Marca RT                                                                          S 3  0 1 
------------------------------------------------------------------------------------------- 
IDMOD Codice Modello RT                                                                       S 3  0 4 
------------------------------------------------------------------------------------------- 
IDVER Codice Versione RT                                                                       S 3  0 7 
------------------------------------------------------------------------------------------- 
PARNO PartNumber ricambio                                                                  A 20 - 10 
------------------------------------------------------------------------------------------- 
IDPAR Codice ricambio                                                                            S 4  0 30 
------------------------------------------------------------------------------------------- 
TPPAR Tipo ricambio                                                                               A 1  - 34 
------------------------------------------------------------------------------------------- 
IDSIM Codice simmetria                                                                           A 4  - 35 
------------------------------------------------------------------------------------------- 
ULTDS Ulteriore descrizione                                                                   A 30 - 39 
------------------------------------------------------------------------------------------- 
PECOS Periodo costruttivo/Telaio                                                            A 40 - 69 
------------------------------------------------------------------------------------------- 
COLOR Colore                                                                                         A 100- 109 
------------------------------------------------------------------------------------------- 
PRZLI Prezzo                                                                                            S 12 2 209 
------------------------------------------------------------------------------------------- 
STSPN Status PartNumber: "+" = esaurito, “N” = No a tariffa                    A 1  - 221 
------------------------------------------------------------------------------------------- 
IDGRU Codice raggruppamento listino                                                     S 4  0 222 
------------------------------------------------------------------------------------------- 
TAPPO Tappo Numerico                                                                           S 3  0 229 
-------------------------------------------------------------------------------------------



questo è il tracciato del file con i rispettivi campi che dovranno essere presenti nella tabella!





Ora vado per cui potrò rispondere solo in serata

Vi ringrazio in anticipo per ogni aiutino..
 
No no anzi..figurati!!

Codice:
IDMAR Codice Marca RT                                                                          S 3  0 1 
------------------------------------------------------------------------------------------- 
IDMOD Codice Modello RT                                                                       S 3  0 4 
------------------------------------------------------------------------------------------- 
IDVER Codice Versione RT                                                                       S 3  0 7 
------------------------------------------------------------------------------------------- 
PARNO PartNumber ricambio                                                                  A 20 - 10 
------------------------------------------------------------------------------------------- 
IDPAR Codice ricambio                                                                            S 4  0 30 
------------------------------------------------------------------------------------------- 
TPPAR Tipo ricambio                                                                               A 1  - 34 
------------------------------------------------------------------------------------------- 
IDSIM Codice simmetria                                                                           A 4  - 35 
------------------------------------------------------------------------------------------- 
ULTDS Ulteriore descrizione                                                                   A 30 - 39 
------------------------------------------------------------------------------------------- 
PECOS Periodo costruttivo/Telaio                                                            A 40 - 69 
------------------------------------------------------------------------------------------- 
COLOR Colore                                                                                         A 100- 109 
------------------------------------------------------------------------------------------- 
PRZLI Prezzo                                                                                            S 12 2 209 
------------------------------------------------------------------------------------------- 
STSPN Status PartNumber: "+" = esaurito, “N” = No a tariffa                    A 1  - 221 
------------------------------------------------------------------------------------------- 
IDGRU Codice raggruppamento listino                                                     S 4  0 222 
------------------------------------------------------------------------------------------- 
TAPPO Tappo Numerico                                                                           S 3  0 229 
-------------------------------------------------------------------------------------------



questo è il tracciato del file con i rispettivi campi che dovranno essere presenti nella tabella!





Ora vado per cui potrò rispondere solo in serata

Vi ringrazio in anticipo per ogni aiutino..

Si possono avere anche qualche riga del database completato?
 
Si possono avere anche qualche riga del database completato?

Ciao io ho inserito questo in una query di SQLServer, in piu ho creato una Tabella con i cambi che ti ho descritto nel messaggio precedente ed un File di formato.

Codice:
USE   [I]NomeDB[/I];
GO
DELETE  [I]dbo.nomeTabella[/I];
GO
BULK INSERT  [I]dbo.nomeTabella[/I]
   from 'C:\[I]nomefile.txt[/I]'
   with ( formatfile = 'C:\[I]nomeFormatFile.fmt[/I]');
GO
SELECT * FROM [I]nomeTabella[/I];
GO

- - - Updated - - -

a me restituisce il seguente Messaggio di errore:

Codice:
(0 row(s) affected)
[COLOR=#ff0000]Msg 4866, Level 16, State 1, Line 1
The bulk load failed. The column is too long in the data file for row 1, column 1. Verify that the field terminator and row terminator are specified correctly.
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".[/COLOR]

(0 row(s) affected)

Ragazzi aiutatemi..:PCfury:
 
Ciao io ho inserito questo in una query di SQLServer, in piu ho creato una Tabella con i cambi che ti ho descritto nel messaggio precedente ed un File di formato.

Codice:
USE   [I]NomeDB[/I];
GO
DELETE  [I]dbo.nomeTabella[/I];
GO
BULK INSERT  [I]dbo.nomeTabella[/I]
   from 'C:\[I]nomefile.txt[/I]'
   with ( formatfile = 'C:\[I]nomeFormatFile.fmt[/I]');
GO
SELECT * FROM [I]nomeTabella[/I];
GO

- - - Updated - - -

a me restituisce il seguente Messaggio di errore:

Codice:
(0 row(s) affected)
[COLOR=#ff0000]Msg 4866, Level 16, State 1, Line 1
The bulk load failed. The column is too long in the data file for row 1, column 1. Verify that the field terminator and row terminator are specified correctly.
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".[/COLOR]

(0 row(s) affected)

Ragazzi aiutatemi..:PCfury:
Sembrerebbe che non trova il terminatore di colonna e/o riga, inserisce dunque tutto nella colonna 1 e quindi sfori.
Solitamente io, la BULK INSERT, la uso cosi
Codice:
BULK INSERT TestDB.dbo.patent
FROM file_path
WITH (FIRSTROW = 1,  FIELDTERMINATOR = '^', ROWTERMINATOR='\r\n');

dove il FIELDTERMINATOR è scelto in base al file.
Come è composto il tuo "nomeFormatFile.fmt"
 
Sembrerebbe che non trova il terminatore di colonna e/o riga, inserisce dunque tutto nella colonna 1 e quindi sfori.
Solitamente io, la BULK INSERT, la uso cosi
Codice:
BULK INSERT TestDB.dbo.patent
FROM file_path
WITH (FIRSTROW = 1,  FIELDTERMINATOR = '^', ROWTERMINATOR='\r\n');

dove il FIELDTERMINATOR è scelto in base al file.
Come è composto il tuo "nomeFormatFile.fmt"

Per creare il Formatfile ho importato la tabella con l'utility " Import and Export data" e poi tramite "bcp.exe" ho creato il file .fmt .

il risultato è il seguente:

Codice:
10.0
14
1       SQLCHAR             0       3       "\t"     1     IDMAR          Latin1_General_CI_AS
2       SQLCHAR             0       3       "\t"     2     IDMOD          Latin1_General_CI_AS
3       SQLCHAR             0       3       "\t"     3     IDVER          Latin1_General_CI_AS
4       SQLCHAR             0       20      "\t"     4     PARNO          Latin1_General_CI_AS
5       SQLCHAR             0       4       "\t"     5     IDPAR          Latin1_General_CI_AS
6       SQLCHAR             0       1       "\t"     6     TPPAR          Latin1_General_CI_AS
7       SQLCHAR             0       4       "\t"     7     IDSIM          Latin1_General_CI_AS
8       SQLCHAR             0       30      "\t"     8     ULTDS          Latin1_General_CI_AS
9       SQLCHAR             0       40      "\t"     9     PECOS          Latin1_General_CI_AS
10      SQLCHAR             0       100     "\t"     10    COLOR          Latin1_General_CI_AS
11      SQLCHAR             0       12      "\t"     11    PRZLI          Latin1_General_CI_AS
12      SQLCHAR             0       1       "\t"     12    STSPN          Latin1_General_CI_AS
13      SQLCHAR             0       4       "\t"     13    IDGRU          Latin1_General_CI_AS
14      SQLCHAR             0       1       "\r\n"   14    Tappo          Latin1_General_CI_AS
 
Per creare il Formatfile ho importato la tabella con l'utility " Import and Export data" e poi tramite "bcp.exe" ho creato il file .fmt .

il risultato è il seguente:

Codice:
10.0
14
1       SQLCHAR             0       3       "\t"     1     IDMAR          Latin1_General_CI_AS
2       SQLCHAR             0       3       "\t"     2     IDMOD          Latin1_General_CI_AS
3       SQLCHAR             0       3       "\t"     3     IDVER          Latin1_General_CI_AS
4       SQLCHAR             0       20      "\t"     4     PARNO          Latin1_General_CI_AS
5       SQLCHAR             0       4       "\t"     5     IDPAR          Latin1_General_CI_AS
6       SQLCHAR             0       1       "\t"     6     TPPAR          Latin1_General_CI_AS
7       SQLCHAR             0       4       "\t"     7     IDSIM          Latin1_General_CI_AS
8       SQLCHAR             0       30      "\t"     8     ULTDS          Latin1_General_CI_AS
9       SQLCHAR             0       40      "\t"     9     PECOS          Latin1_General_CI_AS
10      SQLCHAR             0       100     "\t"     10    COLOR          Latin1_General_CI_AS
11      SQLCHAR             0       12      "\t"     11    PRZLI          Latin1_General_CI_AS
12      SQLCHAR             0       1       "\t"     12    STSPN          Latin1_General_CI_AS
13      SQLCHAR             0       4       "\t"     13    IDGRU          Latin1_General_CI_AS
14      SQLCHAR             0       1       "\r\n"   14    Tappo          Latin1_General_CI_AS
Prova a sostituire \t con 0x09 e \r\n con 0x0a
 
Prova a sostituire \t con 0x09 e \r\n con 0x0a


ho sostituito i valori

Codice:
10.0
14
1       SQLCHAR             0       3       "0x09"     1     IDMAR          Latin1_General_CI_AS
2       SQLCHAR             0       3       "0x09"     2     IDMOD          Latin1_General_CI_AS
3       SQLCHAR             0       3       "0x09"     3     IDVER          Latin1_General_CI_AS
4       SQLCHAR             0       20      "0x09"     4     PARNO          Latin1_General_CI_AS
5       SQLCHAR             0       4       "0x09"     5     IDPAR          Latin1_General_CI_AS
6       SQLCHAR             0       1       "0x09"     6     TPPAR          Latin1_General_CI_AS
7       SQLCHAR             0       4       "0x09"     7     IDSIM          Latin1_General_CI_AS
8       SQLCHAR             0       30      "0x09"     8     ULTDS          Latin1_General_CI_AS
9       SQLCHAR             0       40      "0x09"     9     PECOS          Latin1_General_CI_AS
10      SQLCHAR             0       100     "0x09"     10    COLOR          Latin1_General_CI_AS
11      SQLCHAR             0       12      "0x09"     11    PRZLI          Latin1_General_CI_AS
12      SQLCHAR             0       1       "0x09"     12    STSPN          Latin1_General_CI_AS
13      SQLCHAR             0       4       "0x09"     13    IDGRU          Latin1_General_CI_AS
14      SQLCHAR             0       1       "0x0a"     14    Tappo          Latin1_General_CI_AS



questo è il risultato:

Codice:
(0 row(s) affected)
[COLOR=#ff0000]Msg 4866, Level 16, State 1, Line 1
The bulk load failed. The column is too long in the data file for row 1, column 1. Verify that the field terminator and row terminator are specified correctly.
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
[/COLOR]
(0 row(s) affected)

il mio dubbio è ..ma se è un file a larghezza fissa come fa a darmi un errore sulla lunghezza della colonna?? :grat:
 
ho sostituito i valori

Codice:
10.0
14
1       SQLCHAR             0       3       "0x09"     1     IDMAR          Latin1_General_CI_AS
2       SQLCHAR             0       3       "0x09"     2     IDMOD          Latin1_General_CI_AS
3       SQLCHAR             0       3       "0x09"     3     IDVER          Latin1_General_CI_AS
4       SQLCHAR             0       20      "0x09"     4     PARNO          Latin1_General_CI_AS
5       SQLCHAR             0       4       "0x09"     5     IDPAR          Latin1_General_CI_AS
6       SQLCHAR             0       1       "0x09"     6     TPPAR          Latin1_General_CI_AS
7       SQLCHAR             0       4       "0x09"     7     IDSIM          Latin1_General_CI_AS
8       SQLCHAR             0       30      "0x09"     8     ULTDS          Latin1_General_CI_AS
9       SQLCHAR             0       40      "0x09"     9     PECOS          Latin1_General_CI_AS
10      SQLCHAR             0       100     "0x09"     10    COLOR          Latin1_General_CI_AS
11      SQLCHAR             0       12      "0x09"     11    PRZLI          Latin1_General_CI_AS
12      SQLCHAR             0       1       "0x09"     12    STSPN          Latin1_General_CI_AS
13      SQLCHAR             0       4       "0x09"     13    IDGRU          Latin1_General_CI_AS
14      SQLCHAR             0       1       "0x0a"     14    Tappo          Latin1_General_CI_AS



questo è il risultato:

Codice:
(0 row(s) affected)
[COLOR=#ff0000]Msg 4866, Level 16, State 1, Line 1
The bulk load failed. The column is too long in the data file for row 1, column 1. Verify that the field terminator and row terminator are specified correctly.
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
[/COLOR]
(0 row(s) affected)

il mio dubbio è ..ma se è un file a larghezza fissa come fa a darmi un errore sulla lunghezza della colonna?? :grat:
Perchè come dice l'errore "Verifica che i delimitatore di campo e di riga siano specificati corretamente"
ma il problema mi sa che è il "\t" che non viene trovato nel file txt.

\t equivale al TAB
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top