【问题标题】:Replace isql with sqsh in emacs (Ubuntu)在 emacs (Ubuntu) 中用 sqsh 替换 isql
【发布时间】:2012-02-02 18:40:09
【问题描述】:

在 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

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

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

【问题讨论】:

    标签: emacs isql sqsh


    【解决方案1】:

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

    更新:试试这段代码,它从sql-ms-options 中删除了-n 选项并重新定义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 产品参数)))

    【讨论】:

    • 我应该自己尝试一下。我什至将我的 init.el 设置为两者都使用 sqsh,尽管我怀疑我是否会连接到 Sybase 数据库(我们使用 SQL Server 和 Postgres)。
    • 我要再等一天左右,但是没有人想出更好的解决方案,我会接受这个作为解决方案,只是因为它确实可以在我的系统上运行而没有任何额外的努力。也许我应该进去看看 lisp 的 sql-mode(不是说我是一个伟大的 lisp 黑客)。
    • 哇。更新后的想法有点复杂,但效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2017-01-13
    • 2016-04-14
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多