首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql-set- sqli -缓冲区“没有合适的sqli缓冲区”

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

Stack Overflow用户
提问于 2013-01-04 09:09:53
回答 1查看 3.1K关注 0票数 10

我对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模式吗?

EN

回答 1

Stack Overflow用户

发布于 2013-01-14 16:39:59

我认为您是对的,SQL SQLi之所以没有找到合适的SQLi缓冲区,是因为它在遍历打开缓冲区列表时考虑到了SQL模式缓冲区的产品子类型。

下面是与我的emacs一起提供的sql.el副本中的缓冲区测试代码(版本- GNU emacs 24.2.1 )。

代码语言:javascript
复制
(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缓冲区的典型序列如下

  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模式的文档非常简单。我已经弄清楚了我对这件事所知甚少,主要是通过阅读资料来源。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14154093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档