Sqlite(在SqliteStudio中):无效的命令名称“parray”

时间:2018-03-21 09:06:47

标签: sqlite tcl create-function

我发现在TCL中为Sqlite(https://github.com/pawelsalawa/sqlitestudio/wiki/ScriptingTcl)编写函数。

我想在sqlite(http://sqlite.org/tclsqlite.html)的官方页面中找到一个基本的例子:

{{#bs-navbar type="dark" class="d-flex" position="fixed-top" onCollapse=(action (mut collapsed) true) onExpand=(action (mut collapsed) false) as |navbar|}}
  {{navbar.toggle}}
  {{#navbar.content}}
    {{#navbar.nav as |nav|}}
      {{#link-to "index" class="navbar-brand"}}{{inline-svg "Logo.svg"}}{{/link-to}}
      {{#nav.item}}{{#nav.link-to "home"}}Home{{/nav.link-to}}{{/nav.item}}
      {{#nav.item}}{{#nav.link-to "test"}}Test{{/nav.link-to}}{{/nav.item}}
      {{#nav.item}}{{#nav.link-to "test2"}}Test 2{{/nav.link-to}}{{/nav.item}}
    {{/navbar.nav}}
    {{#navbar.nav class="ml-auto" as |nav|}}
      {{#if bIsLoggedIn}}
        {{#nav.dropdown class="user-drop" as |dd|}}
          {{#dd.toggle}} 
            <div class="avatar"><img src={{model.avatar}} width="32" height="32" alt=""></div>
            <div class="user">{{model.user}} <span class="caret"></span></div>
          {{/dd.toggle}}
          {{#dd.menu as |ddm|}}
            {{#ddm.item}}{{#ddm.link-to "index"}}Home{{/ddm.link-to}}{{/ddm.item}}
            {{#ddm.item}}{{#ddm.link-to "index"}}Test{{/ddm.link-to}}{{/ddm.item}}
          {{/dd.menu}}
        {{/nav.dropdown}}
      {{else}}
        <div class="login-button pr-3 text-center">
          <a class="btn btn-primary btn-lg" href="#" role="button">Login</a>
        </div>
      {{/if}}   
    {{/navbar.nav}}
  {{/navbar.content}}
{{/bs-navbar}}

我收到以下错误:

db eval {SELECT * FROM MyTable ORDER BY MyID} values { 
    parray values
    puts ""
}

非常欢迎帮助:)

1 个答案:

答案 0 :(得分:3)

SqliteStudio似乎没有完全初始化Tcl,正如您期望的那样来自非嵌入式安装:

  

使用外部Tcl包或模块是不可能的,因为Tcl   解释器未使用&#34; init.tcl&#34;初始化。

请参阅Wiki

背景

标准Tcl源init.tcl,早期作为Tcl解释器初始化的一部分。反过来,init.tclautoloading注册了许多Tcl过程。 parray是懒惰获得的触发之一。

前进的方式

我不熟悉SqliteStudio。为什么不坚持使用sqlite的标准Tcl frontend,它为您提供完整的Tcl并附带免费的Tcl发行版?但这当然取决于你的要求。

也就是说,您可以尝试在SqliteStudio的嵌入式Tcl中强制加载init.tcl,但我不知道(并且无法测试)分发是否尚未修剪这些脚本或它们是否有效地重新定位。从我的头顶(未经测试):

source [file join $tcl_library init.tcl]
# ...
db eval {SELECT * FROM MyTable ORDER BY MyID} values { 
    parray values
    puts ""
}