2016-06-21 25 views
1

私は、ビューが配置されたフォーム上にグリッドを持っています。私は、データをフィルタリングするためのボタンを追加しました。変数が見つかりません

cFilter = UPPER(ALLTRIM(INPUTBOX("Filter sur :","Spectech France - Suivi DDP"))) 

SELECT vwDdp_all 

LOCATE FOR ALLTRIM(ref_client) = cFilter 
IF FOUND() 
    SET FILTER TO ref_client = cFilter 
    THISFORM.grdDDP.Column10.SetFocus 
ENDIF 

「変数cFilterが見つかりません」というエラーが表示されます。私が理解できないことは、上記のコードがすでに実行された後にエラーが発生していることです。デバッガでは、「MyForm.grdDDP」と表示されます。他に何もない。この変数を実際に探している場所を調べるにはどうすればよいですか?

+0

エラー処理プログラムを使用すると、MyForm.grdDDP.Error(??) – Bernard

答えて

3

変数cFilterは、コードが機能するためにはグローバルでなければなりません。

グローバル変数を使用しない場合は、次のようにすることができます。

cFilter = UPPER(ALLTRIM(INPUTBOX("Filter sur :","Spectech France - Suivi DDP"))) 

SELECT vwDdp_all 

LOCATE FOR ALLTRIM(ref_client) = cFilter 
IF FOUND() 
    lcFiltClause = [ref_client = ']+cFilter+['] 
    SET FILTER TO &lcFiltClause 
    THISFORM.grdDDP.Column10.SetFocus 
ENDIF 
1

フィルタ式は、バインドされたカーソル内を常にナビゲートする必要があります。

Local lcFilter 
lcFilter = Textmerge('ref_client = "<<m.cFilter>>"') 
Set Filter To &lcFilter 

しかし、set filterはほとんどの開発者が「使用しない」リストにあるコマンドの1つです。特にグリッドの場合は、「フィルタを設定」は使用しないでください。代わりに、単にグリッドのソースとしてクエリを使用することができます。または、ref_clientがインデックスフィールドの場合は、代わりに "範囲の設定"を使用できます(グローバル変数または&トリックは必要ありません)。

+0

にエラーが発生したことが示されます。フィルタはユーザーの要件でした(彼らは、アプリケーションが置き換えるはずの巨大なExcelワークシートを模倣したい)あなたのアドバイスをして、 "Set Range"を試してみてください。 – Bernard

+0

はい、セットフィルタはグリッドとうまく動作しません(誤ったスクロールバーを観察してください)。 –

+0

ところで、Foxyclassesグリッド、特にLocatorGridクラスを利用することができます。 –

関連する問題