Замените isql на sqsh в emacs (Ubuntu) - PullRequest
3 голосов
/ 02 февраля 2012

Использование emacs в Ubuntu 11.10.Я хочу подключиться к базе данных SQL Server, используя sqsh вместо isql.Я добавил следующее в мой 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, и я не могу найти много о том, как это сделать (что заставляет меня думать, что это можетне будет возможности).Очевидно, я могу запустить sqsh из оболочки, но тогда я потеряю интеграцию с режимом SQL.Я не уверен, что я могу / нужно сделать с моим файлом init.el, чтобы сделать это возможным.

Я думаю, все, что мне действительно нужно сделать, - это выяснить, как заставить emacs отправлять -D, а не -d в sqsh.Видимо, isql не волнует, но sqsh глубоко заботится о разнице.

1 Ответ

2 голосов
/ 03 февраля 2012

Как вы говорите, реальный ответ - заставить Emacs использовать -D вместо -d.Однако, в качестве обходного пути, запуск sql-sybase вместо sql-ms, кажется, работает нормально для меня.

Обновление : попробуйте этот код, он удаляет параметр -n из sql-ms-options и переопределяет 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)))
...