我正在寻找一种在MS Access应用程序中显示虚拟行的方法,即在任何表中实际不存在但仅在内存中存在的行。
我可以根据需要创建一个临时表,用我的“虚拟行”值填充它,然后以连续形式显示临时表的内容。然而,如果可能的话,我想在不使用任何临时表的情况下做这样的事情。
感谢您的帮助
雷
修改的: 当我提到“内存中的行”时,我的意思是说我有一些变量(可能存储在一个数组中),我希望在gui / form上显示与存储在表中的行相同的方式。
答案 0 :(得分:1)
ADO允许您创建断开连接的记录集,并且可以将ADO记录集指定为表单的记录集,这听起来像是要走的路。
但是我要提醒我不要将ADO用于DAO提供的任何功能,而DAO没有像断开连接的记录集那样(尽管对于某些操作你可以使用事务来伪造它),我已经我自己从不需要它们,所以我真的要报告二手信息。
然而,至少就我理解你的问题而言,这对你来说可能是一个有利可图的事情。
答案 1 :(得分:0)
您可以将条目添加到包含多个列的列表框中。不是一个连续的形式,而是接近。确保列表框的行源类型为值列表。
Me.SomeListBox.RowSource = ""
Me.SomeListBox.AddItem "record1;field2;field3"
Me.SomeListBox.AddItem "record2;field2;field3"
答案 2 :(得分:0)
UNION允许您包含虚拟行,并且可以通过包括:
来定义虚拟字段(列)data as fieldname
FROM可以是数据库中的任何表或查询,但它必须至少包含一行,否则您将获得零行结果集。
所以:
SELECT -1 As ID, True As Virtual, "All" As Stuff FROM Table1
UNION
SELECT 0 As ID, True As Virtual, "None" As Stuff FROM Table1
您不必包含任何实际行,但您可以:
UNION
SELECT ID, False As Virtual, Stuff FROM Table1
此方法通常用于向列表框或组合框添加“全部”或“无”。
答案 3 :(得分:-1)
虽然可以使用UNION
执行此操作:
SELECT 0 AS ID, True AS Virtual, 'None' AS Stuff
FROM Table1
UNION
SELECT ID, False, Stuff
FROM Table1;
UNION
SELECT -1, True, 'All'
FROM Table1;
...使用UNION ALL
与DISTINCT
关键字
SELECT DISTINCT 0 AS ID, True AS Virtual, 'None' AS Stuff
FROM Table1
UNION ALL
SELECT ID, False, Stuff
FROM Table1;
ORDER BY ID
UNION ALL
SELECT DISTINCT -1, True, 'All'
FROM Table1;
可能会更好
UNION ALL
为什么选择UNION
? UNION
对数据执行隐式排序,您可能不需要;如果你使用显式排序然后使用一个! (正如文档告诉你的那样,隐式排序不能保证,所以不要依赖它。)
为了执行排序,只会考虑MEMO数据的前255个字符,而在extremis中可能会导致从结果集中删除整行:(
UNION
的隐式排序也对性能产生了相对巨大的影响:我使用100K行表测试,UNION ALL
方法花了21秒,而{{1}}只花了3秒秒。