Informix ISQL执行指令:表的编辑后与表的添加更新后
INFORMIX-SQL 7.3执行屏幕: 根据文档,在“表的添加或更新后”控制块中,其指令在将行添加或更新到表之前执行,而在“表的添加或更新后”控制块中,其指令在将行添加或更新到表之后执行。据推测,这意味着任何改变链接到table.columns的字段标记值的指令都不会提交到表中,但是链接到displayonly字段的字段标记会改变吗 然而,当使用“添加表更新后”时,我放置了一些指令,这些指令改变了链接到table.columns的字段标记的值,它们的显示值和提交值也发生了变化!我本以为“添加表更新后”只会改变displayonly字段Informix ISQL执行指令:表的编辑后与表的添加更新后,informix,Informix,INFORMIX-SQL 7.3执行屏幕: 根据文档,在“表的添加或更新后”控制块中,其指令在将行添加或更新到表之前执行,而在“表的添加或更新后”控制块中,其指令在将行添加或更新到表之后执行。据推测,这意味着任何改变链接到table.columns的字段标记值的指令都不会提交到表中,但是链接到displayonly字段的字段标记会改变吗 然而,当使用“添加表更新后”时,我放置了一些指令,这些指令改变了链接到table.columns的字段标记的值,它们的显示值和提交值也发生了变化!我本以为“添加
- “z”是事务表中的一列吗
- “z”中的值导致“q”(又名transaction.trx_type)的值发生变化,并且修改后的值存储在数据库中,这是一个问题吗
- “z”中的值是事务表的一部分吗
- 您是否使用查询语言选项或简单(默认)表单验证了数据库中的值确实发生了更改
你能看看这个表格加表格对你的作用和对我的一样吗 表事务 形式 实验 [括号内的数字由IDS/Perform自动生成。]
- 添加一行数据(1),V,E,23
- 观察显示屏是否为:1、E、E、23
- 退出表单
- 观察表中的数据为:1,V,E,23
- 重新输入表单并查询数据
- 将数据更新为:(1),T,T,37
- 观察显示屏是否为:1,T,T,37
- 退出表单
- 观察表中的数据为:1,T,T,37
- 重新输入表单并查询数据
- 将数据更新为:(1),P,1,49
- 观察显示屏是否为:1,E,1,49
- 退出表单
- 观察表中的数据是:1,P,1,49
- 重新输入表单并查询数据
- 观察显示屏是否为:1,E,1,49
- 选择“更新”,并观察显示更改为:1,P,1,49
sqlcmd -d stores -e 'select * from transaction'
这将生成如下行(反映不同的运行):
这是我的SQLCMD程序,不是微软的同名新贵。对于DB Access,您可以做或多或少相同的事情,只是噪音更大(13行无关的输出),最好将SELECT语句写入文件中,并将其作为参数提供:
$ echo "select * from transaction" > check.sql
$ dbaccess stores check
Database selected.
trx_id trx_type trx_last_type trx_int_table
1 P 1 49
1 row(s) retrieved.
Database closed.
$
结论
这是我使用ISQL 7.50.FC1在Solaris 10(SPARC)上观察到的结果;它与手册所描述的内容相匹配,也是我在回答的原始部分所建议的可能是问题-您在表单上看到的不是数据库中的内容(因为说明部分)
你看到不同的东西了吗?如果是这样的话,那么ISQL中可能有一个bug已经修复了。从技术上讲,我相信ISQL 7.30已经不受支持了。你能升级到比这个更新的版本吗?(我不确定7.32是否仍然受支持,但您真的应该升级到7.50;当前版本是7.50.FC4。)
删除评论前转录评论: 在某种程度上,复制我的结果是件好事。坏消息是,在更大的形式中,我们有不同的行为。我希望ISQL能够验证所有的限制——比如列的数量等。但是,考虑到错误,它们有可能没有得到正确的验证,或者可能有一个单独的问题,只在较大的表单中显示。因此,您需要确保您拥有受支持的产品版本,并且问题会在其中重现。理想情况下,您将有一个显示问题的较小版本的表(或至少是表单),也可能有一个显示没有问题的更小版本(但不像我的示例那么小) 有了测试用例(表模式和显示问题的执行屏幕),您就可以转到IBM技术支持,使用“Look-当表单很小时,它可以正常工作;而Look,当表单很大时,它不能正常工作”。然后,bug应该是可跟踪的。您需要包括如何复制类似于我给您的错误的说明。同时运行两个表单——一个简单,一个复杂,并显示bug——来显示数据是如何存储和显示的,这是没有问题的。你可以用“表格A”和“表格B”来描述这些步骤,表格A是绝对可以的,表格B被认为是有缺陷的。因此,在表格B中添加具有特定值的记录;之后显示表格B中显示的内容;以表格A的形式显示数据库中存储的内容;表明他们在应该的时候没有什么不同
请记住,那些将要解决问题的人对产品的经验比你或我都少,所以请尽量简单。删除尽可能多的属性;请留下评论,以确定数据类型等。请给出一个最简单的示例,说明您正在做什么?我想看看属性和说明部分的相关部分。
DATABASE stores
SCREEN SIZE 24 BY 80
{
trx_id [f000]
trx_type [q]
trx_last_type [z]
trx_int_table [f001 ]
}
END
TABLES
transaction
ATTRIBUTES
f000 = transaction.trx_id;
q = transaction.trx_type, UPSHIFT, AUTONEXT,
INCLUDE=("E","C","V","P","T");
z = transaction.trx_last_type, UPSHIFT, AUTONEXT,
INCLUDE=("E","C","V","P","T","1");
f001 = transaction.trx_int_table;
INSTRUCTIONS
AFTER ADD UPDATE DISPLAY QUERY OF transaction
IF z = "E" THEN LET q = "E"
IF z = "C" THEN LET q = "C"
IF z = "1" THEN LET q = "E"
END
sqlcmd -d stores -e 'select * from transaction'
1|V|E|23
1|P|1|49
$ echo "select * from transaction" > check.sql
$ dbaccess stores check
Database selected.
trx_id trx_type trx_last_type trx_int_table
1 P 1 49
1 row(s) retrieved.
Database closed.
$