我对emacs很陌生,也不太习惯lisp,所以这可能是newby错误,但我找不到解决办法。
我尝试安装sql模式来与mysql进行交互。
为此,我修改了sql.el文件以精确执行sql-user、sql-password、sql-database、sql-server和sql-port选项,并在sql-mysql登录-params中添加了端口。
我启动emacs和M sql-mysql。
模式更改为SQLiMySQL:运行
我更改缓冲区,M查找文件myfile.sql。
此缓冲区处于SQLANSI模式。
然后我C-c C-r是一个sql语句,并有错误“无SQL进程启动”。
就像在某个地方说的,我是M sql-set-sql-缓冲区,但是我有“没有合适的SQLi缓冲区”的错误。
为此,我找不到解决办法.我错过了什么?
我使用emacs 24.2.1
编辑:当我在SQLiMySQL:run缓冲区中直接执行select语句时,它会按预期返回行.
另一个缓冲区不应该处于SQLMySQL模式吗?
发布于 2013-01-14 16:39:59
我认为您是对的,SQL SQLi之所以没有找到合适的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)))))))主要用于测试合格性的两个值是一个缓冲区和一个标识产品类型的符号。此符号作为参数传入,或默认为的值。看来,除非以其他方式设置,否则sql-product默认为'ansi‘,这就是为什么编辑缓冲区是SQLANSI的原因。
在尝试将M-x sql-set-product缓冲区与查询缓冲区关联之前,您应该尝试在此缓冲区中设置产品类型(例如使用SQLi )。如果您希望默认值始终是“mysql”,可以在init文件中设置它,或者使用M-x customize-variable自定义它。
SQL-模式的顺序取决于是否设置了具有正确局部变量的缓冲区,以便有一个工作关联的iSQL会话。
在我正在编辑的另一个缓冲区中使用查询启动iSQL缓冲区的典型序列如下
C-x b创建临时缓冲区,切换到其中包含SQL文本的缓冲区。M-x sql-set-product,然后在提示符处输入已知类型,如"mysql“。C-c <TAB> (绑定到sql-product-interactive)切换到与此缓冲区关联的iSQL缓冲区,可能通过定位或创建新的comint进程可能值得阅读M-x sql-help命令的输出。SQL模式的文档非常简单。我已经弄清楚了我对这件事所知甚少,主要是通过阅读资料来源。
https://stackoverflow.com/questions/14154093
复制相似问题