Lettura tabelle
Gli esempi che seguono indicano con [XXX] l'identificativo di una tabella già aperta.
Per limitare la lettura delle colonne vedi istruzione Columns.
Apertura tabella
Apertura di una tabella:
If clalev([F:ITM])=0: Local File ITMMASTER [F:ITM] : Endif
Apertura tabella di un dossier diverso dal corrente:
If clalev([F:YFCT])=0: Local File 'X3.AFCTCUR' [F:YFCT] : Endif
Procedura standard di lettura
In generale, per leggere una tabella:
- Si controlla che non sia già aperta con l'istruzione clalev
- 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.
- Si legge
- 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
Stability
Nel caso di tabelle che variano con grande frequenza e solo in caso di un SQL server, con l'istruzione For si può utilizzare l'istruzione With Stability, per esempio
For [FAS] With Stability ... Next
In pratica fa in modo che il ciclo agisca solo sulle righe già presenti nel db quando il ciclo ha inizio.
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).