3

在 Ubuntu 11.10 上使用 emacs。我想使用 sqsh 而不是 isql 连接到 SQL Server 数据库。我将以下内容添加到我的 initi.el

(set 'sql-sybase-program "sqsh")
(set 'sql-ms-program "sqsh")

它重新编译并成功加载。但是,当我使用 sql-ms 并尝试连接到数据库时,我收到了错误,因为 emacs 在应该使用大写命令参数时使用了小写命令参数。此外,我可以从命令行使用 sqsh 成功连接到数据库服务器。当我尝试在 emacs 中运行时,出现以下错误:

sqsh: -d: Invalid integer expression

Process SQL exited abnormally with code 255

我做了一个相当广泛的谷歌搜索,但我找不到太多关于如何做到这一点的信息(这让我认为这可能是不可能的)。显然,我可以在 shell 中运行 sqsh,但是我失去了 SQL 模式集成。我不确定我可以/需要对我的 init.el 文件做什么才能使这成为可能。

我认为我真正需要做的就是弄清楚如何让emacs向sqsh发送-D而不是-d。显然 isql 不在乎,但 sqsh 非常关心差异。

4

1 回答 1

2

正如您所说,真正的答案是让 Emacs 使用-D而不是-d. 但是,作为一种解决方法,运行sql-sybase而不是sql-ms似乎对我来说很好。

更新:试试这个代码,它删除了-n选项sql-ms-options并重新定义sql-ms-options使用-D而不是-d作为选择数据库的选项:

(setq sql-ms-options(删除“-n”sql-ms-options))

(defun sql-comint-ms (产品选项)
  “创建 comint 缓冲区并连接到 Microsoft SQL Server。”
  ;; 将程序的所有参数(如果已定义)放在列表​​中并调用
  ;; 做comint。
  (让((参数选项))
    (if (not (string="" sql-server))
        (setq params (append (list "-S" sql-server) params)))
    (if (not (string="" sql-database))
        (setq params (append (list "-D" sql-database) params)))
    (if (not (string="" sql-user))
    (setq params (append (list "-U" sql-user) params)))
    (if (not (string="" sql-password))
    (setq params (append (list "-P" sql-password) params))
      (if (string="" sql-user)
      ;; 如果既没有提供用户名也没有提供密码,使用系统
      ;; 证书。
      (setq 参数(附加(列表“-E”)参数))
    ;; 如果 -P 作为最后一个参数传递给 ISQL,而没有
    ;; 密码,它被认为是空的。
    (setq params (append params (list "-P")))))
    (sql-comint 产品参数)))
于 2012-02-03T14:04:08.623 回答