Method LT2_CursorReordersDNRs builds and indexes the cursor: >LOCAL ; > lnSelect > >lnSelect = SELECT(0) > >WAIT WINDOW NOWAIT "Building Indices..." > >* Open tables: >USE (ALLTRIM(goApp.LT2_cLT1_DataRoot) + ALLTRIM(goApp.LT2_cYearName) + ; > "\Reorders") IN 0 SHARED > >SELECT ; > A.Reord_No, ; > A.CustName, ; > PADR(ALLTRIM(B.Sch_Name) + ", " + ; > ALLTRIM(B.Sch_City) + ", " + ; > ALLTRIM(B.Sch_Prov) + " " + ; > ALLTRIM(B.Sch_Phone), 70, " ") AS cSchool, ; > A.OrdrDate ; > FROM Reorders A ; > INNER JOIN Schools B ; > ON B.Sch_ID == A.Sch_ID ; > INTO CURSOR _SearchRD > >USE (DBF("_SearchRD")) ALIAS SearchRD IN 0 AGAIN > >SELECT SearchRD >INDEX ON UPPER(CustName) TAG CustName >INDEX ON UPPER(cSchool + CustName) TAG cSchool > A complete, utter SWAG, but try adding the ADDITIVE clause to the 2nd INDEX ON >WAIT CLEAR > >SELECT (lnSelect) > >* Method LT2_IncrementalSearch performs the search: >LPARAMETERS ; > tcSearchString > >LOCAL ; > lnSelect, ; > lcOldOnError, ; > llSoftSeekFailed, ; > lcSearchAlias > >lnSelect = SELECT(0) > >DO CASE >CASE This.opgType.Value = 1 > lcSearchAlias = "SearchSD" > >CASE This.opgType.Value = 2 > lcSearchAlias = "SearchRD" > >CASE This.opgType.Value = 3 > lcSearchAlias = "SearchGr" > >ENDCASE > >SELECT (lcSearchAlias) > >IF EMPTY(tcSearchString) > GO TOP IN (lcSearchAlias) > >ELSE > <b>IF SEEK(UPPER(tcSearchString), lcSearchAlias)</b> > * OK > > ELSE > * Not found, do a soft seek to get a close record: > lcOldOnError = ON("ERROR") > llSoftSeekFailed = .F. > > ON ERROR llSoftSeekFailed = .T. > > GO RECNO(0) IN (lcSearchAlias) > > IF llSoftSeekFailed > GO BOTTOM IN (lcSearchAlias) > > ENDIF > > ENDIF > >ENDIF > >* Pop the focus to the grid so the RecordMark shows properly: >=This.grdSearch.SetFocus() >=This.txtcSearchString.SetFocus() > >SELECT (lnSelect) >>The incremental search method supports searching in 3 cursors with a total of 5 index tags. Other controls ensure that the correct tag is active for the desired search.