Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315

    [delphi] campi memo in IBTabella

    ciao a tutti,

    devo memorizzare un campo Memo in una IBtabella.
    tale campo lo gestisco con il componente DBMemo.

    ho creato la mia IBtabella con un Field cosi:

    NOTEMEMO VARCHAR(10922);

    o devo fare in maniera differente?

    grazie

  2. #2
    A mio modesto avviso mi sembra uno spreco ECCESSIVO di memoria!

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Per una dimensione del genere, meglio se usi un campo BLOB (sottotipo Text).

    Per curiosità, come mai una lunghezza così precisa come 10922?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    io non ho interessi particolari affinche questo campo MEMO sia di una grandezza particolare.... vorrei pero dare la possibilita' all'utente di poter memorizzare un testo libero.

    voi usate i campi blob, o usate semplicemente una dimensione minore?



    Per curiosità, come mai una lunghezza così precisa come 10922?
    ho letto da un manuale di Firebird---tipi dati:

    4.2.7. I tipi CHAR e VARCHAR
    In InterBase si usano prevalentemente il tipo CHAR() e VARCHAR() per memorizzare caratteri e stringhe:
    Il tipo carattere a lunghezza fissa, CHAR(n), o CHARACTER(n), dove (n) è il numero esatto di caratteri da memorizzare.

    Il tipo carattere a lunghezza variabile, VARCHAR(n), o CHARACTER
    VARYING(n), dove (n) è il numero massimo di caratteri da memorizzare.

    Gli altri due tipi sono NCHAR e NCHAR VARYING che sono gli stessi dei tipi 1 e 2 ma si riferiscono solo ai caratteri europei. Conviene comunque usare solo CHAR e VARCHAR. Si può specificare il set di caratteri quando si crea un campo stringa in una tabella.
    Esempio:
    CREATE TABLE IMPIEGATO
    (NOME VARCHAR(12) CHARACTER SET ISO8859_1, ...);
    In questo caso si tratta di un set di caratteri europei.

    Attenzione
    Il numero massimo di caratteri non può superare i 32767 bytes. Per memorizzare un carattere occorrono da 1 a 3 bytes. Questo dipende dal tipo di carattere che avete scelto.Se volete rimanere sempre entro il limite massimo, dichiarate un numero di caratteri minore o uguale a 10922 (32767/3).
    ...visto che pero ne ero quasi consapevole di fare un errore ho chiesto a voi del forum....

    grazie

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da 123delphi321
    voi usate i campi blob, o usate semplicemente una dimensione minore?
    Io uso campi BLOB: non voglio occuparmi di gestire la dimensione massima di un testo in forma libera se il database è in grado di memorizzarne uno di lunghezza elevata.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ho modificato la struttura della mia tabella inserendo il field tipo blob.

    riesco ad inserire e modificarne il valare.... tutto bene.

    adesso lo ho inserito in una dbgrid. come posso fare per visualizzare e/o modificare il contenuto?

    credevo fosse stato possibile attivare un ButtonStyle = cbsEllipsis per poi inteccetare l'evento....

    come avete risolto?

    grazie
    fulvio

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da 123delphi321
    adesso lo ho inserito in una dbgrid. come posso fare per visualizzare e/o modificare il contenuto?
    I campi BLOB possono essere di varia natura, perciò la DBGrid si rifiuta di tentare di visualizzare il contenuto del campo inizialmente.

    Il mio suggerimento è quello di evitare, per quanto possibile, la visualizzazione del campo, dato che in caso di testi molto lunghi potrebbe generare effetti collaterali, soprattutto rallentamenti nella visualizzazione dei dati reperiti.

    Se proprio desideri mostrare il contenuto del campo, devi aprire il "Field Editor" facendo doppio clic sul componente Table e definire i campi in modo persistente. Ciascun campo possiede l'evento OnGetText (e OnSetText): in questi eventi, puoi estrarre il valore testuale contenuto nel BLOB (metodo AsString) e restituirlo sottoforma di stringa al parametro opportuno passato al metodo di gestione dell'evento.

    Sulla Guida in linea trovi maggiori dettagli a riguardo e anche un esempio, se non ricordo male.

    Originariamente inviato da 123delphi321
    credevo fosse stato possibile attivare un ButtonStyle = cbsEllipsis per poi inteccetare l'evento....
    La proprietà ButtonStyle non ha nulla a che vedere con questa problematica: serve solamente a definire cosa deve comparire a margine della cella del campo; impostata a cbsEllipsis, visualizza un pulsante del quale è possibile intercettarne il clic, ma questo non influisce sulla visualizzazione vera e propria del campo che si ottiene così come ti ho descritto.
    Il ButtonStyle potrebbe permetterti, ad esempio, di aprire sul clic una finestra di dialogo per modificare in modo esteso il testo che l'utente vede apparire, solo in parte, nella cella corrispondente al campo BLOB testuale.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.