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

fat*_*bob 10 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和Mx sql-mysql

模式改为SQLi [MySQL]:运行

我更改缓冲区,Mx查找文件myfile.sql

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

然后我Cc Cr一个SQL语句并有错误"没有SQL进程启动"

如上所述,我Mx sql-set-sqli-buffer但我有错误"没有合适的SQLi缓冲区"

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

我使用emacs 24.2.1

编辑:当我直接在SQLi [MySQL]:运行缓冲区中执行select语句时,它按预期返回行...

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

cms*_*cms 16

我认为你是对的,sql-set-sqli-buffer找不到合适的SQLi缓冲区的原因是因为它在遍历开放缓冲区列表时会考虑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)))))))
Run Code Online (Sandbox Code Playgroud)

用于主要用于测试资格的两个值是缓冲区和标识产品类型的符号.此符号作为参数传入,或默认为sql-product的值.似乎sql-product,除非以其他方式设置,默认为'ansi,这就是为什么你的编辑缓冲区是SQL [ANSI].

M-x sql-set-product在尝试将SQLi缓冲区与查询缓冲区关联之前,您应该尝试在此缓冲区中设置产品类型(例如,使用).如果您希望默认值始终为"mysql",则可以在init文件中进行设置,或使用自定义它M-x customize-variable

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

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

  1. 通过访问文件或者使用C-x b创建临时缓冲区切换到其中包含SQL文本的缓冲区.
  2. 将此缓冲区设置为正确的SQL类型,M-x sql-set-product然后在提示符处输入已知类型,例如"mysql".
  3. 点击C-c <TAB>(绑定sql-product-interactive)切换到与此缓冲区关联的iSQL缓冲区,可能是通过查找或创建新的comint进程

可能值得阅读M-x sql-help命令的输出.SQL模式的文档非常简单.我已经弄清楚我对它的了解很少,主要是从阅读来源.

  • 不,它没有.我需要进行这种舞蹈才能发挥作用,顺序很重要:http://paste.lisp.org/display/134684#3 (2认同)