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

Informaticalecce

Nuovo Utente
24
1
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:
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
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.)
 

TheJudge

Utente Attivo
335
84
CPU
i5-8600k
Dissipatore
Cooler Master TX3 EVO
Scheda Madre
MSI Z370 SLI PLUS
HDD
SAMSUNG 840 Pro 250GB + SSD Sandisk 250GB
RAM
Hiperx 2x8GB DDR4 @2666Hz
GPU
Asus Strix 1070TI
Monitor
1 Asus 24" fullHD + BENQ 27" fullHD
PSU
EVGA SuperNova 850W 80+ gold
Case
NZXT S340
OS
Windows 10 Pro
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 ';'
 

Informaticalecce

Nuovo Utente
24
1
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!!
 

TheJudge

Utente Attivo
335
84
CPU
i5-8600k
Dissipatore
Cooler Master TX3 EVO
Scheda Madre
MSI Z370 SLI PLUS
HDD
SAMSUNG 840 Pro 250GB + SSD Sandisk 250GB
RAM
Hiperx 2x8GB DDR4 @2666Hz
GPU
Asus Strix 1070TI
Monitor
1 Asus 24" fullHD + BENQ 27" fullHD
PSU
EVGA SuperNova 850W 80+ gold
Case
NZXT S340
OS
Windows 10 Pro
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?
 

TheJudge

Utente Attivo
335
84
CPU
i5-8600k
Dissipatore
Cooler Master TX3 EVO
Scheda Madre
MSI Z370 SLI PLUS
HDD
SAMSUNG 840 Pro 250GB + SSD Sandisk 250GB
RAM
Hiperx 2x8GB DDR4 @2666Hz
GPU
Asus Strix 1070TI
Monitor
1 Asus 24" fullHD + BENQ 27" fullHD
PSU
EVGA SuperNova 850W 80+ gold
Case
NZXT S340
OS
Windows 10 Pro

Informaticalecce

Nuovo Utente
24
1
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..
 

TheJudge

Utente Attivo
335
84
CPU
i5-8600k
Dissipatore
Cooler Master TX3 EVO
Scheda Madre
MSI Z370 SLI PLUS
HDD
SAMSUNG 840 Pro 250GB + SSD Sandisk 250GB
RAM
Hiperx 2x8GB DDR4 @2666Hz
GPU
Asus Strix 1070TI
Monitor
1 Asus 24" fullHD + BENQ 27" fullHD
PSU
EVGA SuperNova 850W 80+ gold
Case
NZXT S340
OS
Windows 10 Pro
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?
 

Informaticalecce

Nuovo Utente
24
1
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:
 

TheJudge

Utente Attivo
335
84
CPU
i5-8600k
Dissipatore
Cooler Master TX3 EVO
Scheda Madre
MSI Z370 SLI PLUS
HDD
SAMSUNG 840 Pro 250GB + SSD Sandisk 250GB
RAM
Hiperx 2x8GB DDR4 @2666Hz
GPU
Asus Strix 1070TI
Monitor
1 Asus 24" fullHD + BENQ 27" fullHD
PSU
EVGA SuperNova 850W 80+ gold
Case
NZXT S340
OS
Windows 10 Pro
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"
 

Informaticalecce

Nuovo Utente
24
1
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
 

TheJudge

Utente Attivo
335
84
CPU
i5-8600k
Dissipatore
Cooler Master TX3 EVO
Scheda Madre
MSI Z370 SLI PLUS
HDD
SAMSUNG 840 Pro 250GB + SSD Sandisk 250GB
RAM
Hiperx 2x8GB DDR4 @2666Hz
GPU
Asus Strix 1070TI
Monitor
1 Asus 24" fullHD + BENQ 27" fullHD
PSU
EVGA SuperNova 850W 80+ gold
Case
NZXT S340
OS
Windows 10 Pro
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
 

Informaticalecce

Nuovo Utente
24
1
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:
 

TheJudge

Utente Attivo
335
84
CPU
i5-8600k
Dissipatore
Cooler Master TX3 EVO
Scheda Madre
MSI Z370 SLI PLUS
HDD
SAMSUNG 840 Pro 250GB + SSD Sandisk 250GB
RAM
Hiperx 2x8GB DDR4 @2666Hz
GPU
Asus Strix 1070TI
Monitor
1 Asus 24" fullHD + BENQ 27" fullHD
PSU
EVGA SuperNova 850W 80+ gold
Case
NZXT S340
OS
Windows 10 Pro
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:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!