2012-02-02 50 views
3

在Ubuntu 11.10上使用emacs。我想使用sqsh而不是isql連接到SQL Server數據庫。我將下列內容添加到我的啓動中。用emacs替換isql與sqsh(Ubuntu)

(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深深地關注這個差異。

回答

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))) 
+0

我應該嘗試,一個我自己。我甚至將我的init.el設置爲使用sqsh,儘管我懷疑我會連接到Sybase數據庫(我們使用SQL Server和Postgres)。 – Choens 2012-02-03 18:56:51

+0

我打算再等一天左右,但沒有人提出更好的解決方案,我將接受這個解決方案,只是因爲它在我的系統上工作而沒有任何額外的努力。也許我應該進去看看sql-mode的lisp(不是我是一個很好的lisp黑客)。 – Choens 2012-02-03 18:58:06

+0

哇。更新後的想法稍微複雜一點,但完美地工作。 – Choens 2012-02-06 12:39:01