在Ubuntu的emacs中用sqsh替换isql

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发送一个“-D”而不是“-d”给sqsh。据说isql不在意,但sqsh非常在意这个区别。
1个回答

2
正如你所说,真正的答案是让Emacs使用-D而不是-d。然而,作为解决方法,运行sql-sybase而不是sql-ms对我来说似乎很好用。
更新:尝试这段代码,它会从sql-ms-options中删除-n选项,并重新定义sql-ms-options以使用-D而不是-d作为选择数据库的选项:
(setq sql-ms-options (remove "-n" sql-ms-options))
(defun sql-comint-ms (product options) "Create comint buffer and connect to Microsoft SQL Server." ;; Put all parameters to the program (if defined) in a list and call ;; make-comint. (let ((params options)) (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) ;; if neither user nor password is provided, use system ;; credentials. (setq params (append (list "-E") params)) ;; If -P is passed to ISQL as the last argument without a ;; password, it's considered null. (setq params (append params (list "-P"))))) (sql-comint product params)))

我应该自己尝试一下。我甚至设置了我的init.el来使用sqsh,即使我怀疑我永远不会连接到Sybase数据库(我们使用SQL Server和Postgres)。 - Choens
我打算再等一天左右,但如果没有人提出更好的解决方案,我将接受这个解决方案,仅仅因为它在我的系统上可以工作而不需要额外的努力。也许我应该去看看sql-mode的lisp代码(虽然我不是一个伟大的lisp黑客)。 - Choens
哇,更新后的想法有点更复杂,但是完美地运行。 - Choens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接