Crystal 报告 select 以逗号分隔的标准
Crystal reports select critera with comma delimited
我有一份 crystal 报告,我需要更改 select 标准。当前标准将数据库字段与我在报告中创建的参数进行比较。
{MaterialCR.MaterialId} = {?MaterialId}
我现在有一个包含逗号分隔数据的字段,我需要确保该参数包含新字段中的任何其他 ID。
Materialused 中包含此数据。 "MA0161 ,MA0167"
(无双引号)。这行不通
{MaterialCR. MaterialUsed} = {?MaterialId}
我试图创建一个函数来比较两者,但它似乎不起作用。它不会将参数视为字符串数组。
我的 material 匹配功能不起作用
Function MaterialMatch (MaterialUsed as string,v1 () As String)
dim MyArray() as string
MyArray = Split (MaterialUsed,"," )
dim Match as boolean
Match = false
dim x as number
For x = 1 To count(v1) Step 1
IF "ALL" in v1 then
Match = true
x = count(MyArray)
end if
if MyArray(x) in v1 then
Match = true
x = count(MyArray)
end if
Next x
MaterialMatch = Match
End Function
这就是我正在查看的数据的样子。我们有很多 material 里面有一个 Material ID。我们也有相关的时间需要 select。它没有 material id,因为它是多对一的情况。我需要检索与 material 相关的所有记录,包括时间。使用 id 获取 material 不是问题。我还需要获取时间记录。我修改了此报告使用的视图以包含与时间重叠的 material。这就是我被困的地方。
这就是我的 select 专家公式现在的样子。我知道 material 使用的部分是错误的。
(
{JobTimeMaterialCR.MaterialId} = {?MaterialId}
or
(
{JobTimeMaterialCR.Type} = "Time"
and
{JobTimeMaterialCR.MaterialUsed} = {?MaterialId}
))
我能够使用我在评论中描述的逻辑编写一个适合我的公式。使用此公式作为您的记录选择公式。在公式工作室中,这些位于选择公式 > 记录选择中。
Local StringVar array values := Split({?Search Values},",");
Local NumberVar indexCount := Count(values);
Local BooleanVar found := false;
Local NumberVar counter;
For counter := 1 to indexCount Step 1 Do
(
If InStr({ARINVT.DESCRIP}, values[counter]) > 0 Then
found := true
);
found;
这很艰难,但这是一个好的开始。搜索区分大小写,因此如果您想要不区分大小写的搜索,您可能需要使用一些 Lower() 函数对其进行调整。此外,如果 CSV 字符串中的 delim 字符和搜索字符串之间存在 space,则 space 将包含在搜索中。 Replace() 函数可以帮助您解决这个问题,但这会阻止您在搜索字符串中使用 spaces。如果您需要在搜索中使用 spaces,那么在构建您的 CSV 字符串时请注意在作为分隔字符的逗号前后没有 spaces。
如果您在理解我的公式的语法方面需要任何帮助,请随时发表评论,我会回答任何问题。
我使用了一个名为 {?Search Values}
的参数字段来模拟 CSV 字符串数据。 {ARINVT.DESCRIP}
是我的测试数据库中的一个字段名称,我曾在数千条记录中搜索我在参数字段中输入的关键字。您需要将公式中的这些字段名称替换为您的字段名称,您应该能够毫不费力地完成这项工作。
我有一份 crystal 报告,我需要更改 select 标准。当前标准将数据库字段与我在报告中创建的参数进行比较。
{MaterialCR.MaterialId} = {?MaterialId}
我现在有一个包含逗号分隔数据的字段,我需要确保该参数包含新字段中的任何其他 ID。
Materialused 中包含此数据。 "MA0161 ,MA0167"
(无双引号)。这行不通
{MaterialCR. MaterialUsed} = {?MaterialId}
我试图创建一个函数来比较两者,但它似乎不起作用。它不会将参数视为字符串数组。
我的 material 匹配功能不起作用
Function MaterialMatch (MaterialUsed as string,v1 () As String)
dim MyArray() as string
MyArray = Split (MaterialUsed,"," )
dim Match as boolean
Match = false
dim x as number
For x = 1 To count(v1) Step 1
IF "ALL" in v1 then
Match = true
x = count(MyArray)
end if
if MyArray(x) in v1 then
Match = true
x = count(MyArray)
end if
Next x
MaterialMatch = Match
End Function
这就是我正在查看的数据的样子。我们有很多 material 里面有一个 Material ID。我们也有相关的时间需要 select。它没有 material id,因为它是多对一的情况。我需要检索与 material 相关的所有记录,包括时间。使用 id 获取 material 不是问题。我还需要获取时间记录。我修改了此报告使用的视图以包含与时间重叠的 material。这就是我被困的地方。
这就是我的 select 专家公式现在的样子。我知道 material 使用的部分是错误的。
(
{JobTimeMaterialCR.MaterialId} = {?MaterialId}
or
(
{JobTimeMaterialCR.Type} = "Time"
and
{JobTimeMaterialCR.MaterialUsed} = {?MaterialId}
))
我能够使用我在评论中描述的逻辑编写一个适合我的公式。使用此公式作为您的记录选择公式。在公式工作室中,这些位于选择公式 > 记录选择中。
Local StringVar array values := Split({?Search Values},",");
Local NumberVar indexCount := Count(values);
Local BooleanVar found := false;
Local NumberVar counter;
For counter := 1 to indexCount Step 1 Do
(
If InStr({ARINVT.DESCRIP}, values[counter]) > 0 Then
found := true
);
found;
这很艰难,但这是一个好的开始。搜索区分大小写,因此如果您想要不区分大小写的搜索,您可能需要使用一些 Lower() 函数对其进行调整。此外,如果 CSV 字符串中的 delim 字符和搜索字符串之间存在 space,则 space 将包含在搜索中。 Replace() 函数可以帮助您解决这个问题,但这会阻止您在搜索字符串中使用 spaces。如果您需要在搜索中使用 spaces,那么在构建您的 CSV 字符串时请注意在作为分隔字符的逗号前后没有 spaces。
如果您在理解我的公式的语法方面需要任何帮助,请随时发表评论,我会回答任何问题。
我使用了一个名为 {?Search Values}
的参数字段来模拟 CSV 字符串数据。 {ARINVT.DESCRIP}
是我的测试数据库中的一个字段名称,我曾在数千条记录中搜索我在参数字段中输入的关键字。您需要将公式中的这些字段名称替换为您的字段名称,您应该能够毫不费力地完成这项工作。