在emacs(Ubuntu)中用sqsh替换isql

在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中运行

在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发送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黑客)。更新后的想法有点复杂,但效果很好。