10

私はemacsを初めて使用し、lispにあまり慣れていないため、これはおそらくnewbyエラーですが、解決策が見つかりません。

mysql DB と対話するために sql モードをインストールしようとしています。

そのために、sql.el ファイルを修正して、sql-user、sql-password、sql-database、sql-server、および sql-port オプションを正確に指定し、sql-mysql-login-params にポートを追加しました。

emacs と Mx sql-mysql を起動します

モードを SQLi[MySQL]:run に変更

バッファを変更し、Mx find-file myfile.sql

このバッファは SQL[ANSI] モードです

次に、SQLステートメントをCc Crすると、「SQLプロセスが開始されていません」というエラーが表示されます

どこかで言ったように、私は Mx sql-set-sqli-buffer を実行しましたが、「適切な SQLi バッファーがありません」というエラーが表示されました。

このため、解決策が見つかりません...何が欠けていましたか?

私はemacs 24.2.1を使用しています

編集: SQLi[MySQL]:run バッファで select ステートメントを直接実行すると、期待どおりに行が返されます...

もう一方のバッファは SQL[MySQL] モードであるべきではありませんか?

4

1 に答える 1

17

sql-set-sqli-buffer が適切な SQLi バッファーを見つけられない理由は、開いているバッファーのリストをウォークスルーするときに、SQL モード バッファーの製品サブタイプが考慮されるためです。

私のemacsに同梱されているsql.elの私のコピーからのバッファテストのコードは次のとおりです(バージョン - 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)))))))

主に適格性をテストするために使用される 2 つの値は、バッファーと製品タイプを識別する記号です。この記号は引数として渡されるか、デフォルトで sql-product の値になります。他の方法で設定されていない限り、sql-product はデフォルトで 'ansi に設定されているようです。これが、編集バッファが SQL[ANSI] である理由です。

M-x sql-set-productSQLi バッファをクエリ バッファに関連付ける前に、このバッファで製品タイプを設定してみてください (たとえば、 を使用)。デフォルトを常に「mysql」にしたい場合は、これを init ファイルに設定するか、次を使用してカスタマイズできます。M-x customize-variable

SQL モードは、関連付けられた iSQL セッションを機能させるために、適切なローカル変数を使用してバッファをセットアップすることに大きく依存します。

すでに編集中の別のバッファでクエリを使用して iSQL バッファを開始するために使用する典型的なシーケンスは次のとおりです。

  1. おそらくファイルにアクセスするか、 を使用C-x bして一時バッファを作成することにより、SQL テキストを含むバッファに切り替えます。
  2. このバッファを正しい SQL タイプに設定M-x sql-set-productし、プロンプトで「mysql」などの既知のタイプを入力します。
  3. ヒットC-c <TAB>(にバインドsql-product-interactive) して、このバッファーに関連付けられた iSQL バッファーに切り替えます。新しい comint プロセスを見つけたり作成したりすることによって可能性があります

コマンドの出力を読むことはおそらく価値がありますM-x sql-help。SQL モードのドキュメントは非常に軽量です。ほとんどの場合、ソースを読んで、それについて知っていることはほとんどありません。

于 2013-01-14T16:39:59.057 に答える