如何解决将文本数据多次插入文本小部件的正确方法是通过 sqlite 结果逐步执行吗?
我正在尝试从 sqlite 中提取多行文本数据并向其添加标签以显示在 Tk 文本小部件中。
如果我在浏览器中做类似的事情,我会在文档片段中构建元素,然后将片段添加到 DOM,而不是多次写入 DOM。在 Tk 中是否有等效的方法;或者在Tcl中的数据库结果循环中重复执行插入是否有效,相当于C API中的sqlite3_step?
例如(其中查询返回的此类行可能多达几百个)
db1 eval {SELECT * FROM table ...} {
.widget insert end $column_1 "tag_1 tag_x"
.widget insert end $column_2 "tag_2 tag_y"
.widget insert end $column_3\n "tag_3 tag_x"
}
或者,是否应该尝试在 sql 中使用 GROUP_CONCAT
之类的东西来构建单个语句以在 Tcl 中进行评估?
谢谢。
下面是一个更具体的例子。单节经文的数据由数据库中的多行组成;而且,大多数情况下,会同时提取许多节经文。我需要标记 strongs_no
列,以便将其设置为上标。
如果我只是选择行,那么会有很多插入;但是,如果我在 sql 中使用 group_concat
,那么我不知道如何添加标签。
如果可能的话,返回的每一节仍然会有一个插入。
book_no chapter_no verse_no index_no strongs_no kjv_text
------- ---------- -------- -------- ---------- ----------------
1 1 1 1 H7225 In the beginning
1 1 1 2 H430 God
1 1 1 3 H1254 created
1 1 1 4 H853
1 1 1 5 H8064 the heaven
1 1 1 6 H853 and
1 1 1 7 H776 the earth.
select group_concat( kjv_text || strongs_no,' ') as kjv
from blb_kjv_text
where book_no=1
and chapter_no=1
and verse_no=1
kjv
---------------------------------------------------------------------
In the beginningH7225 GodH430 createdH1254 H853 the heavenH8064 andH853 the earth.H776
解决方法
如果您想对每个文本跨度应用不同的标签,使用多个 insert
调用可能是最简单的。单独来看,它们并不是很昂贵(测量和渲染是昂贵的位,但它们被推迟到应用程序空闲时,因此您在大多数应用程序中实际上看不到成本)。如果您没有在最后插入,请设置您自己的自定义标记(默认向右重力)并在那里插入;它的惊喜最少。
除非有其他与查询相关的原因,否则我真的不会在 SQL 中使用 GROUP_CONCAT
,因为 Tcl 非常擅长文本操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。