sql-set-sqli-buffer“没有合适的sqli缓冲区”

时间:2013-01-04 09:09:54

标签: 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]:运行

我更改缓冲区,M-x查找文件myfile.sql

此缓冲区采用SQL [ANSI]模式

然后我在C-c C-r sql语句中出现错误“No SQL Process started”

如上所述,我是M-x sql-set-sqli-buffer,但我有错误“没有合适的SQLi缓冲区”

为此,我找不到解决方案......我错过了什么?

我使用emacs 24.2.1

编辑:当我直接在SQLi [MySQL]:run buffer中执行select语句时,它会按预期返回行...

其他缓冲区不应该处于SQL [MySQL]模式吗?

1 个答案:

答案 0 :(得分:15)

我认为你是对的,sql-set-sqli-buffer找不到合适的SQLi缓冲区的原因是因为它在遍历open列表时会考虑SQL模式缓冲区的产品子类型缓冲区。

以下是我的emacs附带的sql.el副本的缓冲区测试代码(版本 - 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”,则可以在init文件中进行设置,或使用M-x customize-variable

进行自定义

SQL模式非常依赖于使用正确的本地变量设置缓冲区以便具有可用的关联iSQL会话。

我用来在我正在编辑的另一个缓冲区中使用查询启动iSQL缓冲区的典型序列如下

  1. 通过访问文件或使用C-x b创建临时缓冲区,切换到其中包含SQL文本的缓冲区。
  2. 使用M-x sql-set-product将此缓冲区设置为正确的SQL类型,然后在提示符下输入已知类型,例如“mysql”。
  3. 点击C-c <TAB>(绑定到sql-product-interactive)切换到与此缓冲区关联的iSQL缓冲区,可能是通过查找或创建新的comint进程
  4. 可能值得阅读M-x sql-help命令的输出。 SQL模式的文档非常简单。我已经弄清楚我对它的了解很少,主要是从阅读来源。