powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка при повторном присвоении параметра
20 сообщений из 20, страница 1 из 1
Ошибка при повторном присвоении параметра
    #38704696
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот нижеследующий код выдает ошибку "Trying to store a string of length 2 into a field that can only contain 1". Код такой:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
SQL_R.Close; // SQL_R is TIBSQL
SQL_R.SQL.Clear;
SQL_R.SQL.Add('select * from rdb$database where rdb$character_set_name=? ' +
  'or rdb$character_set_name=?');
SQL_R.Transaction.StartTransaction;
try
  SQL_R.ParamCheck := False;
  SQL_R.Params.Count := 2;
  SQL_R.Params.AddName('prmStr', 0);
  SQL_R.Params.AddName('prmStr2', 1);
  SQL_R.ParamByName('prmStr').AsString := 'bla bla';
  SQL_R.ParamByName('prmStr2').AsString := '1';
  SQL_R.ExecQuery;
  Memo1.Lines.Add(Format('"%s" - "%s"', [SQL_R.Fields[0].AsString,
    SQL_R.Fields[1].AsString]));
  SQL_R.Transaction.Commit;
finally
  if SQL_R.Transaction.InTransaction then
    SQL_R.Transaction.Rollback;
  SQL_R.Close;
end;

SQL_R.Close;
SQL_R.SQL.Clear;
SQL_R.SQL.Add('select * from rdb$database where rdb$character_set_name=?');
SQL_R.Transaction.StartTransaction;
try
  SQL_R.ParamCheck := False;
  SQL_R.Params.Count := 1;
  SQL_R.Params.AddName('prmStr', 0);
  SQL_R.ParamByName('prmStr').AsString := 'bla bla';
  SQL_R.ExecQuery;
  Memo1.Lines.Add(Format('"%s" - "%s"', [SQL_R.Fields[0].AsString,
    SQL_R.Fields[1].AsString]));
  SQL_R.Transaction.Commit;
finally
  if SQL_R.Transaction.InTransaction then
    SQL_R.Transaction.Rollback;
  SQL_R.Close;
end;

SQL_R.Close;
SQL_R.SQL.Clear;
SQL_R.SQL.Add('select * from rdb$database where rdb$character_set_name=? ' +
  'or rdb$character_set_name=?');
SQL_R.Transaction.StartTransaction;
try
  SQL_R.ParamCheck := False;
  SQL_R.Params.Count := 2;
  SQL_R.Params.AddName('prmStr', 0);
  SQL_R.Params.AddName('prmStr2', 1);
  SQL_R.ParamByName('prmStr').AsString := 'bla bla';
  SQL_R.ParamByName('prmStr2').AsString := '22';  // !!! ВОТ ЗДЕСЬ ВЫЛАЗИТ ОШИБКА !!!
  SQL_R.ExecQuery;
  Memo1.Lines.Add(Format('"%s" - "%s"', [SQL_R.Fields[0].AsString,
    SQL_R.Fields[1].AsString]));
  SQL_R.Transaction.Commit;
finally
  if SQL_R.Transaction.InTransaction then
    SQL_R.Transaction.Rollback;
  SQL_R.Close;
end;


Суть такая:
1) создаю в первом запросе 2 параметра вручную, присваиваю им строковые значения;
2) создаю во втором запросе 1 параметр вручную, присваиваю ему строковое значение;
3) создаю в третьем запросе 2 параметра вручную, присваиваю им строковые значения; но во втором параметре длина значения больше, чем было указано в первом запросе.
При таких условиях вылезает ошибка. Если же п.2 нет, то без проблем, либо п.2 есть, но длина второго параметра в п.3 не более длины из п.1, то тоже все ОК. Как лечить?
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704737
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-xКак лечить?
Не создавать параметры вручную. Вызвать Prepare.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704741
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Я использую execute block и там параметры как "?". Поэтому не вручную параметры создавать не могу.
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704754
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-x,

по порядку номеров заполняй, что за проблема?
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704759
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-x,

задавай параметрам тип и размер самостоятельно.
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704761
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

не понял идею, подробнее можно?
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704796
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-xЯ использую execute block и там параметры как "?". Поэтому не вручную
параметры создавать не могу.
Ты можешь не использовать кривой IBX и тогда проблем с параметрами не будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704811
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-xне понял идею, подробнее можно?
имена параметров в общем случае - это фикция, на клиентской стороне. Сами по себе они идут по номерам. Первый ? это первый параметр, второй ? - второй, и т.д. Если нумерация с 0, значит 0, 1, 2.
Params[0].asString:=....
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704815
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Пробовал указывать параметр через его индекс - результат тот же.
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704825
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

вот так тоже не решает проблему:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL_R.ParamCheck := False;
SQL_R.Params.Count := 2;
SQL_R.Params.AddName('prmStr', 0);
SQL_R.Params.AddName('prmStr2', 1);
SQL_R.Params[0].AsString := 'bla bla';
SQL_R.Params[1].SqlVar.SqlType := SQL_TEXT or (SQL_R.Params[1].SqlVar.SqlType and 1); // set type
SQL_R.Params[1].SqlVar.SqlLen := 100; // set len
SQL_R.Params[1].AsString := '22';
SQL_R.ExecQuery;
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704861
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-xПробовал указывать параметр через его индекс - результат тот же.
я не очень понимаю, при чем тут execute block, и зачем выключен paramcheck, если никакого execute block в запросах нет. Или ты тренируешься для execute block?
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704863
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

в коде лишь простой пример запросов для генерации ошибки. В реальном проекте используются execute block.
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704873
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм...

Если сразу после "SQL_R.Params.Count := 2" добавить:
Код: pascal
1.
2.
3.
4.
...
SQL_R.Unprepare;
SQL_R.Prepare;
...определение параметров..


то ошибка не вылазит. Такой "хак" можно считать валидным?
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704889
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрю я на эти извращения и думаю: написать этот же код на чистом API - выйдет короче и
понятнее. WTF?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704929
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Почему Prepare-Unprepare - это изврат?
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704944
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-xПочему Prepare-Unprepare - это изврат?
Попробуй его на канале с большим пингом - почувствуешь собственной шкурой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704946
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

т.е. при частых SQL-запросах будет тормозить прога?
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704975
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sann-x!
You wrote on 24 июля 2014 г. 14:23:02:

Sann-x> т.е. при частых SQL-запросах будет тормозить прога?
не будет. расслабься.
а то дмитрий ненавязчиво впарит тебе свой репликатор.
как единственно верное решение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38704979
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

ОК. Тогда закоммитю этот "хак" как исправление бага.
...
Рейтинг: 0 / 0
Ошибка при повторном присвоении параметра
    #38705012
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-xТогда закоммитю этот "хак" как исправление бага.
Прэлееестно. Сначала создаём себе проблемы используя кривые компоненты, а потом героически
с ними боремся. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка при повторном присвоении параметра
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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