XBROWSE: clausola SELECT per filtrare solo alcuni record

Moderator: Enrico Maria Giordano

Post Reply
User avatar
max
Posts: 122
Joined: Fri Jun 30, 2006 2:14 pm
Location: Ancona - Italy

XBROWSE: clausola SELECT per filtrare solo alcuni record

Post by max »

Dovrei filtrare su un XBROWSE solo alcuni record, lavorando sul contenuto del campo chiave.
Ho visto che si può fare utilizzando la SELECT, ma non riesco a farla funzionare come dovrebbe. Questo è il mio codice:

Code: Select all

local oBRW,oDLG
use clienti 
index on importo to custntx
DEFINE DIALOG oDLG RESOURCE "PROVA" 
redefine XBROWSE oBRW ID 101 of oDLG FIELDS clienti->ragsoc,clienti->importo ;
      SELECT IMPORTO FOR IMPORTO=1000 TO IMPORTO=1000 ;
      FIELDSIZES 150,150 ;
      HEADERS "RAGIONE SOCIALE","IMPORTO"
ACTIVATE DIALOG oDLG CENTERED 
Messo così (e in altre forme leggermente diverse che ho provato), l'xbrowse sempre e comunque butta fuori tutti i record e non solo quelli con importo=1000 che è invece quel che vorrei.
Non sono riuscito a trovare esempi in merito in \fwh\samples: qualcuno può darmi una dritta in merito?
grazie.


FWH 8.04 - XHARBOUR 1.1.0
User avatar
max
Posts: 122
Joined: Fri Jun 30, 2006 2:14 pm
Location: Ancona - Italy

Post by max »

Nulla da fare: ho provato e ri-provato anche così ed è come se non lo sentisse proprio...
User avatar
max
Posts: 122
Joined: Fri Jun 30, 2006 2:14 pm
Location: Ancona - Italy

Post by max »

Ho ricontrollato anche il file indice, ho provato a creare l'indice su un campo Character anziché numerico... ma niente, non riesco proprio a farla funzionare.
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Prova con un TWBrowse. Se con quello funziona e con l'XBrowse no allora è certamente un problema in quest'ultimo.

Comunque per me la soluzione migliore è utilizzare la funzione OrdScope().
User avatar
max
Posts: 122
Joined: Fri Jun 30, 2006 2:14 pm
Location: Ancona - Italy

Post by max »

ordscope() ??
Non la trovo nella documentazione né nei samples: puoi darmi qualche input che poi provo anch'io?
grazie.
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Come fai a non trovarla? E' una funzione standard del Clipper. Dalle Norton Guides:
ORDSCOPE()
Set or clear the boundaries for scoping key values in the controlling order

Syntax

ORDSCOPE(<nScope>, [<expNewValue>]) --> uCurrentValue

Arguments

<nScope> is a number specifying the top (TOPSCOPE) or bottom
(BOTTOMSCOPE) boundary.

Note: To use the TOPSCOPE and BOTTOMSCOPE constants, you must
include (#include) the Ord.ch header file in your application.

<expNewValue> is the top or bottom range of key values that will be
included in the controlling order's current scope. <expNewValue> can be
an expression that matches the data type of the key expression in the
controlling order or a code block that returns the correct data type.

Omitting <expNewValue> or specifying it as NIL has the special effect of
resetting the specified scope to its original default. The default top
range is the first logical record in the controlling order, and the
default bottom range is the last logical record.

Returns

If <expNewValue> is not specified, ORDSCOPE() returns and clears the
current setting. If <expNewValue> is specified, the function sets it
and the previous setting is returned.

Description

The range of values specified using ORDSCOPE() is inclusive. In other
words, the keys included in the scope will be greater than or equal to
the top boundary and less than or equal to the bottom boundary.

Note: To return current settings without changing them, call the
DBORDERINFO() function using the DBOI_SCOPETOP and DBOI_SCOPEBOTTOM
constants.

Examples

þ This example illustrates using ORDSCOPE() to set various
scoping limitations on an order:

USE Friends
SET INDEX TO Age

// Make 25 the lowest age in range
ORDSCOPE(TOPSCOPE, 25)

// Make 30 the highest age in range
ORDSCOPE(BOTTOMSCOPE, 30)
LIST Age // Shows records with
// 25 <= Age <= 30

// Change highest age to 35
ORDSCOPE(BOTTOMSCOPE, 35)
LIST Age // Shows records with
// 25 <= Age <= 35

// Reset top boundary
ORDSCOPE(TOPSCOPE, NIL)
LIST Age // Shows records with
// Age <= 35


// Reset bottom boundary
ORDSCOPE(BOTTOMSCOPE, NIL)
LIST Age // Shows all records

Files Library is CLIPPER.LIB, header file is Ord.ch.
EMG
User avatar
max
Posts: 122
Joined: Fri Jun 30, 2006 2:14 pm
Location: Ancona - Italy

Post by max »

Confesso di non averla mai usata né conosciuta.
(Prima di scriverti poi sono pure andato a cercarla nella mia guida NG di clipper e delle clippertools e non l'ho trovata. Forse ne ho una più vecchia, boh...!)

Comunque se questa va e non ha gli intoppi del SET FILTER nei dbf con molti record allora la uso anch'io di sicuro.
grazie.
Post Reply