我创建了一种方法,允许用户通过从表单中的字段中选择不同的参数来过滤表的数据......用户的选择在动态变化的“cTextSearch”中收集和管理。
现在我需要“复制”游标中过滤的数据,以便在程序的其他部分(例如报告)中使用游标。
如何在不破坏代码的情况下将数据过滤到临时光标中?
到目前为止,我测试了多种方法,唯一有效的方法是“COPY TO”语法...但是,这会创建一个不需要的新 dbf 文件。另一种语法反而破坏了代码。 我还尝试使用“SELECT .... INTO CURSOR ...”,但在这些其他情况下,输出不是过滤后的表,而是整个表。
当你检查我的代码时,我还使用“COPY TO..”将过滤后的数据转储到 Excel 文件中。到目前为止,这一直有效,但并没有解决我的问题。
或者光标表现不佳或者没有获取过滤后的数据。
IF !EMPTY(cTextSearch) AND !bResetFilter
nOldWA = SELECT(0)
SELECT (cAliasName)
GO TOP
cCommand = "SET FILTER TO "+ cTextSearch
&cCommand
SELECT (cAliasName)
&© TO (cTempCursor) TYPE FOXPLUS
COPY TO (cCsvFile) TYPE CSV
SELECT(nOldWA)
ThisForm.bFilterOn = .T.
结束
您可以使用 SELECT ... INTO CURSOR,但正如您所知,它不尊重 SET FILTER。因此,您必须将过滤条件放入查询的 WHERE 子句中。
由于您的过滤条件位于 cTextSearch 中,请尝试以下操作:
SELECT * ;
FROM YourTable ;
WHERE &cTextSearch ;
INTO CURSOR csrYourResults
显然,您需要替换表的名称和您想要的光标名称,如果您不想复制所有字段,请在第一个列表中列出您想要的字段而不是星号。