COLLEGAMENTO AD UNA TABELLA AS400

di il
5 risposte

COLLEGAMENTO AD UNA TABELLA AS400

Buongiorno a tutti, un problema molto particolare. Ho un progetto che utilizza tabelle collegate ad un AS400 IBM. Siccome la procedura è multiaziendale nel momento in cui si cambia azienda devo ricollegare ovviamente le tabelle. Il problema è che quando lo faccio, sebbene colleghi già una vista logica, mi viene richiesto di specificare i campi chiave, costringendo l'utente a selezionarli ogni volta e correndo il rischio di errori. Il codice utilizzato è questo:

lib = Me.CC_Dati
DoCmd.DeleteObject (acTable), "TABEL01L"
DoCmd.DeleteObject (acTable), "PIACO01L"

DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;DSN=CEA;DATABASE= " & lib & " ", acTable, "" & lib & ".TABEL01L", "TABEL01L"
DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;DSN=CEA;DATABASE= " & lib & " ", acTable, "" & lib & ".PIACO01L", "PIACO01L"

Non sono riuscito a trovare il modo di evitare la richiesta. Qualcuno può aiutarmi ? :)

Grazie a tutti in anticipo (anche se mi rendo conto che il problema è molto particolare)

5 Risposte

  • Re: COLLEGAMENTO AD UNA TABELLA AS400

    Ma tu hai relazionato le 2 LinkedTable lato Client...? Spero di no.

    Invece di cancellare e reimportare, dal momento che si chiamano sempre allo stesso modo, non puoi semplicemente andare a cambiare la ConnectionString tramite l'aggiornamento del SOURCE nella Proprietà CONNECT dell'Oggetto Tabledef...?

  • Re: COLLEGAMENTO AD UNA TABELLA AS400

    04/03/2025 - @Alex ha scritto:

    Ma tu hai relazionato le 2 LinkedTable lato Client...? Spero di no.

    Invece di cancellare e reimportare, dal momento che si chiamano sempre allo stesso modo, non puoi semplicemente andare a cambiare la ConnectionString tramite l'aggiornamento del SOURCE nella Proprietà CONNECT dell'Oggetto Tabledef...?

    Sinceramente non ho la minima idea di come intervenire sul source della proprietà connect dell'oggetto, e non ho capito cosa intendi per "relazionare le 2 linktable".

    Ti ringrazio comunque del suggerimento :)

  • Re: COLLEGAMENTO AD UNA TABELLA AS400

    Quando Linki le tabelle come hai fatto tu sul Client, si crea un riferimento dinamico ad un oggetto remoto.

    Questo riferimento nel Client è associato ad un Oggetto DAO chiamato Tabledef, che espone la proprietà Connect nella quale si salva la Stringa di connessione al Source esterno.

    Esempio la tua Tabella Locale si chiama "TABEL01L" ha sempre lo stesso Nome immagino, cambia la connessione al DB Remoto. 

    dim db as DAO.database
    set db = CurrentDb
    db.TableDefs("TABEL01L").Connect = "ODBC Database", "ODBC;DSN=CEA;DATABASE= " & lib & " "
    db.TableDefs("TABEL01L").SourceTableName= lib & ".TABEL01L"
    db.TableDefs("TABEL01L").RefreshLink 
    .... anche per la seconda tabella o vista
    Set db=Nothing

    Ora prendi questo esempio solo come spunto, devi sistemare la Connection String da passare alla Connect  sistemare il SourceTableName in modo che sappia quale tabella remota andare a prendere.

  • Re: COLLEGAMENTO AD UNA TABELLA AS400

    E' chiarissimo! L'unica cosa è che la stringa 

    db.TableDefs("TABEL01L").Connect = "ODBC Database", "ODBC;DSN=CEA;DATABASE= " & lib & " "

    mi restituisce un errore di sintassi che non , riesco a sistemare. Inoltre, perdonami se approfitto della tua gentilezza, ma a quanto ho capito il primo link va fatt manualmente ed è lì che definisco le chiavi ? 

    Grazie ancora 

  • Re: COLLEGAMENTO AD UNA TABELLA AS400

    05/03/2025 - manugonn ha scritto:

    E' chiarissimo! L'unica cosa è che la stringa 

    db.TableDefs("TABEL01L").Connect = "ODBC Database", "ODBC;DSN=CEA;DATABASE= " & lib & " "

    mi restituisce un errore di sintassi che non , riesco a sistemare. 

    Sulla connessione non so cosa aggiungere se non indirizzarti quì, e ricordarti che è una connessione ODBC per la quale serve il DRIVER:

    https://www.connectionstrings.com/as-400/

    https://www.codeproject.com/KB/database/connectionstrings.aspx#Access

    Potrebbe essere questa la sintassi:

    Driver={IBM i Access ODBC Driver};System=mySystem;Uid=myUser;Pwd=myPassword;
    Driver={Client Access ODBC Driver (32-bit)};System=myAS400;Uid=myUser;Pwd=myPassword;

    Inoltre, perdonami se approfitto della tua gentilezza, ma a quanto ho capito il primo link va fatt manualmente ed è lì che definisco le chiavi ? 

    No volendo si può fare tutto da codice... si usa CreateTabledef e si crea l'oggetto Tabledef, quindi si associa..., ma una volta creato potrebbe non essere indispensabile ricrearlo..., io normalmente cancello tutto e rifaccio, per non lasciare traccia dei dati di LOGIN nel sistema, ma questo è un passaggio successivo.

    Mai definite le chiavi lato Client su LinkedTable...

    Grazie ancora 

    Prego

Devi accedere o registrarti per scrivere nel forum
5 risposte