File CSV e Database Access

domenica 09 giugno 2013 - 19.47
Tag Elenco Tags  Access (.mdb)

salvob Profilo | Newbie

Salve, come al solito posto per chiedere aiuto

Sono ancora alle prese con un lavoro in access, purtroppo non ho grandi conoscenze su questo software ma per necessità lavorative sto dovendo imparare ad usarlo.

Ho un database con tre tabelle:
Fornitori:
ID,Fornitore
Prodotti:
ID,CodProdotto,Prodotto,Prezzo
Listino Fornitori:
ID,[CodProdotto,Prodotto],[Fornitore],Prezzo

Ho dei file csv che contengono un elenco di prezzi, vengono dai diversi fornitori, ma non contengono il dato "fornitore"

Quello che mi servirebbe è creare un piccolo form con due pulsanti, uno che mi consenta di importare dai file csv i prezzi dei fornitori (quindi aggiornando i prezzi già esistenti e consentendo l'inserimento di un campo manuale per specificare di quale fornitore si tratta) e uno che semplicemente esporti la mia tabella prodotti nello stesso identico formato del csv dei fornitori.

In buona sostanza i due pulsanti dovrebbero svolgere le seguenti funzioni:

Importa:
1) Chiedi all'utente di quale fornitore si sta aggiornando il listino (magari selezionabile dall'elenco della tabella Fornitori"
2) Caricare le righe del file csv e per ogni riga compire le seguenti verifiche:
a) Se il prodotto è nuovo (non presente quindi nel db) deve essere aggiunto un nuovo record alla tabella "Prodotti" e poi inserito il prezzo presente nel csv nella tabella "Listino Fornitori" con l'aggiunta del fornitore (specificato dall'utente al punto 1)
b) Se il prodotto è già esistente ma non è presente nel listino fornitori, aggiungere il record specificando il prezzo dal csv e il fornitore (vedi sempre punto 1)
c) Se il prodotto è presente sia nella tabella Prodotti che in quella Fornitori si deve semplicemente conforntare il prezzo di "Listino Fornitori" ed eventualmente aggiornarlo.

Esporta:
1) Esporta la tabella prodotti con lo stesso formato del csv dei fornitori

Il CSV dei fornitori ha il seguente formato
CodProdotto,Prodotto,Prezzo
A0001;"Oggetto";25,67
B0003;"Cosa";56,27

Fra l'altro nella tabella Listino Prodotti, i campi Prodotto e Cod Prodotto sono raggruppati in una colonna di ricerca guidata, posso trattarli separatamente nell'importazione?.

Io avevo iniziato a scrivere un codice simile nei pulsanti

PulsanteImport:
Private Sub Comando1_Click()
DoCmd.TransferText acImportDelim, "DBProductsOK", "Listino Fornitori", "E:\altri.csv", True
End Sub

PulsanteExport:
Private Sub Comando2_Click()
DoCmd.TransferText acExportDelim, "DBProductsOK", "Prodotti", "E:\mio.csv", True
End Sub

quel "DBProductsOK" sarebbe il nome del file di specifiche che ho creato facendo un importazione di un csv di un fornitore e salvando le specifiche da "avanzate..."
Il problema è che purtroppo sono completamente a digiuno di codice VBS e con le macro non saprei nemmeno da dove iniziare a fare una cosa del genere...
Credo che si debba creare un file schema.ini che contiene le specifiche d'importazione per collegare i campi delle tabelle a quelli del csv..

Vi prego illuminatemi, sono ore che arranco tra guide di access che spiegano le cose sempre in maniera troppo generica e ricerche su google che mi danno risultati confusionari..

Confido come sempre in un vostro prezioso suggerimento sulla direzione da seguire!!

CorriCorrado Profilo | Junior Member

Ciao,
se leggi quando riportato nella guida trovi tutto:

expression .TransferText(TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)

http://msdn.microsoft.com/en-us/library/office/ff835958.aspx

A string expression that's the name of an import or export specification you've created and saved in the current database. For a fixed-width text file, you must either specify an argument or use a schema.ini file, which must be stored in the same folder as the imported, linked, or exported text file. To create a schema file, you can use the text import/export wizard to create the file. For delimited text files and Microsoft Word mail merge data files, you can leave this argument blank to select the default import/export specifications.



Corrado

salvob Profilo | Newbie

Ciao Corrado, sono stato su quella pagina, in realtà la funzione va bene, il problema è che nel file csv i campi sono in un certo ordine, nelle mie tabelle i dati sono in ordine diverso e ci sono delle colonne aggiuntive.
Credo di aver capito quindi che lo schema.ini è da realizzare solamente per i csv non delimitati da un carattere ma per quelli a spaziatura fissa giusto?

In questo caso probabilmente piuttosto che importare i dati in una tabella converrebbe usare un dataset da cui fare le opportune verifiche prima di scrivere i dati sul database, ma come fare? non saprei da dove cominciare.

CorriCorrado Profilo | Junior Member

Dalla mia esperienza, io ti sconsiglio di non utilzzare il fixed; con il delimitato, io ho salvato varie specifiche che vengono richiamate dalla funzione a seconda del file che sto caricando.

Per farlo, a seconda del file csv che stai caricando, potrai avere una specifica differente che richiamerai a seconda del tuo bisogno.

Ciao
Corrado
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5