powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странное поведение команды INPUT в скрипте.
7 сообщений из 7, страница 1 из 1
Странное поведение команды INPUT в скрипте.
    #38686383
Lo0ogin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

С помощью Delphi и компонента IBScript пытаюсь выполнить скрипт из файла.

Скрипт лежит в "C:\Data\SQL\Script.sql"

В этом скрипте есть строчка
Код: sql
1.
INPUT 'SQL\OtherScript.sql';



В коде Delphi выполняю:
Код: pascal
1.
2.
3.
SetCurrentDir('C:\Data');
DM_Connect.IBScript_CreateDB.Script.LoadFromFile('C:\Data\SQL\Script.sql');
DM_Connect.IBScript_CreateDB.ExecuteScript;



Во время выполнения скрипта происходит ошибка
Код: sql
1.
Cannot open file "C:\Data\SQL\OtherScript.sql'". Не удаётся найти указанный файл



Сам скрипт присутствует в папке.

Прошу обратить внимание, что в тексте ошибки полный путь к не обнаруженному скрипту после .sql содежит одинарную кавычку.

Если ручками переименовать скрипт из "OtherScript.sql" в "OtherScript.sql'" с одинарной кавычкой, то ошибки нет, программа находит этот скрипт и выполняет его содержимое.

Если строку с
Код: sql
1.
INPUT 'SQL\OtherScript.sql';

изменить на
Код: sql
1.
INPUT "SQL\OtherScript.sql";

, то текст ошибки выглядит так
Код: sql
1.
Cannot open file "C:\Data\SQL\OtherScript.sql"". Не удаётся найти указанный файл


В конце появляется двойная кавычка.

Откуда берётся эта кавычка и как от неё избавиться?
...
Рейтинг: 0 / 0
Странное поведение команды INPUT в скрипте.
    #38686384
Lo0ogin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл уточнить, что всё работает с БД Firebird 2.5
...
Рейтинг: 0 / 0
Странное поведение команды INPUT в скрипте.
    #38686393
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INPUT SQL\OtherScript.sql; (без апострофов и кавычек) - что будет ?
...
Рейтинг: 0 / 0
Странное поведение команды INPUT в скрипте.
    #38686403
Lo0ogin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТаблоидINPUT SQL\OtherScript.sql; (без апострофов и кавычек) - что будет ?

Выполняется без ошибок. Проблема в том, что у меня нет возможности изменять текст скриптов и код
Код: pascal
1.
2.
3.
SetCurrentDir('C:\Data');
DM_Connect.IBScript_CreateDB.Script.LoadFromFile('C:\Data\SQL\Script.sql');
DM_Connect.IBScript_CreateDB.ExecuteScript;

прекрасно выполняется на других компьютерах. Проблема с кавычками только на одном, только у меня (счастливчик).

Помогите понять в чём дело и как сделать чтобы скрипт выполнялся в своём первоначальном варианте
Код: sql
1.
INPUT 'SQL\OtherScript.sql';
...
Рейтинг: 0 / 0
Странное поведение команды INPUT в скрипте.
    #38686605
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lo0oginПомогите понять в чём дело и как сделать чтобы скрипт выполнялся в своём
первоначальном варианте
Бери исходники TIBScript и отлаживай. Другого пути нет.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Странное поведение команды INPUT в скрипте.
    #38686714
авторЕсли ручками переименовать скрипт из "OtherScript.sql" в "OtherScript.sql'" с одинарной кавычкой, то ошибки нет, программа находит этот скрипт и выполняет его содержимое.Т.е. править код скриптов вы не можете, но переименовать их - запросто ? Странно, но даже если и так, то запустите батник с переименовкой перед накатом "основного" скрипта... Выглядит через жо без шашечек, но таки ехать ведь будет ?..
...
Рейтинг: 0 / 0
Странное поведение команды INPUT в скрипте.
    #38686715
Lo0ogin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovLo0oginПомогите понять в чём дело и как сделать чтобы скрипт выполнялся в своём
первоначальном варианте
Бери исходники TIBScript и отлаживай. Другого пути нет.



И ведь действительно!

Вот так выглядела процедура, что выполняла INPUT в юните IBScript:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TIBSQLParser.LoadInput;
var
  FileName: string;
begin
  FInput.Clear;
  ImportIndex := 0;
  FileName := FTokens[1];
  if FileName[Low(FileName)].IsInArray([QUOTE, DBL_QUOTE]) then
    FileName := FileName.Remove(0, 1);
  if FileName[High(FileName)].IsInArray([QUOTE, DBL_QUOTE]) then
    FileName := FileName.Remove(High(fileName), 1);

  FInput.LoadFromFile(FileName);
end;



Я поправил так и заработало:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TIBSQLParser.LoadInput;
var
  FileName: string;
begin
  FInput.Clear;
  ImportIndex := 0;
  FileName := FTokens[1];
  if FileName[Low(FileName)].IsInArray([QUOTE, DBL_QUOTE]) then
    FileName := FileName.Remove(0, 1);
  if FileName[High(FileName)].IsInArray([QUOTE, DBL_QUOTE]) then
    FileName := FileName.Remove(High(fileName) - 1, 1);

  FInput.LoadFromFile(FileName);
end;



Интересно, что эта проблема появилась в XE5. При этом на других компьютерах компилировалось через XE4

Вот эта же процедура в XE4:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TIBSQLParser.LoadInput;
var
  FileName: string;
begin
  FInput.Clear;
  ImportIndex := 0;
  FileName := FTokens[1];
  if FileName[Low(FileName)].IsInArray([QUOTE, DBL_QUOTE]) then
    Delete(FileName, Low(FileName), 1);
  if FileName[Length(FileName)].IsInArray([QUOTE, DBL_QUOTE]) then
    Delete(FileName, Length(FileName), 1);

  FInput.LoadFromFile(FileName);
end;



Может кто-нибудь пояснить почему возникла такая ситуация, если High и Length в данном случае возвращают одно и то же значение?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странное поведение команды INPUT в скрипте.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]