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[edit]
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[edit]
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[edit]
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[edit]
For [XXX] Where CAMPO = CONDIZIONE Next
Esempio:
For [F:YCE] Where YCODMAR = [M:YCE0]YCODMAR ... NUMERO = [F:YCE]YSEQMAR Next
Stability[edit]
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[edit]
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[edit]
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[edit]
- 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)
- adxuprec contiene il numero di record modificati con l'istruzione
Update (classe)
- nbrecord() dà il numero di record della tabella passata come parametro (la tabella deve essere aperta)
- fileabre(5)() abbreviazioni delle tabelle aperte
- filename(255)() nomi delle tabelle aperte
Classe [G:XXX][edit]
All'apertura di una tabella con l'istruzione File
oltre alla classe [F:XXX] viene aperta anche la classe [G:XXX].
Questa classe contiene:
Adxfname(0..N)
nome dei campi di una tabellaCurrind
numero dell’ultima chiave utilizzataCurrlen
numero di campi della chiave da considerareFilenume
(non utilizzabile)Keylen(0..k)
numero di byte utilizzati per ogni chiaveKeyname(0..k)
nome per ogni chiaveKeyuniq(0..k)
1 senza omonimi; 0 con omonimiNbind
numero di chiaviNbzon
numero di campiTairec
dimensione record in numero di byte