我是 emacs 的新手,不太习惯 lisp,所以这可能是一个新错误,但我找不到解决方案。
我尝试安装 sql 模式以与我的 mysql DB 交互。
为此,我修改了 sql.el 文件以精确设置 sql-user、sql-password、sql-database、sql-server 和 sql-port 选项,并在 sql-mysql-login-params 中添加了端口
我启动 emacs 和 M-x sql-mysql
模式更改为 SQLi[MySQL]:run
我更改缓冲区,M-x find-file myfile.sql
此缓冲区处于 SQL[ANSI] 模式
然后我 C-c C-r 一条 sql 语句并出现错误“未启动 SQL 进程”
正如某处所说,我 M-x sql-set-sqli-buffer 但我有错误“没有合适的 SQLi 缓冲区”
为此,我找不到解决方案......我错过了什么?
我使用 emacs 24.2.1
编辑:当我直接在 SQLi[MySQL]:run 缓冲区中执行 select 语句时,它会按预期返回行...
其他缓冲区不应该处于 SQL[MySQL] 模式吗?
最佳答案
我认为你是对的,sql-set-sqli-buffer 没有找到合适的 SQLi 缓冲区的原因是因为它在遍历打开的缓冲区列表时考虑了 SQL 模式缓冲区的产品子类型。
这是我的 sql.el 副本中的缓冲区测试代码,它与我的 emacs 一起提供(版本 - GNU emacs 24.2.1
(defun sql-find-sqli-buffer (&optional product connection)
"Returns the name of the current default SQLi buffer or nil.
In order to qualify, the SQLi buffer must be alive, be in
`sql-interactive-mode' and have a process."
(let ((buf sql-buffer)
(prod (or product sql-product)))
(or
;; Current sql-buffer, if there is one.
(and (sql-buffer-live-p buf prod connection)
buf)
;; Global sql-buffer
(and (setq buf (default-value 'sql-buffer))
(sql-buffer-live-p buf prod connection)
buf)
;; Look thru each buffer
(car (apply 'append
(mapcar (lambda (b)
(and (sql-buffer-live-p b prod connection)
(list (buffer-name b))))
(buffer-list)))))))
主要用于测试资格的两个值是缓冲区和标识产品类型的符号。此符号作为参数传入,或默认为 sql-product 的值。似乎 sql-product,除非以其他方式设置,否则默认为 'ansi,这就是为什么您的编辑缓冲区是 SQL [ANSI]。
在尝试将 SQLi 缓冲区与查询缓冲区关联之前,您应该尝试在此缓冲区中设置产品类型(例如,使用
M-x sql-set-product
)。如果您希望默认始终为 'mysql',您可以在您的初始化文件中设置它,或使用 M-x customize-variable
自定义它。SQL 模式是相当有序的,依赖于使用正确的局部变量设置缓冲区,以便有一个有效的关联 iSQL session 。
我用来启动 iSQL 缓冲区并在我已经编辑的另一个缓冲区中进行查询的典型序列如下
C-x b
切换到包含 SQL 文本的缓冲区。创建一个临时缓冲区。 M-x sql-set-product
然后在提示符处输入已知类型,例如“mysql”。 C-c <TAB>
(绑定(bind)到 sql-product-interactive
)切换到与此缓冲区关联的 iSQL 缓冲区,可能通过定位或创建新的 comint 进程 M-x sql-help
的输出可能值得一读。命令。 SQL 模式的文档非常简单。我已经弄清楚了我对它的了解很少,主要是通过阅读源代码。
关于emacs - sql-set-sqli-buffer "there is no suitable sqli buffer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154093/