'Translate Error. Value out of bounds.'
'Translate Error. Value out of bounds.'
При переходе с Delphi 3 на 6 БД (Interbase 5.5)
при выполнении процедур (TStoredProc) начала выдавать
ошибку - 'Translate Error. Value out of bounds.'
С помощью SQL Explorer показывает тело только одной процедуры,
состоящей тольно из англйиских букв.
С помощью <Interbase interactive SQL> - <Extract database> -
показывает все (кодировка win1253).
КАК ЭТО ВЫЛЕЧИТЬ ?
при выполнении процедур (TStoredProc) начала выдавать
ошибку - 'Translate Error. Value out of bounds.'
С помощью SQL Explorer показывает тело только одной процедуры,
состоящей тольно из англйиских букв.
С помощью <Interbase interactive SQL> - <Extract database> -
показывает все (кодировка win1253).
КАК ЭТО ВЫЛЕЧИТЬ ?
Вы правы, ошибку выдаёт BDE (TStoredProc). В связи с этим приношу извинения форуму. Но раз уж топик окрыт может знающие люди помогут.
Delphi 6 на компе уже давно и альяс тоже. Я просто пытаюсь адаптировать прогу под Delphi 6.
Я сейчас подправил значение соответсвующего поля RDB$CHARACTER_SET_ID в таблице RDB$FIELDS и тело прлцедур отображает в SQL Explorer. Но ошибку в проге продолжает выдавать.
Delphi 6 на компе уже давно и альяс тоже. Я просто пытаюсь адаптировать прогу под Delphi 6.
Я сейчас подправил значение соответсвующего поля RDB$CHARACTER_SET_ID в таблице RDB$FIELDS и тело прлцедур отображает в SQL Explorer. Но ошибку в проге продолжает выдавать.
в какой момент?Но ошибку в проге продолжает выдавать.
ну молодец. колупнул базу, не думая. теперь я уже не верю, что все это работало под D3.Я сейчас подправил значение соответсвующего поля RDB$CHARACTER_SET_ID в таблице RDB$FIELDS
см. www.ibase.ru/devinfo/ibrusfaq.htm , на тему национальных символов в текстах процедур и триггеров. В любом случае, к tstoredproc это не имеет никакого отношения.
В общем, так. для ПРИЛОЖЕНИЯ все это значения никакого не имеет. Если алиас настроен правильно, то оно как работало с БД, так и должно.
Для базы то же самое - если ее не меняли, ей пофигу какие там приложения и алиасы снаружи.
В общем, выясни сначала, где ты там чего наковырял, а потом разбирайся, почему перестало работать.
Подправил я не "их", а только значение поля одной записи.
UPDATE RDB$FIELDS
SET RDB$CHARACTER_SET_ID = 54
WHERE RDB$FIELD_NAME='RDB$SOURCE'
После этого, как говорил, стало показывать нормально.
Насчёт SQL Explorer - его глюкавость меня и самого достала.
Пойду пользовать IBExpert.
БД не моя. Я просто помогаю в адаптации.
Ошибка выскакивает здесь:
{-----DBTables-------}
procedure TStoredProc.BindParams;
...
Check(DbiQSetProcParams(StmtHandle, High(FParamDescs)+1,
PSPParamDesc(FParamDescs), FRecordBuffer));
Пока так и не понял, в чём причина
UPDATE RDB$FIELDS
SET RDB$CHARACTER_SET_ID = 54
WHERE RDB$FIELD_NAME='RDB$SOURCE'
После этого, как говорил, стало показывать нормально.
Насчёт SQL Explorer - его глюкавость меня и самого достала.
Пойду пользовать IBExpert.
БД не моя. Я просто помогаю в адаптации.
Ошибка выскакивает здесь:
{-----DBTables-------}
procedure TStoredProc.BindParams;
...
Check(DbiQSetProcParams(StmtHandle, High(FParamDescs)+1,
PSPParamDesc(FParamDescs), FRecordBuffer));
Пока так и не понял, в чём причина
это муть какая то... ты б хоть выбрал запросом сначала, что меняешь.UPDATE RDB$FIELDS
SET RDB$CHARACTER_SET_ID = 54
WHERE RDB$FIELD_NAME='RDB$SOURCE'
select r.RDB$procedure_NAME, r.RDB$PARAMETER_NAME, f.RDB$FIELD_NAME,
f.RDB$CHARACTER_SET_ID, f.RDB$COLLATION_ID
from rdb$fields f, rdb$procedure_parameters r
where f.RDB$FIELD_NAME = r.RDB$FIELD_SOURCE and
r.RDB$procedure_NAME not starting with 'RDB$' and f.RDB$FIELD_TYPE in (14,37,40)
Я, конечно, не мастер INTERBASEa, но мне хватило 2 минуты, чтобы посмотреть системные таблицы и увидеть, что в БД всего 6 процедур, определены пользователем, что текст процедур хранится в таблице RDB$PROCEDURES поле RDB$PROCEDURE_SOURCE, что это поле определено как "RDB$SOURCE" в RDB$RELATION_FIELDS и имеет кодировку UNICODE_FSS – значение 3 (таблица RDB$FIELDS поле RDB$CHARACTER_SET_ID). Соответственно меняя 3 на 54, получаю WIN1253 для всех процедур (мемо поля, в котором хранится тело процедур) БД.
нету у нас обсуждений Delphi.
удалю топик чуть позже...
вообще то, с разделителем / - формат mm/dd/yyyy. так принято. и ориентация на жесткий строковый исходный формат может принести много веселых минут после установки приложения, на котором формат даты не такой.StrToDate('21/12/2005')
хвалиться тут абсолютно нечем, потому что данная операция некорректна, и может привести к проблемам с backup/restore. К тому, что я сказал в этом топике, мне добавить нечего.Я, конечно, не мастер INTERBASEa, но мне хватило 2 минуты, чтобы посмотреть системные таблицы и увидеть, что в БД всего 6 процедур, определены пользователем, что текст процедур хранится в таблице RDB$PROCEDURES поле RDB$PROCEDURE_SOURCE, что это поле определено как "RDB$SOURCE" в RDB$RELATION_FIELDS и имеет кодировку UNICODE_FSS – значение 3 (таблица RDB$FIELDS поле RDB$CHARACTER_SET_ID). Соответственно меняя 3 на 54, получаю WIN1253 для всех процедур (мемо поля, в котором хранится тело процедур) БД.
удалю топик чуть позже...