Memorizzare Oggetto Ole

di il
15 risposte

Memorizzare Oggetto Ole

Buona giornata a tutti.
Premetto che con Access sono alle primissime armi. lavoro con altri linguaggi.
Sto dando una mano ad un amico che ha una applicazione Access ed essendo stato abbandonato dal programmatore mi ha chiesto di aiutarlo per alcuni interventi.
Non riusciamo a fare un cosa banale.
In una form sono presenti dei campi di una tabella. Ho visto che è la proprietà "Origine dati" quella che si occupa di associare/memorizzare in tabella il contenuto dell'oggetto (in questo caso textbox).
Abbiamo avuto necessita di introdurre un campo che per ora abbiamo definito come Memo e per gestirlo abbiamo posto sulla form un oggetto Ole di terza parti che permette di gestire un testo HTML.
Più precisamente Exontrol.
Sapendo che la tabella interessata si chiama email e le Origini dati degli altri campi sono : email.Id, email.oggetto, avendo il campo email.html (memo) come faccio a fare in modo che il contenuto dell'oggetto HTML1 di Exontrol possa essere memorizzato in email.html ?
Premetto che l'Ole Exontrol non possiede la proprietà Origine dati perché in questo caso tutto sarebbe risolto.
Dovrei in fase di accesso scrivere me!.Html1.text=email.html ma non mi accetta/vede il campo email.html.
Praticamente , in un discorso più generale, non sono in grado di indicare/esplicare i campi di una tabella aperta.
Spero di essermi spiegato
Grazie
Daniele

15 Risposte

  • Re: Memorizzare Oggetto Ole

    Danielito_64 ha scritto:


    Abbiamo avuto necessita di introdurre un campo che per ora abbiamo definito come Memo e per gestirlo abbiamo posto sulla form un oggetto Ole di terza parti che permette di gestire un testo HTML.
    Più precisamente Exontrol.
    Quali sono le caratteristiche di questo controllo di terze parti Exontrol? Esiste documentazione disponibile anche per chi non è cliente?
  • Re: Memorizzare Oggetto Ole

    Avverto un po' di confusione tra Memo, OLE, Origine dati…
    Gli OLE sono quasi sempre da evitare. Mi pare di intuire che tu hai bisogno di collegare/richiamare un file o link esterno.
    1. Usa un campo di tipo "testo breve" (255 caratteri)
    2. Dentro scrivi il path
    3. In visualizzazione struttura maschera, a questo controllo (textbox), all'evento "doppio clic" sfrutta l'istruzione Application.FollowHyperlink. Leggi qui
    https://docs.microsoft.com/en-us/office/vba/api/access.application.followhyperlink
  • Re: Memorizzare Oggetto Ole

    Definisci la versione di ACCESS... perchè dalla versione 2007 mi pare supporti RTF.
    In ogni caso se usate un Activex, sperando sia compatibile con Access cosa spesso non vera, serve inserire un Activex...!

    Pensando invece stiate usando una normale versione di Access, spiego che un campo MEMO si usa se il TESTO supera i 255 caratteri, spesso per i Testi formattati in HTML questo accade, quindi il FieldType del Database credo possa andare bene.
    Nella maschera si usa un Controllo TextBox nativo e si modifica la proprietà [Formato Testo] nella Tab(Dati) delle proprietà a "RTF".
    Questo consente di visualizzare il contenuto nella TextBox nativa.

    Siccome però il formato nativo è LIMITATO se dovete visualizzare elementi esterni con la possibilità di avere tutto il Set di TAG HTML potete usare il controllo WebBrowser se non serve EDITARE.

    Insomma hai dato elementi che aprono varie strade e domande... ma prima di prendere una decisione tecnica sevirebbe avere una visione più concreta.
    Serve capire se quel campo HTML viene caricato da fonti esterne o se editato in Access come mail... inquesto caso BUTTA via quel Controllo esterno ed una la TetxBox come ti ho suggerito... in caso contrario... da valutare.
  • Re: Memorizzare Oggetto Ole

    Ringrazio tutti per l'interessamento.
    la versione di Access è la 2010.

    Lo scopo a cui si vuole giungere è gestire una piccola tabella che contenga il contenuto di alcune e-mail da richiamare per essere inviate attraverso la libreria CDO a determinate anagrafiche.
    La libreria CDO ammette come formato per il corpo della e-mail un semplice formato testo oppure HTML.
    Ecco perché ho pensato di memorizzare i corpo delle varie e-mail attraverso un Ole che mi permettesse di scrivere direttamente in quella modalità con tanto di proprietà, font, colori etc..
    Ho già visto in precedenza la possibilità di utilizzare un campo Rtf già messo a disposizione di Access ma avrei dovuto successivamente fare una conversione RTF->HTML perché i 2 formati sono diversi.
    Ecco perché ho cercato un componente che mi permettesse di scrivere direttamente in Html
    http://exontrol.com/exdownload.jsp?product=exhtm

    Il problema è che mi sembra che questo oggetto Ole non abbia una proprietà che lo leghi ad un campo di una tabella, quindi presumo che la successione degli eventi debba essere:

    Prendi il testo html memorizzato in tabella e associalo alla proprietà Text dell'oggetto HTML1.
    Edita il campo
    Dai conferma, salvando il contenuto di HTML1.Text nel campo di tabella.

    Il punto che non mi è chiaro è in che modo io possa "visualizzare", "sostituire" un campo presente in una tabella.
    Forse per chiarire meglio il concetto sarebbe il caso che parta dal linguaggio che conosco è cioè VFP.
    In questo caso, con la tabella email.dbf aperta avrei scritto nel metodo Load della form che contiene l'oggetto Ole:

    HTML1.Text=email.campo_html

    e nel metodo Destroy della form :

    replace email.campo_html with HTML1.Text

    In questo esempio io posso vedere il contenuto della tabella email.dbf e non solo, posso anche sostituire il campo con un nuovo valore.
    In Access non ho capito in che modo si espliciti un campo di una tabella aperta.
    Ho cercato di "spiare" il resto del programma per carpire come si faccia ma ogni campo fa riferimento alla tabella attraverso la proprietà "Origine dati" che, putroppo, non è presente nell'oggetto Ole .

    Grazie
  • Re: Memorizzare Oggetto Ole

    Si il processo è corretto per viaualizzare devi farlo su evento CURRENT di maschera.
    Quindi devi inserire un controllo textbox associato al campo della tabella e renderlo VISIBILE=NO
    Quindi su CURRENT:
    controlloHTML.TEXT=Me.conttolloaasocoatotabella.value

    Attenzione poi se apporti modifiche che devi fare il processo inverso... ovvero trabasare il contenuto del controllo HTML nel controlo nascosto associato al campo in tabella... poi devi forzare il salvataggio del record.

    ma fai attenzione a 2 cose:
    1) devi usare la proprietà VALUE e non text in quanto quest'ultima richiede il focus ed il controllo nascosto non lo può prendere.
    2) NON potrai usarlo in maschere continue.

    Ciao
  • Re: Memorizzare Oggetto Ole

    Grazie Andrea,
    faccio 2 prove e ti dico.
    Daniele
  • Re: Memorizzare Oggetto Ole

    Niente Andrea,
    ho provato a generare una semplice progetto con Access2016 costituito da una tabella chiamata email ed una maschera in cui ho posto i campi ed ho inserito nel current della maschera ciò che mi hai detto ma da sempre errore di sintassi in quella riga.
    E' possibile inviarti questo leggerissimo progetto in forma zippata ?
    Non vedo nessuna funzione di attacchment.

    Grazie
    Daniele
  • Re: Memorizzare Oggetto Ole

    Vediamo cosa risponde Andrea... , chi cavolo è poi quesot Andrea...?

    Io non posso installare Activex... quindi è inutile postarlo, puoi però postare il tuo Codice... partiamo da li.
  • Re: Memorizzare Oggetto Ole

    AH,AH,AH è vero! Non capisco perché ti stia chiamando Andrea. Fra l'altro non conosco alcun Andrea. Boh !
    Dunque, di codice da postare c'è ne veramente poco, una riga.
    Credo che tutto dipenda dall'oggetto OLE.
    Nell'evento Su corrente della maschera ho scritto:

    Option Compare Database
    ----------------------------------------------------
    Private Sub Form_Current()
    HTML1.Text = Me.Testo2.Value
    End Sub

    ove HTML1 è il nome dell'oggetto Ole e Testo2 in nome dell'oggetto testo che ho nascosto e tramite il quale (se ho capito bene) verrà salvato il testo in tabella.

    L'errore ottenuto è: Errore di Runtime 2447 - Uso dell'operatore punto (.), punto esclamativo (!), o delle parentesi non valido.

    Grazie "Andrea"
  • Re: Memorizzare Oggetto Ole

    Hai registrato il controllo ActiveX...?
    Spero sia compatibile con ACCESS
  • Re: Memorizzare Oggetto Ole

    Ciao,
    si, l'active-x viene registrato in automatico durante l'installazione dello stesso.
    Praticamente dal sito ufficiale viene scaricato un eseguibile di installazione che , oltre a generarti una sottocartella sotto Programmi con tutti gli esempi del caso anche in Access, registra l'active-x.
    Nel momento in cui inserisci nella maschera l'oggetto Ole, esso è presente nell'elenco proposto. Quindi Access lo "vede"

    Ho provato a scrutare l'esempio anzi gli esempi in Access ma non ve ne è uno che memorizzi il contenuto della "box Html" in un campo di una tabella.
  • Re: Memorizzare Oggetto Ole

    Hai provato a leggere il contenuto della proprietà TEXT prima...?
    Basta un MSGBOX...
  • Re: Memorizzare Oggetto Ole

    Danielito_64 ha scritto:


    ... tutti gli esempi del caso anche in Access...
    Per dare una smossa al thread penso che l'unica via fosse provare in prima persona e questo è uno dei benefici di avere un computer personale con Access (che ho pagato io!). Non voglio fare pubblicità al prodotto, mi limito a riportare il contenuto del file di esempio per la parte che può essere utile qui.
    Private Sub Form_Load()
    
        With WebBrowser1
            .Navigate "about:blank"
        End With
        With HTML2
            .Appearance = Sunken
            .EditType = exHighlightTags
            .WordWrap = True
            .Object.Locked = True
            .BackColorLocked = 0
            .ForeColorLocked = .ForeColor
            .LineNumberWidth = -1
            .LineNumberBackColor = RGB(240, 240, 240)
            .DrawGridLines = True
        End With
        With HTML1
            .Font.Name = "Times New Roman"
            .Font.Size = 12
            .UseTabKey = True
            .Text = "This is a bit of <off -4>text</off> that <off 4>can</off> be <fgcolor=FF0000>formatted</fgcolor>.<br><b>Select</fgcolor></b> a portion of text and <b><bgcolor=F0F0F0>right</bgcolor> - <bgcolor=D0D0D0>click</b></bgcolor> it to start formatting the selection.<br><i><r>Right - panels, show W3-HTML format in IE."
        End With
    End Sub
    
    Private Sub HTML1_Change()
        Dim sHTML As String
        sHTML = HTML1.HTML
        With WebBrowser1.Document
            .Close
            .write sHTML
        End With
        HTML2.Text = sHTML
    End Sub
    La maschera in cui è presente questo codice contiene 3 oggetti significativi: 1 controllo webbrowser (WebBrowser1) e 2 controlli proprietari exHTML, HTML1 e HTML2.
    Nel controllo HTML1 si vede l'ambiente che ricorda un editor html WYSIWYG, il controllo HTML2 riporta il codice html (con i colori, la numerazione delle righe ecc), il controllo WebBrowser1 mostra come viene visualizzato da Internet Explorer quello che è stato scritto e formattato nel controllo HTML1

    La documentazione dice:
  • Re: Memorizzare Oggetto Ole

    Ma lui non usa il controllo WebBrowser... piuttosto un OCX esterno...
Devi accedere o registrarti per scrivere nel forum
15 risposte