Difference between revisions of "Lettura tabelle"
(→Altro) |
|||
| (3 intermediate revisions by 3 users not shown) | |||
| Line 4: | Line 4: | ||
Per limitare la lettura delle colonne vedi istruzione '''[[Columns]]'''. | Per limitare la lettura delle colonne vedi istruzione '''[[Columns]]'''. | ||
| + | |||
| + | == Apertura tabella == | ||
| + | Apertura di una tabella: | ||
| + | <pre>If clalev([F:ITM])=0: Local File ITMMASTER [F:ITM] : Endif</pre> | ||
| + | Apertura tabella di un dossier diverso dal corrente: | ||
| + | <pre>If clalev([F:YFCT])=0: Local File 'X3.AFCTCUR' [F:YFCT] : Endif</pre> | ||
== Procedura standard di lettura == | == Procedura standard di lettura == | ||
| Line 55: | Line 61: | ||
NUMERO = [F:YCE]YSEQMAR | NUMERO = [F:YCE]YSEQMAR | ||
Next</pre> | Next</pre> | ||
| + | |||
| + | === Stability === | ||
| + | Nel caso di tabelle che variano con grande frequenza e solo in caso di un SQL server, con l'istruzione <code>For</code> si può utilizzare l'istruzione <code>With Stability</code>, 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 == | == Lettura con filtro == | ||
| Line 114: | Line 128: | ||
== Altro == | == Altro == | ||
| + | |||
* rowcount() contiene il numero di record di un file appena aperto, e tiene conto dei filtri applicati; per esempio <code>rowcount([F:ITM])</code> | * rowcount() contiene il numero di record di un file appena aperto, e tiene conto dei filtri applicati; per esempio <code>rowcount([F:ITM])</code> | ||
* nbrecord() returns the number of lines on a table opened by File or Trbegin. | * nbrecord() returns the number of lines on a table opened by File or Trbegin. | ||
* adxdlrec contiene il numero di record cancellati con l'istruzione <code>Delete (classe)</code> | * adxdlrec contiene il numero di record cancellati con l'istruzione <code>Delete (classe)</code> | ||
| − | * nbrecord() dà il numero di record della tabella passata come parametro (la tabella deve essere aperta). | + | * adxuprec contiene il numero di record modificati con l'istruzione <code>Update (classe)</code> |
| + | * 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] === | ||
| + | All'apertura di una tabella con l'istruzione <code>File</code> oltre alla classe [F:XXX] viene aperta anche la classe [G:XXX]. | ||
| + | |||
| + | Questa classe contiene: | ||
| + | * <code>Adxfname(0..N)</code> nome dei campi di una tabella | ||
| + | * <code>Currind</code> numero dell’ultima chiave utilizzata | ||
| + | * <code>Currlen</code> numero di campi della chiave da considerare | ||
| + | * <code>Filenume</code> (non utilizzabile) | ||
| + | * <code>Keylen(0..k)</code> numero di byte utilizzati per ogni chiave | ||
| + | * <code>Keyname(0..k)</code> nome per ogni chiave | ||
| + | * <code>Keyuniq(0..k)</code> 1 senza omonimi; 0 con omonimi | ||
| + | * <code>Nbind</code> numero di chiavi | ||
| + | * <code>Nbzon</code> numero di campi | ||
| + | * <code>Tairec</code> dimensione record in numero di byte | ||
Latest revision as of 11:09, 10 July 2019
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 tabellaCurrindnumero dell’ultima chiave utilizzataCurrlennumero 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 omonimiNbindnumero di chiaviNbzonnumero di campiTairecdimensione record in numero di byte