你好,
我正在尝试编写一个对话框窗口,提示用户从一对显示所有当前打开的表名称的列表框中选择 2 个数据表。对话框窗口、列表框和选择过程都按预期工作,但是一旦我将 2 个选定的表名作为变量,我在尝试将它们关联到数据表引用时遇到了障碍。稍后在代码中需要数据表引用来对选定的表执行工作。
最后两行出现问题,dt1 出现以下错误。
参数必须包含访问或评估 'Current Data Table' 时的数据表引用,Current Data Table/*###*/(SourceData)
我意识到 SourceData 和 TargetData 是列表对象,每个对象只有一项,所以我尝试在关联为数据表名称之前转换为字符串,但这不起作用。
任何帮助是极大的赞赏。 请参阅下面的脚本部分。
打开表= {} ;
为了(吨= 1 ,吨<=表格() ,吨++,插入(打开表,数据表(吨) <<获取名称)) ;
选择数据窗口=新窗户( “选择数据表” , <<模态,
源面板=面板盒( “源数据表” ,
源列表框=列表框(打开表,最大选择( 1 ))) ,
目标面板=面板盒( “目标数据表” ,
目标列表框=列表框(打开表,最大选择( 1 ))) ,
排队箱( NCol ( 2 ) ,按钮盒( “好的” ,
源数据=源列表框<<被选中;
目标数据=目标列表框<<被选中) ,
按钮盒( “取消” ,停止() ))
) ;
dt1 =当前数据表(源数据) ;
dt2 =当前数据表(目标数据) ;
首先你要使用的功能数据表而不是最后两行中的当前数据表。
数据表的参数需要是字符串名称。 如果您显示 SourceData 和 TargetData 的内容,您将看到它们是列表。 这是因为通常列表框允许用户选择多个项目。 因此,即使您将所选项目的数量限制为一个,选择仍然作为列表返回。
您可以将最后两行替换为:
dt1 = Data Table( SourceData[1] );
dt2 = Data Table( TargetData[1] );
所以现在正在使用列表的第一项。
这当然假定用户已经从每个列表中选择了至少一个项目。 您可以将验证添加到模式窗口。 在包含模态消息的行之后添加:
<<ONVALIDATE>0 & NItems(TargetData)>0,
isValid = 1
,
isValid = 0;
Beep()
);
isValid
),</ONVALIDATE>
显然,您可以扩展此验证(例如,验证源名称和目标名称是否相同)。