我是emacs的新手,不太习惯lisp,所以这可能是一个新错误,但我找不到解决方案。
我尝试安装sql模式与我的mysql数据库交互。
为此,我修改了sql。在sql-mysql-login-params
中添加了端口,以精确指定sql-user、sql-password、sql-database、sql-server和sql-port选项。启动emacs和M-x sql-mysql
模式更改为SQLi[MySQL]:run
myfile.sql
此缓冲区为SQL[ANSI]模式
然后我C-c - C-r一个sql语句,有错误"No sql Process started"
如前所述,我M-x sql-set-sql -buffer,但我有错误"There is no suitable SQLi buffer"
对于这个,我找不到解决办法…我错过了什么?
我使用emacs 24.2.1
编辑:当我直接在SQLi[MySQL]:run buffer中执行select语句时,它会返回预期的行…
我认为你是非常正确的,sql-set-sqli-buffer没有找到合适的SQLi缓冲区的原因是因为它在遍历打开缓冲区列表时考虑了sql模式缓冲区的产品子类型。
这是我的sql副本的缓冲区测试代码。我的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',你可以在你的init文件中设置它,或者使用M-x customize-variable
sql模式在很大程度上依赖于使用正确的本地变量设置缓冲区,以便有一个工作相关的iSQL会话。
一个典型的序列,我用一个查询在另一个我已经编辑的缓冲区中启动一个iSQL缓冲区,如下所示
- 切换到一个缓冲区与SQL文本在它,通过访问文件可能,或使用
- 将此缓冲区设置为正确的SQL类型,使用
M-x sql-set-product
,然后输入已知类型,例如在提示符处输入"mysql"。 - 点击
C-c <TAB>
(绑定到sql-product-interactive
)切换到与此缓冲区关联的iSQL缓冲区,可能通过定位或创建新的comint进程
C-x b
创建一个临时缓冲区。 M-x sql-help
命令的输出可能值得一读。sql模式的文档非常简单。