Newsgroup: it.comp.lang.visual-basic
Titolo: richtextbox, memo di access e rtf

devo conservare in un db testi anche di alcune centinaia di k ciascuno.
nessun problema, collegando un rtb a un memo.
solo che mi sembra salvi anche l'rtf.
c'e' modo di salvare in automatico solo il .text non formattato, quello che
con .savefile sarebbe rtfText ?
grazie, j.

 quello che con .savefile sarebbe rtfText ?
?
cosě, a memoria, quello č il testo comprensivo dei tag di formattazione,
quindi non capisco cosa intendi.
vuoi fare un databinding, o gestisci la cosa "a mano"?
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 vuoi fare un databinding, o gestisci la cosa "a mano"?
e' collegato a un datacontrol dao. (vecchio progetto che mi tiro dietro e su
cui provo il codice).
se visualizzo il memo nella dbgrid o in access, vedo i tag rtf.
ma se uso .savefile rtftext, salva solo il txt, quindi si dovrebbe potere.
cosi' mi sto trascinando dietro 10k di tag per un "ciao" ...
grazie e ciao, j.

 potere.
il controllo rtf ha una proprietà che restituisce il testo "plain", solo che
mi sembra che nel databinding di vb6 non puoi spiegare al controllo quale è
la proprietà collegata ai dati. forse devi gestirti la cosa a mano in
qualche evento di spostamento del record corrente.


 qualche evento di spostamento del record corrente.
sob, e' per questo che chiedevo se si poteva fare in automatico...
ciao, j.

 sob, e' per questo che chiedevo se si poteva fare in automatico...
boh, io non lo so. ma questo è veramente poco significativo


 boh, io non lo so. ma questo č veramente poco significativo
di nuovo, sono scelte... una proprieta' o un metodo intrinseci possono
semplificare parecchio. scrivere codice su ogni reposition appesantisce un
bel po'.
ciao, j.

 appesantisce un bel po'.
posso concordare. ma in questo caso dobbiamo attendere qualcuno che ci dica
come ottenere il risultato voluto.


> boh, io non lo so. ma questo è veramente poco significativo
Neanch'io ti so aiutare, ma se ti puo' far sentir meglio, e' ancora meno
siginifcativo di quanto possa esserlo per Sergio :)
In ogni caso rimango perpelsso sulla possibilita' di archiviare con un campo
memo piu' di 64KB. Io terrei l'rtf separato e nel db ci metterei un bel link
=)
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

 un campo memo piu' di 64KB.
La guida (DAO) per campi Memo parla di max 1.2Gb

 La guida (DAO) per campi Memo parla di max 1.2Gb
come ho scritto nell'altro post, il limite dei 64k è più da imputare ad
access che a jet. comunque dao ha crashato con molto meno di 1.2 gb,
bisognerebbe indagare se questo limite è in qualche modo influenzato dalla
ram di sistema o da altro.


 come ottenere il risultato voluto.
io sono qui :)
ciao, j.

 La guida (DAO) per campi Memo parla di max 1.2Gb
infatti, mi sembrava di ricordare qc del genere.
il che ipotizza peraltro un db con un solo record, visto il limite di 2gb di
access :)

 visto il limite di 2gb di access :)
ROTFL =)


 =)
cosi' quando scorro 75k record, mi apro e chiudo al volo 75k txt sparsi per
il disco ?
ri-ehm... :)
ciao, j.

 ri-ehm... :)
Mi stai dicendo che quando scorri 75K record, hai la _necessita'_ di vedere
il contenuto del campo memo?
Cioe', vorresti a video in una scrollata di record, (ipotesi) 75.000*50.000
= 3.750.000.000 caratteri?
A che pro presentare _tutto_ il testo in fase di scroll?
Io ci metterei un bel pulsante "Vedi allegato" che apre il link su
richiesta, piuttosto che visualizzarlo in automatico!
Lokar.pepplesso


 richiesta, piuttosto che visualizzarlo in automatico!
questo è sicuramente vero, ma se poi vuoi fare una ricerca testuale
all'interno dei vari testi, non sarà certo veloce, ma se hai tutto nel memo
te la cavi con un like, se i testi li hai nei link ti devi smazzare un po'
di più.
poi, naturalmente, potremmo anche dire che, come softwaristi, il nostro
lavoro è proprio quello di smazzarci :-)


 di smazzarci :-)
Posso solo aggiungere "ahinoi"...
Lokar


 Lokar.pepplesso
ci memorizzo mail, codice dai ng, ecc ecc.
quando cerco qualcosa voglio trovarla *velocemente*.
mi ruga solo non avere un monitor alto 3000 pixel, mi costringerebbe a
scrollare meno :)
ciao, j.

[javalab = 
circa...@labrador.ca
 in
c77q7t$l6bt$
1...@ID-51318.news.uni-berlin.de
] ha scritto:

J, ho appena provato a fare qualcosa che ... non conosco.
Ho collegato un Data a un database e un RTB a un campo della tabella in
RecordSource del Data1.
La tabella ha un campo Memo.
Secondo me (ma non ci sono riuscito) occorre agire sull'evento Validate del
Data1 che dovrebbe avvenire prima dell'Update implicito. Ho provato anche
forzando un .Edit sul Data1.Recordset e mettendo nel campo Memo quel che
voglio, ma credo che alla fine lui ci vada sopra quando fa l'Update
automatico prelevando il textRTF dal RTB. Mi par di capire che questa è
l'ultima cosa che fa prima di spostarsi su altro record.
Ho guardato anche il metodo UpdateRecord, ma da quanto scritto non si
capisce (io non capisco) a cosa serva (se non per evitare l'evento
Validate).
Su una DataGrid collegata al Data1 si può agire nell'evento BeforeUpdate, ma
non credo che basti la capacità di una colonna. A quel punto tanto varrebbe
collegare il campo a un textbox (se si può fare a runtime) nel quale mettere
il testo pulito, ma ci sarebbe il limite di 32/64Kb del textbox...
Non mi resta che propendere (anch'io) per metter via il nome del file e
quando carichi un record esporne il contenuto nel RTB che ti consente la
ricerca, ma a quel punto, se devi salvare le modifiche, devi comunque
trascinarti la sintassi RTF, tanto vale che lasci le cose come stanno.
Non ho capito come puoi impunemente decidere di rinunciare a tale
sintassi... come se il testo non fosse mai modificabile, nè visionabile
sfrottando la sintassi stessa...

 Posso solo aggiungere "ahinoi"...
vedete ? lo spirito e' tutto. se lo faceste gratis, sareste due cherubini
inneggianti e volteggianti e intorno a stallman :)

 menatine :)
J, non puoi, dopo l'abbandono di un record (con conseguente scrittura),
usando in ID da te gestito in memoria che contenga un riferimento univoco al
record precedente (appena scritto), caricare in un recordset normale (non
boundato) il campo memo, metterlo in un RTF invisibile e riscrivere il campo
salvando il test senza RTF?

[Lupo = 
circa_LupoOrm...@libero.it
 in
c78avp$st54$
1...@ID-174464.news.uni-berlin.de
] ha scritto:

Questo pare funzionare:
'Dim id
'Dim old_id
Dim ignora_reposition As Boolean
Private Sub Data1_Reposition()
    If ignora_reposition Then Exit Sub
    'old_id = id
    'id = Data1.Recordset!id
    'Label1.Caption = "id=" & id
    'Label2.Caption = "old_id=" & old_id
    rtb2 = Data1.Recordset!CMEMO
    ignora_reposition = 1
    Data1.Recordset.Edit
    Data1.Recordset!CMEMO = rtb2.Text
    Data1.Recordset.Update
    ignora_reposition = 0
End Sub
Private Sub Form_Load()
    'old_id = 0
    'id = 0
End Sub

 salvando il test senza RTF?
si', per quanto macchinosa stavo pensando a mettere un txtbox normale e
raddoppiare il memo, controllando che nel secondo ci vadano solo i primi
64k, se maggiore. ma mi fa abbastanza orrore ed e' poco utile per ricerche
serie.
anni fa mi semrbava di aver visto, se non me lo sono sognato, che se non si
toccano le proprieta' del rtb, nel memo ci andava solo il text normale. al
momento non sono riuscito a ricreare la cosa, ma insistero'.
grazie, j.

 End Sub
in griglia continuo a vedere i tag.
in vena di prove ho messo un altro memo collegandolo a un text normale nel
quale buttare il .text del rtb, ma il db tiene giusto 64k per record.
boh, provo a dormirci su
grazie, j.

 in griglia continuo a vedere i tag.
Non avevi detto che usavi anche una griglia.
Rinfrescala dopo quelle istruzioni e dovrebbe essere tutto ok.
(l'avevo messa anch'io. bastava spostarsi col data che anche la griglia si
adeguava, senza tags)

 per record.
Se ho ben capito quello che intendi, quella è una limitazione del textbox
(32k per win9x, se non erro), non del campo memo sul database.

 adeguava, senza tags)
http://www.sundaysw.com/tmp/access2.png
text e' il memo.
text2 e' un altro memo cui e' collegato un txt normale, text1.
perfetto, non fosse che taglia a 64k. il brutto e': senza dare errori di
sorta, come almeno faceva in win9.
(ora ho cambiato i nomi dei campi memo1 e memo2, mi era venuto anche il
dubbio assurdo che si incasinasse fra !text e .text... comunque non cambia
niente :)
al load ordina sul campo della stazza, descending.
qui l'ho spostato sul secondo record, quindi la griglia e' aggiornata.
codice (scusa il casino, ma sto provando di tutto, ho l'impressione che mi
sfugga qualcosa di ovvio):
Private Sub Data1_Reposition()
    Text1 = RTB.Text
'    Clipboard.Clear
'    'Clipboard.SetText Text1
'    If Not IsNull(Data1.Recordset!text2) Then Clipboard.SetText
Data1.Recordset!text2
(per vedere se nel text normale e nel rs ci sono solo 64k)
'    Clipboard.Clear
'    Clipboard.SetText RTB.Text, vbCFText
'    RTB2.Text = Clipboard.GetText(vbCFText)
(con un secondo rtb, in cui mettere testo non formattato senza modificare
nessuna proprieta' del controllo)
    If ignora_reposition Then Exit Sub
'    'old_id = id
'    'id = Data1.Recordset!id
'    'Label1.Caption = "id=" & id
'    'Label2.Caption = "old_id=" & old_id
'    Clipboard.Clear
'    Clipboard.SetText RTB.Text, vbCFText
'    RTB.Text = Clipboard.GetText(vbCFText)
    RTB = Data1.Recordset!Text
    ignora_reposition = 1
    Data1.Recordset.Edit
    Data1.Recordset!Text = RTB.Text
'provato anche
'Data1.Recordset!Text = Clipboard.GetText(vbCFText)
    Data1.Recordset.Update
    DBG.Refresh
    ignora_reposition = 0
End Sub
ho anche tentato di aggiornare l'mdb a 2000, e' passato da 180 a 280mb. come
non detto.
adesso con calma vedremo se e' piu' testardo lui o io, senza barare con
appendchunk e simili :)
ciao, j.

 di sorta, come almeno faceva in win9.
64kb (o 32) è un limite del controllo textbox, non del campo memo...
Senza passare dal textbox, se il problema è solo quello della griglia, vedi
l'altro mio post (rinfresca la griglia)

 (32k per win9x, se non erro), non del campo memo sul database.
mi sembra fosse 64 anche in win9, ma soprattutto direi che in w9 desse un
errore secco passando i 64k. in nt la capienza e' quella ma non da' errori,
e non mi sembra una gran soluzione:
Option Explicit
Dim bStop As Boolean
Private Sub Command1_Click()
    bStop = False
    Dim s As String, s2 As String, j As Long
    s = "0123456789"
    For j = 1 To 10
        s2 = s & s2
    Next
    While Not bStop
        Text1 = Text1 & s2 & vbCrLf
        Caption = Format(Len(Text1), "###,###,###,###,###")
        DoEvents
    Wend
End Sub
Private Sub Command2_Click()
    bStop = True
End Sub

     DBG.Refresh
E questo l'aggiornamento della griglia (che non dovrebbe piů mostrare i tags
per il record salvato), non so se va qui o appena si esce dal reposition...


 per il record salvato), non so se va qui o appena si esce dal
reposition...
non cambia. se la griglia e' legata al dc, e modifichi un text collegato al
dc, la griglia db, sia dao che ado, riflette *immediatamente* le variazioni.
e se c'e' un rtb i tag se li tiene.
potrebbe forse funzionare una cosa del tipo (dal tuo codice commentato, mi
sa che l'hai tentata):
- ti metti su un record e annoti l'id; carichi, via rtb ma in formato txt,
il contenuto del memo negli appunti.
- ti sposti di riga
- via rs, non dc, becchi il record di prima e incolli il txt nel memo.
solo che su alcune decine di migliaia di record e' un massacro, quasi quanto
open/close di n file di testo. unico vantaggio: puoi fare delle query
sensate; pero' ogni volta che torni su quel record, il rtb rimette i tag.
comunque gia' col tuo codice, o con qualunque codice che giochi pesante sul
reposition, questo lap di scorta (700mhz) barcolla abbastanza.
ci dev'essere una soluzione piu' immediata che mi sfugge. cosi' e' troppo
stupido. word se apri un txt e non modifichi niente mica salva subito nel
suo formato. e notepad in nt non tronca a 64k.
ciao, j.

 commentato, mi sa che l'hai tentata):
Volevo, ma non mi era servito.

 sarò più preciso col codice e gli oggetti nella form
MIRACOLUPO !
pero' prima di guardare lo snap fatti una caLmomilla, ero giovane, ingenuo,
e archiviavo anche la netiquette :)
http://www.sundaysw.com/tmp/access3.png
Private Sub Data1_Reposition()
    If ignora_reposition Then Exit Sub
    ignora_reposition = 1
    Data1.Recordset.Edit
    Data1.Recordset!memo1 = RTB.Text
    Data1.Recordset.Update
    DBG.Refresh
    ignora_reposition = 0
End Sub
il refresh ci vuole.
grazie 1000.
adesso vedo se c'e' modo di alleggerire un po' su un eventuale scorrimento
del dc.
ma di solito vado via rs, quindi perfetto cosi'.
ciao, j.

 ma di solito vado via rs, quindi perfetto cosi'.
Ancora non ho capito ( e tu non hai risposto all'antico dubbio :-P ):
1) E' chiaro che vuoi ridurre le dimensioni del database non memorizzando
tutte le tags di un RTF
2) E' chiaro perchè tu voglia un campo (memo o mamo?) sul database: per
poter fare delle Select con Like
3) E' chiaro che le Select con Like puoi farle anche sul plain-text
4) E' chiaro che memorizzare il path del file non ti consentirebbe le Select
con Like
Ma:
-Non è chiaro come tu possa pretendere di vedere il tuo RTB compilato come
da originale (quindi con le tags RTF) se nel database memorizzi _solo_ il
plain-text... (a meno che tu non memorizzi _anche_ , in altro campo memo, il
.textRTF, ma questo contrasterebbe col punto 1)
Mi togli quest'ultimo dubbio?

 plain-text...
alla formattazione tenevo all'inizio, soprattutto per usare il courier con
testi che avevano bisogno di incolonnamento. ora mi interessa poco. non
tagliasse a 64, andrebbe benissimo il textbox.
rigrazie, j.