在emacs(Ubuntu)中用sqsh替换isql
在Ubuntu 11.10上使用emacs。我想使用sqsh而不是isql连接到SQL Server数据库。我在initi.el中添加了以下内容在emacs(Ubuntu)中用sqsh替换isql,emacs,isql,sqsh,Emacs,Isql,Sqsh,在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中运行
(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发送a-D而不是a-D。显然isql并不关心,但sqsh非常关心差异。正如您所说,真正的答案是让Emacs使用
-D
而不是-D
。但是,作为一种变通方法,运行sqlsybase
而不是sqlms
似乎对我来说很好
更新:尝试此代码,它将从sql ms选项
中删除-n
选项,并重新定义sql ms选项
,以使用-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)))
(设置sql ms选项(删除“-n”sql ms选项))
(定义sql comint ms(产品选项)
“创建comint缓冲区并连接到Microsoft SQL Server。”
;将所有参数放入列表中的程序(如果已定义)并调用
来吧。
(let((参数选项))
(如果(不是(字符串=”“sql server))
(setq参数(附加(列表“-S”sql server)参数)))
(如果(不是(string=”“sql数据库))
(setq参数(附加(列表“-D”sql数据库)参数)))
(如果(不是(string=”“sql用户))
(setq参数(附加(列表“-U”sql用户)参数)))
(如果(不是(字符串=“sql密码))
(setq参数(附加(列表“-P”sql密码)参数)
(如果(字符串=“sql用户”)
;如果未提供用户和密码,请使用系统
资格证书
(setq参数(附加(列表“-E”)参数)
;If-P作为最后一个参数传递给ISQL,但不带
;密码,它被认为是空的。
(setq参数(附加参数(列表“-P”!”))
(sql comint产品参数)
我应该自己试一下。我甚至将init.el设置为同时使用sqsh,尽管我怀疑我是否会连接到Sybase db(我们使用SQL Server和Postgres)。我将再等一天左右,但如果没有人提出更好的解决方案,我将接受这一解决方案,因为它在我的系统上不需要任何额外的工作。也许我应该进去看看LispforSQL模式(并不是说我是一个伟大的lisp黑客)。更新后的想法有点复杂,但效果很好。