- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们在使用 Rivet 和 Informix 从网页运行 Tclsql 代码时遇到问题。
当我们运行从命令行脚本执行查询的 TCL 代码时,它可以工作。 Informix C 库 fetch 在获取最后一行数据后将 sqlca.sqlcode 的值设置为 100。然后,tclsql C 库将结果字符串设置为“”,这是命令行 TCL 脚本用于确定已获取所有结果的内容。
当我们使用 Rivet 从浏览器运行相同的脚本时,Informix C 库 fetch 在获取最后一行结果后不会将 sqlca.sqlcode 值设置为 100。相反,它将它设置为 0,表示还有更多结果,并将最后一个查询结果返回给 tclsql C 库,然后它将最后一个查询结果返回给我们从浏览器运行的 TCL 脚本(而不是“”) .
这是我们从命令行运行的脚本:
#!/bin/sh
# Next line restarts using tclsh \
exec /BSG/local/bin/tclsh "$0" "$@"
package require Tclsql
sql database devncrs
set query "SELECT count(*) FROM district"
set cur [sql open $query]
while { [set result [sql fetch $cur 1]] != "" } {
puts $result
}
sql close $cur
查询应该向上面的 TCL 脚本返回 110(这是表的计数),然后返回一个“”,它确实这样做了。
这是我们从浏览器运行的脚本:
package require Tclsql
sql database devncrs
set query "SELECT count(*) FROM district"
set cur [sql open $query]
while { [set result [sql fetch $cur 1]] != "" } {
puts "<br>result = '$result`"
}
sql close $cur
这段代码陷入了无尽的 while 循环,因为它永远不会得到 ""返回来自 tclsql C 库。
我们在同一个 LINUX 机器上使用相同版本的操作系统编译了 rivet、TCL 和 Informix,并使用 lampp 包安装了 Apache。
这里是环境:
OS: Linux dev-ncrs-web4 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
Apache version: 2.4.27
Rivet version: 2.3.4
TCL version: 8.6.6
Informix version: 4.10
以下是 libtclsql.so、libsqlinf.o 和 mod_rivet.so 使用的库
ldd libsqlinf.so
linux-vdso.so.1 => (0x00007ffe691e0000)
libixsql.so => /usr/informix/lib/esql/libixsql.so (0x00007f6426bab000)
libixasf.so => /usr/informix/lib/libixasf.so (0x00007f6426962000)
libixgen.so => /usr/informix/lib/esql/libixgen.so (0x00007f64266fe000)
libixos.so => /usr/informix/lib/esql/libixos.so (0x00007f64264dd000)
libixgls.so => /usr/informix/lib/esql/libixgls.so (0x00007f642628a000)
libcrypt.so.1 => /usr/lib64/libcrypt.so.1 (0x00007f6426053000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007f6425d51000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f642598d000)
libfreebl3.so => /usr/lib64/libfreebl3.so (0x00007f642578a000)
/lib64/ld-linux-x86-64.so.2 (0x000055862238b000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f6425586000)
ldd libtclsql.so
linux-vdso.so.1 => (0x00007ffe22fc5000)
libsqlinf.so (0x00007ff9a85b0000)
libtcl8.6.so => /BSG/local/lib/libtcl8.6.so (0x00007ff9a8201000)
libixsql.so => /usr/informix/lib/esql/libixsql.so (0x00007ff9a7fad000)
libixasf.so => /usr/informix/lib/libixasf.so (0x00007ff9a7d65000)
libixgen.so => /usr/informix/lib/esql/libixgen.so (0x00007ff9a7b00000)
libixos.so => /usr/informix/lib/esql/libixos.so (0x00007ff9a78df000)
libixgls.so => /usr/informix/lib/esql/libixgls.so (0x00007ff9a768d000)
libcrypt.so.1 => /usr/lib64/libcrypt.so.1 (0x00007ff9a7455000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007ff9a7153000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007ff9a6f4f000)
libz.so.1 => /usr/lib64/libz.so.1 (0x00007ff9a6d38000)
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007ff9a6b1c000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007ff9a6759000)
libfreebl3.so => /usr/lib64/libfreebl3.so (0x00007ff9a6555000)
/lib64/ld-linux-x86-64.so.2 (0x000055873ec47000)
ldd mod_rivet.so
linux-vdso.so.1 => (0x00007ffdbfbf2000)
libtcl8.6.so => /BSG/local/lib/libtcl8.6.so (0x00007fcd949e0000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007fcd947db000)
libz.so.1 => /usr/lib64/libz.so.1 (0x00007fcd945c5000)
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007fcd943a9000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007fcd940a6000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007fcd93ce3000)
/lib64/ld-linux-x86-64.so.2 (0x000056435fdca000)
有没有其他人遇到过这个问题或者知道是什么导致了提取,因为它是通过铆钉执行的,在提取最后一个结果后没有将 sqlca.sqlcode 的值设置为 100?当我们运行一个返回多行的查询时,我们得到了类似的结果。
最佳答案
我找到了解决此问题的方法。我修改了我们使用的 tclsql.c 和 sqlinf.ec 文件se。
TCL SQL“sql fetch”调用 isqltcl4.0 库 tclsql.c 文件中名为 tcl_sql_fetch 的函数。tcl_sql_fetch 函数调用 isqltcl4.0 库 sqlinf.ec 文件中名为 sql_fetch 的函数。
sql_fetch 函数在 Informix 数据库服务器上执行提取并提取一行。如果没有米要获取的矿石行,sql server 代码应将 sqlca.sqlcode 的值设置为 100。当我们从TCL 脚本从命令行运行,运行良好。当我们使用铆钉从浏览器运行相同的 TCL 代码时,pache,sqlca.sqlcode 的值一直设置为 0。这导致 tclsql.c tcl_sql_fetch 函数中的代码 认为有更多的行要获取并且它没有返回空白结果字符串“”。相反,它返回 las一遍又一遍地获取 t 值。结果,TCL 脚本 while 循环从未停止。
这是设置从 sqlinf.ec sql_fetch 函数返回值到 tclsqlc tcl_sql_fetch 函数的代码 ionic :
ret = sqlca.sqlcode;
chk_status("FETCH(OPEN)", ssql[fd].cmd);
return ret;
当脚本从浏览器运行时,sqlca.sqlcode 从未设置为 100。
为了解决这个问题,我在 sqlinf.ec 中添加了一个名为“bnc_sql_fetch”的新 sql_fetch 函数,并向它传递了一个整数值
int bnc_sql_fetch(fd, bnc_fetch_count)
我在名为 bnc_fetch_count 的 tclsql.c 文件中添加了一个静态整数。 bnc_fetch_count static int 变量在 tclsql.c 中的 tcl_sql_open 函数中初始化为 0,并在每次调用 bnc_sql_fetch 函数时递增 1。
然后,在 bnc_sql_fetch 函数中,我将 bnc_fetch_count 的值与整数数组 sqlca.sqlerrd 中第一个元素的值进行比较,后者包含要获取的总行数。如果它大于要获取的总行数,则最后一行已获取并返回 100。
if ( bnc_fetch_count > sqlca.sqlerrd[0] ) {
ret = 100;
chk_status("FETCH(OPEN)", ssql[fd].cmd);
return ret;
}
这解决了问题。
关于sql - 使用铆钉的 Informix 提取不返回查询结果的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48512021/
我正在做一个业余爱好项目,使用 Ruby、PHP 或 Java 来抓取 ASP.net 网站的内容。例如,如果网站 url“www.myaspnet.com/home.aspx”。我想从 home.a
如果我有这些字符串: mystrings <- c("X2/D2/F4", "X10/D9/F4", "X3/D22/F4",
我有以下数据集 > head(names$SAMPLE_ID) [1] "Bacteria|Proteobacteria|Gammaproteobacteria|Pseudomonadales|Mor
设置: 3个域类A,B和C。A和B在插件中。 C在依赖于此插件的应用程序中。 class A{ B b static mapping = { b fetch: 'joi
我不知道如何提取 XML 文件中的开始标记元素名称。我很接近〜意味着没有错误,我正在获取标签名称,但我正在获取标签名称加上信息。我得到的是: {http://www.publishing.org}au
我有一个字符串 x <- "Name of the Student? Michael Sneider" 我想从中提取“Michael Sneider”。 我用过: str_extract_all(x,
我有一个如下所示的文本文件: [* content I want *] [ more content ] 我想读取该文件并能够提取我想要的内容。我能做的最好的事情如下,但它会返回 [更多内容] 请注意
假设我有一个项目集合 $collection = array( 'item1' => array( 'post' => $post, 'ca
我正在寻找一种过滤文本文件的方法。我有许多文件夹名称,其中包含许多文本文件,文本文件有几个没有人员,每个人员有 10 个群集/组(我在这里只显示了 3 个)。但是每个组/簇可能包含几个原语(我在这里展
我已经编写了一个从某个网页中提取网址的代码,我面临的问题是它不会以网页上相同的方式提取网址,我的意思是如果该网址位于某些网页中法语,它不会按原样提取它。我该如何解决这个问题? import reque
如何在 C# 中提取 ZipFile?(ZipFile 是包含文件和目录) 最佳答案 为此使用工具。类似于 SharpZip .据我所知 - .NET 不支持开箱即用的 ZIP 文件。 来自 here
我有一个表达: [training_width]:lofmimics 我要提取[]之间的内容,在上面的例子中我要 training_width 我试过以下方法: QRegularExpression
我正在尝试创建一个 Bash 脚本,该脚本将从命令行给出的最后一个参数提取到一个变量中以供其他地方使用。这是我正在处理的脚本: #!/bin/bash # compact - archive and
我正在寻找一个 JavaScript 函数/正则表达式来从 URI 中提取 *.com...(在客户端完成) 它应该适用于以下情况: siphone.com = siphone.com qwr.sip
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
编辑:添加了实际的 JSON 对象和代码以供审查 我有这种格式的 JSON(只是这种层次结构,假设 JSON 正常工作) {u'kind': u'calendar#events', u'default
我已经编写了代码来使用 BeautifulSoup 提取一本书的 url 和标题来自页面。 但它并没有在 > 之间提取惊人的 super 科学故事 1930 年 4 月这本书的名字。和 标签。 如何提
使用 Java,我想提取美元符号 $ 之间的单词。 例如: String = " this is first attribute $color$. this is the second attribu
您好,我正在尝试找到一种方法来确定字符串中的常量,然后提取该常量左侧的一定数量的字符。 例如-我有一个 .txt 文件,在那个文件的某处有数字 00nnn 数字的例子是 00234 00765 ...
php读取zip文件(删除文件,提取文件,增加文件)实例 从zip压缩文件中提取文件 复制代码 代码如下: <?php /* php 从zip压缩文件
我是一名优秀的程序员,十分优秀!