我有一个报告,其中包含一个参数,允许用户选择哪些字段以及字段将在报告上显示的顺序。我遇到的唯一问题是数据类型可以是字符串,数字或日期,我无法弄清楚如何检查数据类型(我首先将所有内容转换为字符串)然后将值更改为正确的数据类型。我想这个公式看起来像是:
numbervar counter;
shared stringvar Array FieldVal;
counter := count({?Fields});
if counter >= 5 then
if NumericText(FieldVal[5]) then tonumber(FieldVal[5]) else
if isdate(FieldVal[5]) then CDate(FieldVal[5]) else
FieldVal[5]
问题是我收到错误消息“此处需要日期。”或“这里需要一个数字。”
如果计数器> = 5那么 (如果是NumericText(FieldVal [5])而不是(isdate(FieldVal [5]))那么val(FieldVal [5]));
如果计数器> = 5则
(如果不是(NumericText(FieldVal [5])和isdate(FieldVal [5]))那么 FieldVal [5]);
如果计数器> = 5那么 (如果是isdate(FieldVal [5])而不是(numerictext(FieldVal [5]))那么CDate(FieldVal [5]));
返回Date数据类型
如果计数器> = 5则
(如果不是(NumericText(FieldVal [5])和isdate(FieldVal [5]))那么 FieldVal [5]);
如果计数器> = 5那么 (如果是isdate(FieldVal [5])而不是(numerictext(FieldVal [5]))那么CDate(FieldVal [5]));
如果计数器> = 5那么 (如果是NumericText(FieldVal [5])而不是(isdate(FieldVal [5]))那么val(FieldVal [5]));
返回一个数字数据类型,无论实际数据类型是什么,这都会在报告中显示出来。
我也尝试过以下操作并收到相当于数据类型不匹配的内容:
numbervar counter;
Shared StringVar Array FieldVal;
Shared NumberVar Array FieldValNbr;
Shared DateVar Array FieldValDte;
StringVar DType := '';
StringVar StrValue := FieldVal[5];
NumberVar NbrValue := FieldValNbr[5];
DateVar DteValue := FieldValDte[5];
counter := count({?Fields});
if counter >= 5 then
if StrValue <> '' then DType := 'String';
if NbrValue <> 0 then DType := 'Number';
if StrValue <> '' and NbrValue <> 0 then DType := 'Date';
Select DType
case 'String' : StrValue
Case 'Number' : NbrValue
Case 'Date' : DteValue;
Shared numbervar counter;
shared stringvar Array FieldVal;
if counter >= 5 then
(
if NumericText(FieldVal[5]) then tonumber(FieldVal[5])
);
if counter >= 5 then
(
if isdate(FieldVal[5]) then CDate(FieldVal[5])
);
if counter >= 5 then
(
if Not(NumericText(FieldVal[5]) and isdate(FieldVal[5])) then
FieldVal[5]
);
答案 0 :(得分:0)
以编写代码的方式不起作用,因为在单个if or if else
语句中,不能将不同的数据类型作为输出返回。
而是编写多个if
语句,如果没有条件,则写一个。
尝试如下:
numbervar counter;
shared stringvar Array FieldVal;
counter := count({?Fields});
if counter >= 5 then
(
if Not(NumericText(FieldVal[5]) and isdate(FieldVal[5])) then
FieldVal[5]
否则if(NumericText(FieldVal [5]) 然后tonon(FieldVal [5]) 否则if(isdate(FieldVal [5]) 然后CDate(FieldVal [5]) );