Newsgroup: it.comp.lang.visual-basic
Titolo: VBA x Access... (lungo)

Vi prego di non uccidermi se sto per porre delle domande assurde...
Visto che in access non esiste il registratore di macro, strumento che
ritengo utilissimo sopratutto per l'alto livello didattico, vi chiedo alcune
cose per capire se posso o meno fare una cosa...
Devo convertire un database in formato dbIV (non relazionale) in uno Access
(relazionale).
Ho creato un db access con al suo interno una tabella contenente tutti i
record importati dall'archivio dbIV. Poi ho realizzato le tabelle
dell'archivio destinazione. Ovviamente alcune di queste tabelle sono poste
in relazione tra loro.
Partendo dalla tabella importata, devo "smistare" i  records nelle altre
tabelle, in campi specifici seguendo, pero', uno schema logico legato
(ovviamente) alle relazioni esistenti nel database destinazione.
Stavo quindi pensando di realizzare dei cicli attraverso i quali analizzare
ogni singolo campo di ogni singolo record della tabella contenente il db in
formato dBase e, in base al valore contenuto, "piazzare" il valore
corrispondente nelle tabelle tra loro relazionate.
Se fossimo in ambiente Excel, e stessimo parlando di fogli, anziche' di
tabelle, non credo avrei particolari problemi.
Andrei avanti a suon di variabili, cicli, if ..then..else.., oggetti
Worksheet, cells e proprieta' varie incrementando di volta in volta la
posizione delle righe per aggiungere i record nelle tabelle (fogli)
specifiche.
In Access, invece, non ho capito se sia possibile adottare una tecnica
simile.
Esiste la possibilita' di leggere un valore di un campo di un record
specifico contenuto una tabella, di un database , assegnarlo ad una
variabile a fare la stessa operazione, questa volta' pero' in scrittura,
aggiungendo un record ad una tabella specifica ?
Quali oggetti, proprieta' o metodi permettono di fare cio' ?
Sareste cosi' gentili da farmi un piccolo esempio di codice su come (per
esempio) leggere il valore contenuto nel campo "nome" del record  n° 100
della tabella "clienti"  e come aggiungere (sempre come esempio) un record
nella tabella "fatture" nel campo "codCliente" ?
Grazie a tutti
Aldo


...omissis...
Dunque, se ho capito bene, tu devi convertire delle tabelle db4 in un
database Access -avente formato diverso dei dati-.
Se č cosě credo che la soluzione largamente piů efficiente (ed efficace)
sia:
1 - Importati in 1 o x tabelle di Access i dati provenienti dai file dbf Db4
(e questo l'hai fatto)
2 - Esamina attentamente i punti di discordanza tra le due diverse logiche
di dati: tipi di campo diversi, dimensioni di campo diverse, tabelle
inesistenti in una delle due logiche e fondamentali nell'altra ecc...
(Questo punto č FONDAMENTALE per garantirti di non dover tornare indietro
piů volte nei passaggi dati...)
3 - Identifica in ordine di crescenti vincoli relazionali i passaggi dei
dati da convertire
    ( per essere chiari, 
p.es
:  supponendo che tu abbia una tabella
Pagamenti con chiave primaria CodPag e una Tabella   Clienti con chiave
esterna CodPag relazionata alla tabella pagamenti, PRIMA dovrai eseguire
l'importazione della tabella pagamenti e solo dopo potrai eseguire
l'importaz. della tabella clienti... e cosě via...)
4 - Scivi una serie di query di insert e/o update dei dati che eseguono
nell'ordine che hai definito il passaggio dati, con particolare attenzione
ai punti critici evidenziati nella fase 2.
    (Riprendendo l'esempio, supponiamo che la tabella pagamenti del
"vecchio" db4 sia cosě strutturata:
    CODICE numerico
    DESCRIZ carttere
    1SCAD numerico
    ...
    che la nuova tabella pagamenti sia
    CODPAG char(2)
    DESCRIZ char(50)
    1SCAD integer
    ...
    e che tu debba, poniamo, importare solo i pagamenti con prima scad > 60
gg (lo so, č un esempio stupido...)
    allora scriverai:
    INSERT INTO TABELLA2 ( CODPAG, DESCRIZ, 1SCAD )
        SELECT STR([TABELLA1].[CODICE]) AS CODPAG, [Tabella1].[DESCRIZ],
[Tabella1].[1SCAD]
        FROM Tabella1 WHERE [TABELLA1].[1SCAD]>30;
    Naturalmente, dopo aver accertato che nel tuo campo CODPAG char(2) ci
stiano tutti i codici conevrtiti (
p.es
 che     succede se un codice
originario era 102...!!!!!?)
    e cosě via...
Come avrai capito, il problema della conversione di strutture dati
differenti č vasto e complesso.
Solo con una buona analisi preliminare dei dati puoi uscirne senza bagni di
sangue, ma non potrai certo evitare quelli di sudore (anche considerata la
temperatura di questi giorni...)
Buon lavoro
ciao
ugo
p.s.
Scordati di leggere il "record 100", dovresti usare tanti e tali artifizi
per raggiungere una logica navigazionale nei dati...
Usa semmai l'Id cliente o altri elementi validi a comporre le clausole
Where...