Newsgroup: it.comp.appl.access
Titolo: aiuto! Importazione records da textfile

Ciao a tutti,
sono abbastanza novizia di Access e recentemente mi si è presentato il
problema di dover acquisire una notevole quantità di records da un
file di testo o da un file di Excel attraverso un applicativo.
Mi spiego meglio: l'applicativo (scritto in Delphi) si interfaccia ad
un db Access che di per sè può anche non esistere, nel senso che alla
prima esecuzione se il db non esiste viene creato tramite una
componente ADOX che esegue una CREATE DATABASE ... quindi all'utente
viene "fortemente consigliata" la creazione di almeno una tabella,
dopodichè può cominciare ad inserire dati che verranno variamente
trattati.
Mi si è però presentato il caso di utenti che dispongono di una
notevole mole di dati già ordinati in files di testo o di Excel: come
posso fare per permettere loro di inserirli? In MySQL basterebbe
l'istruzione LOAD DATA LOCAL INFILE 'fileditesto.txt' che però
ovviamente Access non riconosce, così come non sembra riconoscere una
delle varianti della BULK INSERT del SQL Server ...
Qualcuno ha un'idea di come si possa fare senza dover caricare il file
su un memo e generare da questo la stringa INSERT INTO formattandola
correttamente (che funzionerebbe solo con i files di testo)???
Grazie di cuore,
Sil


Ciao Sivia, benvenuta
-File
--Carica dagli esterni
---Importa
Scegli file di testo come tipi di file ed importi il tuo file
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

 MAssimiliano Amendola            
www.accessgroup.it
Ciao e grazie,
purtroppo le istruzioni che tu mi hai dato sono per l'acquisizione
manuale da parte di un essere umano che ha access aperto davanti; il
fatto è che qui deve essere il mio applicativo a farlo, con access
magari neppure installato sul pc ospite e lui può farlo solo via SQL;
ho provato con le seguenti stringhe:
*      BULK INSERT NomeTabella FROM "PathFileName" WITH
(FIELDTERMINATOR = ",");
*      INSERT INTO test (campo1,campo2,...,campoN)
VALUES (#orario.txt#);
trovate quà e là su internet (la prima è del MS SQL Server, l'altra
non so come sia stata pensata) ma nessuna funziona.
Il mio codice Delphi sarebbe così (all'OnClick del pulsante sulla
form):
...
var sqlstring: string;
begin
sqlstring:='BULK INSERT NomeTabella FROM ''PathFileName'' WITH
(FIELDTERMINATOR = '',''); {o una qualsiasi altra stringa, purchè
funzionante!!!}
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:=sqlstring;
ADOQuery1.ExecSQL;
if ADOQuery1.IsEmpty then
 MessageDlg('IMPORTAZIONE FALLITA!',mtError,[mbOK],0)
else
 MessageDlg('IMPORTAZIONE RIUSCITA!',mtInformation,[mbOK],0);
....
 
Ancora grazie,
Sil

 Sil
Bisogna uindi vedere delphi come si deve comportare
Ti consiglio quindi un NG delphi
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it


 Info:  
www.donkarl.com/it
si, però il codice Delphi è corretto (stringa sql a parte, ma quello
non è delphi). Da codice riesco a fare creare il db, creare le tabelle
e tutto ciò che mi serve per gestirle; il punto è che ignoro quale
sia la stringa SQL che equivale alla sequenza di operazioni che mi hai
descritto nella tua prima risposta.
Chiarisco con un altro esempio:
in Access l'istruzione SQL CREATE DATABASE non esiste direttamente ma
Delphi mi viene in soccorso con le componenti ADOX; per esempio:
<code>
 DataSource :='Provider=Microsoft.Jet.OLEDB.4.0' +';Data Source=' +
dbName + ';Jet OLEDB:Engine Type=4';
  ADOXCatalog1.Create1(DataSource);
</code>
e questo è Delphi che lo fa.
Se però devo creare una tabella dentro al db creato con le istruzioni
di cui sopra, basta che passi un comando SQL ad Access, cioè che
esegua una query come potrei fare dall'interno di Access. Per provare:
apri Access, vai in creazione query da struttura e non selezionare
nessuna tabella su cui agire con la query ma passa in modalità SQL e
al posto del codice SQL che Access ti propone scrivi
<code>
CREATE TABLE prova (id AutoIncrement, nome varchar (50));
</code>
poi clicca sul punto esclamativo per eseguire la query e tra le tabelle
ti troverai la tabella appena creata.
Dunque il mio problema è un problema connesso ad access, non a delphi,
anche perchè se agissi su un db ms sql server O SU UN DB MySQL saprei
che comando SQL passargli :
per MS SQL Server:
<code>
BULK INSERT NomeTabella FROM 'percorsoFileSorgente' WITH
(FIELDTERMINATOR = '","');
</code>
e per MySQL
<code>
LOAD DATA LOCAL INFILE 'percorsoFileSorgente' into table `NomeTabella`
FIELDS TERMINATED BY ';';
</code>
La mia domanda è: per Access esiste un comando SQL analogo?
Grazie ancora e ciao,
Sissi

 ha scritto nel messaggio 
news:1153897910....@b28g2000cwb.googlegroups.com...
Ciao e grazie,





Ancora grazie,
Sil
[risposta]
Giusto per capire; devi esportare i dati da MS SQL ad Access tramite Delphi?
(in alternativa, così a braccio) Potresti utilizzare VBScript+ADO per 
connetterti a MS SQL e all'MDB e spostare i dati dall'uno all'altro...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ciao,
no, non è proprio così ma mi hai dato un'idea che merita essere
approfondita: potrei aggiungere una seconda ADOConnection ad un
database formato testo (il mio file) e quindi fare importare i dati in
access come da fonte esterna ... proveremo, ma credo che debba esistere
un comando sql che access capisca per fare una banale bulk insert, no?
Sissi

 ha scritto nel messaggio 
news:1153900677.1...@75g2000cwc.googlegroups.com...
Ciao,
no, non č proprio cosě ma mi hai dato un'idea che merita essere
approfondita: potrei aggiungere una seconda ADOConnection ad un
database formato testo (il mio file) e quindi fare importare i dati in
access come da fonte esterna ... proveremo, ma credo che debba esistere
un comando sql che access capisca per fare una banale bulk insert, no?
Sissi
[risposta]
Puoi fare due cicli di recordset dove da uno leggi i valori e li inserisci 
nell'altro...
Ciao.
-- 
Sergio MAZZA 

 Sissi
Sì esiste transfertext ma a cosa ti serve?
Tu stessa hai detta che lo user potrebbe non avere installato Access
significa che non lavorerà Access


 MAssimiliano Amendola
GRAZIE! adesso cerco di capirne la sintassi!
Il motivo per cui mi serve è che l'utente potrebbe (in realtà nella
maggior parte dei casi vuole) importare in una nuova tabella records
che ha ottenuto da altre fonti o che si è creato lui e che sono in
formato testo o excel; da qui la necessità di metterlo in condizione
di farlo (sarebbe seccante dirgli di inserire a uno a uno i suoi 3500
records).
La scelta di access come db di appoggio non è mia e dunque, a parte
qualche debole protesta (debole e sterile) non ho voce in capitolo.
Ancora grazie,
Sissi