Newsgroup: it.comp.lang.vo-clipper
Titolo: campi memo, driver cdx e VO 2.5a1

Il  metodo  aggiornaServer()
ha il  compito di registrare su archivio il valore delle variabili
bufferizzate come spiegato da Fabio Cresta su un suo libro.
funziona benissimo con un driver ntx
c'è un problema con quello cdx
ad un certo punto del metodo mi assicuro che venga scritto il record su
disco
   oServer:Commit()
poi sblocco il record precedentemente bloccato
   oServer:Unlock(oserver:recno)
eseguo il refresh del server per aggiornare la mia databrowser in tempo
reale.
  oServer:refresh()
il metodo va a meraviglia sia con i driver ntx che cdx ma se una variabile è
un campo memo e il driver è cdx nasce un problema:
la chiamata oServer:refresh() elimina il contenuto della variabile memo dal
file dbf. (ho verificato che prima del refresh  il valore era scritto su
server )
se ometto la chiamata oServer:refresh() il contenuto del campo memo rimane
nel dbf ma la mia databrowse non si aggiorna in tempo reale.
in definitiva la chiamata oServer:refresh elimina il contenuto del campo
memo se e solo  se il driver è un cdx.
AIUTO voglio  evitare di riutilizzare il driver ntx.


prova con Browser:refresh()
Saluti
Paolo Calzi

Usando la POTENZA dei fieldspec mi sono creato dui metodi che richiamo dalla
mia applicazione :
METHOD PutData() CLASS MiaEditWindow
   LOCAL a AS INT     // contatore dell'array
 FOR a := 1 UPTO ALen(SELF:aControls)
        IF ! Empty(SELF:aControls[a]:FIELDSpec)
SELF:Server:FIELDPUT(AsString(SELF:Acontrols[a]:FIELDSpec),SELF:aControls[a]
:Value)
  ENDIF
 NEXT
RETURN NIL
In pratica memorizza il contenuto delle variabili associate al rispettivo
FieldSpec, nel relativo campo del Server (SELF:Server). L'unica cosa da
tenere presente e che OGNI CONTROLLO DELLA FINESTRA che contiene un dato dal
o per il DBServer deve essere associato al rispettivo FieldSpec del
DBServer.
Quest'altro metodo prende i dati dal DBServer :
METHOD GetData() CLASS MiaEditWindow
 LOCAL a AS INT
 FOR a := 1 UPTO ALen(SELF:aControls)
        IF ! Empty(SELF:aControls[a]:FIELDSpec)
   SELF:aControls[a]:Value :=
SELF:Server:FIELDGET(AsString(SELF:Acontrols[a]:FIELDSpec))
  ENDIF
 NEXT
RETURN NIL
Quest'altro AZZERA i Campi per un nuovo inserimento :
METHOD BlankFields() CLASS MiaEditWindow
 LOCAL a AS INT     // contatore dell'array
 FOR a := 1 UPTO ALen(SELF:aControls)
        IF ! Empty(SELF:aControls[a]:FIELDSpec)
   DO CASE     // se il controllo attuale è :
   CASE SELF:aControls[a]:FieldSpec:ValType == "C"   // tipo carattere
    SELF:aControls[a]:TextValue := Space(aControls[a]:FieldSpec:Length)
   CASE SELF:aControls[a]:FieldSpec:ValType == "D"   // tipo data
    SELF:aControls[a]:TextValue := AsString(NULL_DATE)
   CASE SELF:aControls[a]:FieldSpec:ValType == "N"   // tipo numerico
    SELF:aControls[a]:TextValue := "0"
   CASE SELF:aControls[a]:FieldSpec:ValType == "L"   // tipo logico
    SELF:aControls[a]:TextValue := ".F."
   ENDCASE
  ENDIF
 NEXT
RETURN NIL
SE ci sono dei controlli che non prevedono l'associazione a FieldSpec (es.
RadioButton), nessun problema nei metodi di cui sopra si scrive a mano
oCCRadioButton1 := ..........
Per usarli :
METHOD ButtonOk() CLASS MiaEditWindow
     BLOCCO IL FILE E APPENDO UN NUOVO RECORD
     SELF:PutData()
     SELF:Server:Commit()
     SELF:Server:Unlock()






 NEXT
RETURN NIL





 NEXT
RETURN NIL





  ENDIF
 NEXT
RETURN NIL

Per usarli :
METHOD ButtonOk() CLASS MiaEditWindow

Mi trovo benissimo (mai avuto problemi con alcun RDD) e risparmio tempo e
codice !!!!
Feci un articolo a suo tempo sui FieldSpec su DEV la rivista è la numero 68
del Novembre 1999
se ti interessa richiedila.
Ciao

 ha scritto nel messaggio
news:KTzj6.26404$7U4.6...@news.infostrada.it...


 ha scritto nel messaggio
news:daMj6.29056$LM4.3...@twister1.tin.it...
