微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将文本数据多次插入文本小部件的正确方法是通过 sqlite 结果逐步执行吗?

如何解决将文本数据多次插入文本小部件的正确方法是通过 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 举报,一经查实,本站将立刻删除。