2013-01-04 37 views
9

我是emacs的新手,並不是很習慣於lisp,所以這可能是一個newby錯誤,但我找不到解決方案。sql-set-sqli-buffer「沒有合適的sqli緩衝區」

我嘗試安裝sql模式與我的mysql數據庫進行交互。爲此,我修改了sql.el文件以精確的使用sql-user,sql-password,sql-database,sql-server和sql-port選項,在sql-mysql-login中添加了端口-params

我啓動的Emacs和MX SQL-mysql的

模式改變SQLI [MySQL的]:運行

我改變緩衝區,發現的Mx文件myfile.sql

此緩衝區在SQL [ANSI]模式下

然後我抄送鉻SQL語句並有錯誤「無SQL進程啓動」

由於地方說,我的Mx SQL-設置SQLI緩衝區,但我有錯誤「沒有合適的SQLI緩衝區」

爲此,我無法找到解決方案...我錯過了什麼?

我使用emacs 24.2.1

編輯:當我在SQLI [MySQL的]直接執行select語句:運行緩衝液,按預期的方式返回行...

應該不是其他緩衝區在SQL [MySQL]模式下?

回答

15

我認爲你說得很對,sql-set-sqli-buffer找不到合適的SQLi緩衝區的原因是因爲它在遍歷列表時考慮了SQL模式緩衝區的產品子類型打開緩衝區。

下面是從我的sql.el的副本,它隨我的emacs(版本緩衝測試的代碼 - 的GNU emacs用於主要用於測試的資格是24.2.1

(defun sql-find-sqli-buffer (&optional product connection) 
    "Returns the name of the current default SQLi buffer or nil. 
In order to qualify, the SQLi buffer must be alive, be in 
`sql-interactive-mode' and have a process." 
    (let ((buf sql-buffer) 
     (prod (or product sql-product))) 
    (or 
    ;; Current sql-buffer, if there is one. 
    (and (sql-buffer-live-p buf prod connection) 
      buf) 
    ;; Global sql-buffer 
    (and (setq buf (default-value 'sql-buffer)) 
      (sql-buffer-live-p buf prod connection) 
      buf) 
    ;; Look thru each buffer 
    (car (apply 'append 
       (mapcar (lambda (b) 
          (and (sql-buffer-live-p b prod connection) 
           (list (buffer-name b)))) 
         (buffer-list))))))) 

兩個值一個緩衝區和一個標識產品類型的符號,這個符號作爲參數傳入,或者默認爲sql-product的值,看起來sql-product,除非以其他方式設置,默認爲'ansi,它是爲什麼你的編輯緩衝區是SQL [ANSI]

你應該嘗試在此緩衝區中設置產品類型(例如使用M-x sql-set-product)試圖將SQLi緩衝區與查詢緩衝區相關聯。如果你想在默認永遠是「MySQL的」你可以在你的init文件中設置此,或使用M-x customize-variable

SQL模式是相當秩序依賴於具有緩衝,從而設置了正確的本地變量來定製它有一個工作關聯的iSQL會話。

一個典型的序列,通過訪問一個文件也許是我用來啓動一個isql緩衝區與另一個緩衝區我已經修改爲如下

  1. 切換到與它的SQL文本的緩衝區查詢,或使用C-x b創建臨時緩衝區。
  2. 將此緩衝區設置爲正確的SQL類型,然後輸入M-x sql-set-product,然後在提示符處輸入已知類型,例如「mysql」。
  3. 命中C-c <TAB>(綁定到sql-product-interactive)切換到關聯於這個緩衝器的緩衝器的iSQL,潛在地通過定位或創建一個新的通信情報處理

這可能是值得讀取M-x sql-help命令的輸出。 SQL模式的文檔很輕。我主要通過閱讀資料來發現我對它的瞭解。

+0

感謝您的回答。我以前只能在我用C-x b創建的緩衝區上使用M-x sql模式,而且它會做正確的事情。現在我必須M-x sql模式RET M-x sql-set-product RET「postgres」RET。假設在Emacs 24中更改了sql-find-sqli-buffer代碼。 – felideon

+0

實際上,當我嘗試使用C-c C-c時,它仍然會在迷你緩衝區中產生「無SQL進程啓動」錯誤。 :/ – felideon

+0

即使使用sql-postgres SQLi緩衝區已經在運行?我認爲對於emacs 24,SQL模式可能已經有所改變,因爲稍後我又回過頭來使用了一些,而且看起來好像有點誇張。我的1-2-3例子不適合你嗎(用postgres替換mysql)? – cms