emacs - sql-set-sqli-buffer "there is no suitable sqli buffer"

标签 emacs elisp sql-mode

我是 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 文本的缓冲区。创建一个临时缓冲区。
  • 将此缓冲区设置为正确的 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/

    相关文章:

    c++ - 我怎样才能说服 emacs C++ 模式而不是我的 less 不是模板参数?

    emacs - 在 Emacs 中记录数据的好方法是什么?

    Emacs 函数创建新终端

    variables - 在Emacs中,如何确保可以在文件中为所有可能的值设置局部变量的安全性

    emacs - 在 Emacs24 + CEDET 中突出显示局部变量、对象属性和常量

    emacs - 如何在Emacs中的git grep命令中使用M-x rgrep?

    emacs - Elisp、alist 和字符串;类型混淆

    mysql - 无法将 sql_mode 设置为无

    mysql - 在严格模式下截断 INSERT 作为异常?

    postgresql - Emacs、sql-mode、Postgresql和输入密码