Problema TableDef.CreateField su db esterno

di il
9 risposte

Problema TableDef.CreateField su db esterno

Salve a tutti, sto seguendo questa guida per poter implementare dei campi in una tabella ma il problema è che la tabella risiede in un altro database...
https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/tabledef-createfield-method-dao

Come potrei fare? Poichè se collego la tabella non me la fa modificare così come se uso il metodo tramite ALTER Table Add column...stessa cosa poichè sempre collegata...

9 Risposte

  • Re: Problema TableDef.CreateField su db esterno

    Ma tu puoi accedere al db che vuoi modificare?
  • Re: Problema TableDef.CreateField su db esterno

    Tu come fai...?
    Quel codice funziona sul DB in locale... [CurrentDb], tu devi aprire l'oggetto Database sul DbRemoto, usando OpenDatabase membro di DAO.
  • Re: Problema TableDef.CreateField su db esterno

    @oregon sisi, l'ho creato io ma al variare del client vorrei che eseguisse in automatico le implementazioni dei campi mancanti

    @Alex ha scritto:


    Tu come fai...?
    Quel codice funziona sul DB in locale... [CurrentDb], tu devi aprire l'oggetto Database sul DbRemoto, usando OpenDatabase membro di DAO.
    Ciao Alex, ho modificato il codice ma sembri non andare...nel senso che il debug non segnala errori ma i campi non vengono implementati...perchè?
    Public Function CreateField()
            Dim dbs As DAO.Database
            Dim tdf As DAO.TableDef
            Dim fld As DAO.Field2
            
            Dim strSQL As String, strPercorso As String, LinkBE As String, strPassword As String
    
    strPassword = "password"
    
        strPercorso = CurrentProject.Path & "\"
        
        LinkBE = strPercorso & "backend.accdb"
        Set dbs = OpenDatabase(LinkBE, False, False, "MS Access;PWD=password")
        
        Set tdf = dbs.CreateTableDef("tblDaAggiungereCampi")
                ' creazione campi
            tdf.Fields.Append tdf.CreateField("Data", dbDate)
            tdf.Fields.Append tdf.CreateField("Stato", dbText, 50)
            Cleanup:
            Set fld = Nothing
            Set tdf = Nothing
            Set dbs = Nothing
    
    End Function
  • Re: Problema TableDef.CreateField su db esterno

    Non vengono implementati DOVE, nel Server...?
    Non è che guardi le LINKED TABLE e ti aspetti di vedere gli aggiornamenti...?

    Ma la tabella esiste già o la devi creare da NUOVA...?
    Tu in quel codice la crei NUOVA, e se esioste già ovviamente non funziona, e senza gestione errori è fatica...!

    Se Esiste già on devi usare
     
    Set tdf = dbs.CreateTableDef("tblDaAggiungereCampi")
    ma questo:
    Set tdf = dbs.TableDefs("tblDaAggiungereCampi")
    Poi questo:
    tdf.Fields.Append tdf.CreateField("Data", dbDate)
    Nemmeno sai se il campo è sato creato e lo Appendi... ma come fai a debuggare codice così...?

    Insomma [zio ken]... in veneto dicono [zio can] quando si fanno le cose fatte malino...
  • Re: Problema TableDef.CreateField su db esterno

    @Alex ha scritto:



    Insomma [zio ken]... in veneto dicono [zio can] quando si fanno le cose fatte malino...

    Se avessi saputo prima che è del Veneto, qualche mesetto fa le avrei offerto volentieri del buon vino della volpicella

    P.s. dopo i preziosissimi consigli il codice funge, verificavo però se i campi venivano aggiunti sul Server
    In merito al formato del campo Data, come posso impostare la proprietà formato in data dd/mm/yyyy?
  • Re: Problema TableDef.CreateField su db esterno

    Non sono Veneto, confinante però... molto prossimo.

    Non devi salvare il formato della data quello si fa in VISUALIZZAZIONE nelle textbox.
    Se domani cambi database...?

    Per impostarlo nel server in ogni caso devi accedere alla proprietà FORMAT ed inserire il formato ricorda sempre che quello che fai in Access da editor passa per la conversione linguistica... quindi fossi in te, proverei di modificarlo a mano e poi cicli le properties dei campi e verifichi cosa ne esce.
    Una cosa simile semplificando:
    
    Dim prp 
    For each prp in fld.Properties
       Debug.print prp.name, prp.value
    Next
  • Re: Problema TableDef.CreateField su db esterno

    @Alex ha scritto:


    Non sono Veneto, confinante però... molto prossimo.

    Non devi salvare il formato della data quello si fa in VISUALIZZAZIONE nelle textbox.
    Se domani cambi database...?

    Per impostarlo nel server in ogni caso devi accedere alla proprietà FORMAT ed inserire il formato ricorda sempre che quello che fai in Access da editor passa per la conversione linguistica... quindi fossi in te, proverei di modificarlo a mano e poi cicli le properties dei campi e verifichi cosa ne esce.
    Una cosa simile semplificando:
    
    Dim prp 
    For each prp in fld.Properties
       Debug.print prp.name, prp.value
    Next
    Ciao Alex, grazie per il chiarimento ma purtroppo non sono riuscito a far girare il codice da te postato in calce però generalmente imposto sul Server il tipo di formato (per le date) in cifre. Ma considerando che per filtrare tali info utilizzo il
    Format$(Me!txtData.Value, "mm/dd/yyyy")
    significa che in tutti i casi la data viene passata in formato anglosassone...giusto?
    Perchè prima di utilizzare il format, mi filtrava totalmente altro...il tuo debug mi evidenzava proprio ciò, giusto?
  • Re: Problema TableDef.CreateField su db esterno

    Non c'entra nulla come imposti sul serve, il campo data di fatto è un Double, quello che imposti è solo la Visualizzazione.
    Altra cosa, quello che fai con Format serve solo per consentire al DRIVER ed all'interprete di convertire la Data in un formato riconoscibile per il Driver, ovvero l'anglosassone.

    Io ad esempio nei criteri uso la conversione in Long quando non ho [hh:mm:ss] o Double se ho tutto il treno completo, in questo modo non sono affetto dalle impostazioni internazionali...
  • Re: Problema TableDef.CreateField su db esterno

    @Alex ha scritto:


    Non c'entra nulla come imposti sul serve, il campo data di fatto è un Double, quello che imposti è solo la Visualizzazione.
    Altra cosa, quello che fai con Format serve solo per consentire al DRIVER ed all'interprete di convertire la Data in un formato riconoscibile per il Driver, ovvero l'anglosassone.

    Io ad esempio nei criteri uso la conversione in Long quando non ho [hh:mm:ss] o Double se ho tutto il treno completo, in questo modo non sono affetto dalle impostazioni internazionali...
    Grazie mille Alex per i tuoi sempre esaustuvi consigli
Devi accedere o registrarti per scrivere nel forum
9 risposte