Что за утилита isql и где ее найти
В составе пакета Firebird после установки в папке /Bin есть полезная программа isql.exe.
Запускаем это консольное приложение, получаем стандартное окно с чёрным фоном.
Итак, утилита запущена, приглашение поработать ручками с SQL получено в виде мигающего курсора.
Подключаем БД Firebird с помощью утилиты isql.exe
Как нам подсказывает строка приглашения при запуске, так мы и сделаем.
Поскольку БД у нас уже имеется, и известен путь до неё, просто вбиваем ручками строку без ошибок, поскольку вклиниться и отредактировать многострочный текст не получится. Если у вас получилось, расскажите в комментариях, как.
Если строка получается длинной, то можно просто перейти на следующую строку и продолжить через приглашение >CON, как показано ниже.
Набиваем ручками
CONNECT <наш путь к БД>
user 'SYSDBA' password 'masterkey';
В конце строки символ точки с запятой обязателен для синтаксиса SQL.
Проверяем команду на наличие ошибок, при их отсутствии нажимаем клавишу Еnter.
При правильном подключении мы получим строку
DATABASE <полный путь к БД>, user: SYSDBA'
и можем приступить непосредственно к задаче, то есть проверке запроса.
Как выполнить многострочный запрос из файла в isql.exe
Принимаем, как аксиому, что запрос реальный, рабочий, относится к имеющейся БД. Однако, это желательно проверить заранее.
Открываем файл, просто копируем целиком весь текст(а это, прочим между, строчек сорок абсолютно незнакомого содержания с названиями таблиц, полей, переименованием, с вложенных в запрос другим запросом).
Обычной процедурой вставки текста клавишами Shift+Insert через буфер обмена вставляем скопированный текст запроса сразу за мигающим курсором с приглашением >SQL.
Получаем многострочную портянку-копию нашего запроса.
Добавляем точку с запятой, запускаем нажатием на Enter и....
Получаем ошибку, что не определены некоторые параметры, а конкретно :date1 и :date2.
Так выяснилось, что запрос параметрический, и эти параметры надо каким-то образом задать.
Поскольку название говорит само за себя, надо задать адекватный интервал в виде двух реальных дат, чтобы наш запрос имел смысл типа "покажи мне расход конкретных материалов в такой то организации за период, задаваемый датами".
Здесь на помощь приходит IBExpert, с помощью которого можно найти и просмотреть нужную таблицу, определить реальные даты. Можно вообще задать одинаковую дату. Я выбрала соседние, и подставила конкретные значения в кавычках вместо :date - в формате '08.03.1917'.
Запускаем запрос на выполнение, как описано выше.
Люблю смотреть, как другие работают. На экране замелькали буквы-цифры, и я подумала, что выполняется безумный бесконечный цикл, но потом, просто тыкнув мышкой в поле окна, с удивлением обнаружила, что таким способом можно приостановить выполнение, и прочитать текущее содержимое экрана.
Так я убедилась, что конструкция рабочая и выдает более-менее адекватную информацию.
Поскольку вывод на экран это очень медленная процедура, то вывод почти двух тысяч получившихся записей занял минут пятнадцать даже на шустром ноутбуке с 8гб оперативки.
В это время можно по медитировать, выпить кофе и просто сделать перерыв и подумать, что же делать дальше.
А дальше предстоит запихать результат запроса в таблицу Ехсel, чтобы было все быстро и красиво.
Но об этом чуть позже.
Благодарю за внимание!