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
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
A mio modesto avviso mi sembra uno spreco ECCESSIVO di memoria!
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...
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?
ho letto da un manuale di Firebird---tipi dati:Per curiosità, come mai una lunghezza così precisa come 10922?
...visto che pero ne ero quasi consapevole di fare un errore ho chiesto a voi del forum....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).
grazie
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.Originariamente inviato da 123delphi321
voi usate i campi blob, o usate semplicemente una dimensione minore?
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
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
I campi BLOB possono essere di varia natura, perciò la DBGrid si rifiuta di tentare di visualizzare il contenuto del campo inizialmente.Originariamente inviato da 123delphi321
adesso lo ho inserito in una dbgrid. come posso fare per visualizzare e/o modificare il contenuto?
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.
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.Originariamente inviato da 123delphi321
credevo fosse stato possibile attivare un ButtonStyle = cbsEllipsis per poi inteccetare l'evento....
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...