10

我是 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]:run

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

此缓冲区处于 SQL[ANSI] 模式

然后我抄送一条 sql 语句并出现错误“没有启动 SQL 进程”

正如某处所说,我 Mx sql-set-sqli-buffer 但我有错误“没有合适的 SQLi 缓冲区”

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

我使用 emacs 24.2.1

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

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

4

1 回答 1

17

我认为你是对的,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]。

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

SQL 模式是相当有序的,依赖于使用正确的局部变量设置缓冲区,以便有一个有效的关联 iSQL 会话。

我用来启动 iSQL 缓冲区并在我已经编辑的另一个缓冲区中进行查询的典型序列如下

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

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

于 2013-01-14T16:39:59.057 回答