Lettura tabelle

From SageDev KB
Revision as of 14:18, 4 June 2019 by Mwadmin (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Gli esempi che seguono indicano con [XXX] l'identificativo di una tabella già aperta.

Per limitare la lettura delle colonne vedi istruzione Columns.

Procedura standard di lettura

In generale, per leggere una tabella:

  1. Si controlla che non sia già aperta con l'istruzione clalev
  2. Se non è aperta si apre indicando un'etichetta con cui poi ci riferiremo alla tabella; in questo modo è possibile aprire due volte la stessa tabella.
  3. Si legge
  4. Si controlla che la lettura sia andata a buon fine attraverso la variabile fstat

Esempio:

If !clalev([F:YADI])           :# controllo che non sia aperta
  Local File ATABDIV [F:YADI]  :# dichiarazione di apertura tabella con etichetta YADI
Endif
Read[F:YADI]CODE = 6052;ABFIC  :# lettura da tabella (in questo caso specifico è una tabella diversa, capitolo 6052)
If fstat                       :# controllo che la lettura sia andata a buon fine
  Infbox "Errore"                  
Else
  InfBox "ok"                  :# se fstat=0 è tutto ok
Endif

Forma breve:

If !clalev([F:YADI]) : Local File ATABDIV [F:YADI] : Endif : #commento

Lettura puntuale di un record

Read [XXX]indice = KEY1;KEY2

Per sapere come è definito l'indice andare a vedere la tabella da leggere in GESATB, nella scheda indici.

Esempio (attenzione ai doppi apici da mettere per ogni valore scritto direttamente come stringa)

Read [XXX]indice = "STR1";"STR2"

equivalente di

VARIABILE2="STR2"
Read [XXX]indice = "VAL1";VARIABILE2

Lettura sequenziale di record

 For [XXX] Where CAMPO = CONDIZIONE
Next

Esempio:

 For [F:YCE] Where YCODMAR = [M:YCE0]YCODMAR
   ... 
  NUMERO = [F:YCE]YSEQMAR
 Next

Lettura con filtro

 Filter [F:YCE]      # Azzero eventuale filtro precedente
 Filter [F:YCE] Where YCODMAR = [M:YCE0]YCODMAR Order By YSEQMAR Desc       # applico filtro
 #oppure Where key NOMEINDICE=campo1;campo2;campo3
 # è possibile utilizzare Order by (staccato, non OrderBy), per es. Order By RANG Asc; NOM(1) Desc

 For [F:YCE]  
   Break  #istruzione non necessaria
 Next
 Filter [F:YCE] # tolgo filtro

Se la tabella è aperta con una condizione Where, le condizioni di Filter vengono applicate ai record già selezionati (come fosse in "and").
Nel codice sorgente l'istruzione Link indica una join tra tabelle

E' possibile utilizzare una variabile contenente un criterio:

Local Char CRIT(50)(3)
CRIT(0)="ABREV='Orig' "
CRIT(1)="And MOT>='A'"
Filter [ABR] Where evalue(CRIT)

Si può fare anche Local File AABREV[ABR] where evalue(CRIT)

Lettura metadati tabella

Riporto un esempio in cui vengono visualizzate le caratteristiche di una tabella.

Call LEGGIDATI_TABELLA("YITMINF")
End 

Subprog LEGGIDATI_TABELLA(TABELLA)
    Value Char TABELLA()
    File = TABELLA [YYLT]

    Infbox 'Ci sono '-num$([G:YYLT]nbzon)-' campi nella tabella CLIENTI:'
    For I = 0 To [G:YYLT]nbzon - 1
        Infbox [G:YYLT]adxfname(I)
    Next I

    Infbox 'Ci sono '-num$([G:YYLT]nbind)-'indici nella tabella CLIENTI:'
    For I = 0 To [G:YYLT]nbind - 1
        Infbox [G:YYLT]keyname(I)
        Case [G:YYLT]keyuniq(I)
        When 0 : Infbox ' (Con Omonimi) '
        When 1 : Infbox ' (Senza Omonimi) '
        When 2 : Infbox ' (Più omonimi) '
        Endcase
        Infbox 'Lunghezza = '-num$([G:YYLT]keylen(I))
        Infbox 'Dimensione totale record = '-num$([G:YYLT]tairec)
    Next I
End

Altro

  • rowcount() contiene il numero di record di un file appena aperto, e tiene conto dei filtri applicati; per esempio rowcount([F:ITM])
  • nbrecord() returns the number of lines on a table opened by File or Trbegin.
  • adxdlrec contiene il numero di record cancellati con l'istruzione Delete (classe)
  • nbrecord() dà il numero di record della tabella passata come parametro (la tabella deve essere aperta).