Translate error value out of bounds

Модераторы: kdv, CyberMax

Модераторы: kdv, CyberMax

McSSN

Сообщения: 8
Зарегистрирован: 30 мар 2005, 12:38

‘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).

КАК ЭТО ВЫЛЕЧИТЬ ?


kdv

Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение

kdv » 26 май 2005, 10:48

ошибку — ‘Translate Error. Value out of bounds.’

по-моему у сервера такой ошибки нет. ибо он ничего не переводит.

КАК ЭТО ВЫЛЕЧИТЬ ?

кодировка алиаса БДЕ тоже должна быть win1253. Скорее всего просто настройки алиаса BDE при установке D6 убились.


McSSN

Сообщения: 8
Зарегистрирован: 30 мар 2005, 12:38

Сообщение

McSSN » 26 май 2005, 12:10

Вы правы, ошибку выдаёт BDE (TStoredProc). В связи с этим приношу извинения форуму. Но раз уж топик окрыт может знающие люди помогут.

Delphi 6 на компе уже давно и альяс тоже. Я просто пытаюсь адаптировать прогу под Delphi 6.

Я сейчас подправил значение соответсвующего поля RDB$CHARACTER_SET_ID в таблице RDB$FIELDS и тело прлцедур отображает в SQL Explorer. Но ошибку в проге продолжает выдавать.


kdv

Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение

kdv » 26 май 2005, 12:33

Но ошибку в проге продолжает выдавать.

в какой момент?

Я сейчас подправил значение соответсвующего поля RDB$CHARACTER_SET_ID в таблице RDB$FIELDS

ну молодец. колупнул базу, не думая. теперь я уже не верю, что все это работало под D3.

см. www.ibase.ru/devinfo/ibrusfaq.htm , на тему национальных символов в текстах процедур и триггеров. В любом случае, к tstoredproc это не имеет никакого отношения.

В общем, так. для ПРИЛОЖЕНИЯ все это значения никакого не имеет. Если алиас настроен правильно, то оно как работало с БД, так и должно.
Для базы то же самое — если ее не меняли, ей пофигу какие там приложения и алиасы снаружи.

В общем, выясни сначала, где ты там чего наковырял, а потом разбирайся, почему перестало работать.


McSSN

Сообщения: 8
Зарегистрирован: 30 мар 2005, 12:38

Сообщение

McSSN » 26 май 2005, 13:45

Ошибку выдаёт здесь: StoredProc.ExecProc.

Насчёт «не думая» — слишком. Если ничего не пробовать — ничего не выйдет. Потом, backup я взял.
Пойду читать ссылку. Спасибо за внимание.


kdv

Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение

kdv » 26 май 2005, 14:42

Насчёт «не думая» — слишком.

ну так если ты их «подправил», то значит ты как то умудрился создать или модифицировать процедуру в соединении БЕЗ нужного чарсета, не так ли?

И кстати, редактировать БД надо не в SQL Explorer, а в IBExpert. Тогда не будет таких проблем.


McSSN

Сообщения: 8
Зарегистрирован: 30 мар 2005, 12:38

Сообщение

McSSN » 26 май 2005, 15:44

Подправил я не «их», а только значение поля одной записи.
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));

Пока так и не понял, в чём причина


kdv

Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение

kdv » 26 май 2005, 16:13

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)


McSSN

Сообщения: 8
Зарегистрирован: 30 мар 2005, 12:38

Сообщение

McSSN » 27 май 2005, 11:08

Я, конечно, не мастер 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 для всех процедур (мемо поля, в котором хранится тело процедур) БД.


McSSN

Сообщения: 8
Зарегистрирован: 30 мар 2005, 12:38

Сообщение

McSSN » 27 май 2005, 11:09

И потом, пробуя это, было интересно, что получится. А вообще, чувствую, тему пора закрывать, поскольку решение проблемы – в Delphi. Просьба к модератору перенести топик в форум Delphi :D .
Спасибо.


McSSN

Сообщения: 8
Зарегистрирован: 30 мар 2005, 12:38

Сообщение

McSSN » 27 май 2005, 11:13

Ошибка была в неправильной передаче значений параметроа типа TDateTime в TStoredProc.
Было ParamByName(‘MyDate’).AsDate := StrToDate(’21/12/2005′)
Надо ParamByName(‘MyDate’).AsDateTime := StrToDate(’21/12/2005′)

До встречи


kdv

Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение

kdv » 27 май 2005, 11:33

нету у нас обсуждений Delphi.

StrToDate(’21/12/2005′)

вообще то, с разделителем / — формат mm/dd/yyyy. так принято. и ориентация на жесткий строковый исходный формат может принести много веселых минут после установки приложения, на котором формат даты не такой.

Я, конечно, не мастер 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 для всех процедур (мемо поля, в котором хранится тело процедур) БД.

хвалиться тут абсолютно нечем, потому что данная операция некорректна, и может привести к проблемам с backup/restore. К тому, что я сказал в этом топике, мне добавить нечего.

удалю топик чуть позже…


McSSN

Сообщения: 8
Зарегистрирован: 30 мар 2005, 12:38

Сообщение

McSSN » 27 май 2005, 11:46

StrToDate(’21/12/2005′) — это я написал для примера.
На самом деле значение берётся из компонента, положенного на форму. Весь фокус именно «AsDateTime».
Когда я понял, что проблема в Delphi — вопро уже был задан.
Так что извиняйте. А вообще спасибо, что не отфутболили сразу.


INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Contact US

Thanks. We have received your request and will respond promptly.

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!

  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It’s Free!

*Tek-Tips’s functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Translate error: Value out of bounds

Translate error: Value out of bounds

(OP)

17 May 05 09:42

Hi,

I’ve been trying to read records from an omnis database (from raining data) into delphi for editing and inserting into an access database. The problem that I’ve run into is that as soon as I try to retrieve the value of a date type field, the program stops with the error «Translate error: Value out of bounds»

From what I understand delphi has its own take on what the date field is like. For instance delphi might interpret 12/30/2000 as day:12 month:30 year:2000 which would be impossible (out of bounds). What I can’t seem to figure out is how to make a workaround to the problem for instance reading the data in a raw form so I can specify it as a string and string-format my way through it myself.

for specifics:
— empty field is either «null» or «0/0/0» (not sure about that)
— omnis date notation is d-m-yyyy (day and month without a leading 0)

Thanks in advance,
Rob Pouwelse

Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

Join Tek-Tips® Today!

Join your peers on the Internet’s largest technical computer professional community.
It’s easy to join and it’s free.

Here’s Why Members Love Tek-Tips Forums:

  • Tek-Tips ForumsTalk To Other Members
  • Notification Of Responses To Questions
  • Favorite Forums One Click Access
  • Keyword Search Of All Posts, And More…

Register now while it’s still free!

Already a member? Close this window and log in.

Join Us             Close

 
koks
 
(2003-12-15 11:25)
[0]

Уважаемые мастера — подскажите. Вот

SQL-запрос (компанент TQuery).

SELECT MS.ID AS MASID, MS.DATA AS ADATE, MS.COMMENTS AS COMMENTS, SUM(MD.KHT) AS PSTONES, SUM(MD.MSK) AS PWEIGHT,

SUM(MD.SYMMA) AS PPRICE, SUM(MD.MSKS) AS RWEIGHT,

SUM(MD.SYMMAS) AS RPRICE

FROM MDATA MD, MASSIVES MS

WHERE (MD.MASID = MS.ID)

GROUP BY MS.ID, MS.DATA, MS.COMMENTS

ORDER BY MS.ID

Все работает хорошо до тех пор пока он возвращает хоть оду запись. Если его применить к пустым таблицам — возникает указанная ошибка — подскажите в чем секрет…

Заранее спасибо.


 
Плохиш_
 
(2003-12-15 11:34)
[1]

>koks (15.12.03 11:25)

Ты пытаешься использовать данные из пустого набора данных

Ошибка в 17й строке


 
Sandman25
 
(2003-12-15 11:34)
[2]

Есть обращения к Fields[…] или FieldByName(…)?


 
koks
 
(2003-12-15 12:25)
[3]

Про 17-ю строку не понял…

Переношу Copy-Paste данный запрос в SQL-explorer — запускаю там — то же самое… (в случае пучтых таблиц)

FieldByName() и Fields[] не использую…


 
koks
 
(2003-12-15 14:24)
[4]

нече не понимаю….


 
sniknik
 
(2003-12-15 14:49)
[5]

проверь одно дикое предположение

SELECT MS.ID AS
MASID, MS.DATA ….

замени на чтонибудь другое, например на Field1. (???)


 
koks
 
(2003-12-15 16:04)
[6]

SELECT MS.ID AS FIELD1, MS.DATA AS ADATE, MS.COMMENTS AS COMMENTS, SUM(MD.KHT) AS PSTONES, SUM(MD.MSK) AS PWEIGHT,

SUM(MD.SYMMA) AS PPRICE, SUM(MD.MSKS) AS RWEIGHT,

SUM(MD.SYMMAS) AS RPRICE

FROM MDATA MD, MASSIVES MS

WHERE (MD.MASID = MS.ID)

GROUP BY MS.ID, MS.DATA, MS.COMMENTS

ORDER BY MS.ID

То же самое…

Вот что я еще заметил — может это натолкнет на мысль.

1 меня QuantumGrid45 -> DataSource1 -> Query1. (последний — с злополучной строкой).

Если разорвать связь, т.е. сделать DataSource1.DataSet := nil; (время дизайна), то опять же во время дизайна запрос открывается без ошибок.

то же самое если не разрывать связь, но сделать DataSource1.Enable := false; (в дизайне). В рантайме все равно выводит ошибку….

Изменил алгоритм —

DataSource1.Enabled := false;

if Query1.Active then Close;

Query1.Open;

if Query1.RecordCount > 0 then DataSource1.Enabled := true;

опять ошибка — запустил трассировку — при пустом запросе Query1.RecordCout выдает 1 !!!!

Совсем запутался…

Не, ну я вообще-то грешил бы на QG4. Но вот что происходит — если скопировать запрос в SQL Explorer и ВСЕ остальное закрыть, включая среду, программу, даже TotalCommander ;) и запустить запрос — Translate Error…

Ниче не понимаю


 
Sandman25
 
(2003-12-15 16:20)
[7]

[6] koks (15.12.03 16:04)

Такое ощущение, что Вы пытаетесь сделать SUM по текстовому полю.


 
sniknik
 
(2003-12-15 16:36)
[8]

> Ниче не понимаю

аналогично …

я то на основе

> Переношу Copy-Paste данный запрос в SQL-explorer — запускаю там — то же самое… (в случае пучтых таблиц)

решил, что дело в запросе (поле и алиас поля одноименные дают ошибку)

а тут оказывается что

> Если разорвать связь

то работает, а SQL-explorer значится глючит, причем с одноименной ошибкой как и у тебя но когда связь установлена. так?

бред какойто. либо в SQL-explorer-е всетаки запрос отрабатывает а ошибка тогда в 17-й строке.


 
sniknik
 
(2003-12-15 16:39)
[9]

> Не, ну я вообще-то грешил бы на QG4. Но вот что происходит — если скопировать запрос в SQL Explorer и ВСЕ остальное закрыть, включая среду, программу, даже TotalCommander ;) и запустить запрос — Translate Error…

вышли таблички. если данные не секретные конечно. (причем оба варианта дающие полный и пустой запрос, могу конечно сам таблички обнулить но для чистоты эксперимента…)


 
Sandman25
 
(2003-12-15 16:40)
[10]

[8] sniknik © (15.12.03 16:36)

+ либо в SQL Explorer идет работа с другой БД…


 
kaif
 
(2003-12-15 16:47)
[11]

Я думаю, что ошибка вообще с запросом никак не связана. Такая ошибка возникает, когда происходит обращение за пределы индекса списка или массива. Скорее всего у тебя висит какой-нибудь обработчик, который после открытия запроса что-то должен делать, например, обращаться к массиву или TList. Может, к массиву закладок (bookmarks). И образуется индекс, выходящий за пределы длины массива.

Например. такую ошибку вызовет такой код:

var

L: TList;

P: Pointer;

begin

L := TList.Create;

try

P := L[1];

finally

L.Free;

end;

end;

И SQL не нужен.

Запрос здесь вообще не причем. Запрос правильный. Ищи в другом месте. Какие еще процедуры у тебя работают после открытия запроса и как они зависят от кол-ва записей в наборе?


 
kaif
 
(2003-12-15 16:50)
[12]

Более точное сообщение Index out of bounds. У тебя Value out of bounds. Возможно, я неправ.


 
koks
 
(2003-12-16 09:23)
[13]

Друзья, списибо за отклики..

sniknik — высылаю таблички.

kaif — но ведь ошибка выдается в SQL-xplorere когда все закрыто…. База локальная.

В том-то все и дело, когда таблички наполнены — все работает на ура. Поэтому запрос правильный. А как только таблички пусты — ошибка…. а индексы не используются вообще. приведенный Kaif-ом код действительно выдает ошибку, но общую, а не DBEngineError..


 
sniknik
 
(2003-12-16 12:06)
[14]

у меня ошибки нет, что на пустых что на полных.

это если через ADO — Jet, также BDE — ODBC — Microsoft dBase driver, VFP driver (ADO/BDE)

а вот в BDE Standart dBase/Foxpro (и только!!!) действительно возникает, причем зависит от поля MS.DATA в группировке, если убрать его из групировки проходит нормально, также если убрать суммы и/или присоеденение второй таблици. т.е. если нет присоедененной то оно в группе не мешает (если убрать суммы, а они из другой таблици, присоеденения тоже нет).

в общем вот такая вот гремучая смесь BDE + Дата в группе + присоеденение таблици, дает этот глюк.

довольно странно, надо будет еще попробовать на других таблицах (но это вечером), посмотреть что получится.

решить уже можно, сменой драйвера/доступа (ну попробуй например тоже самое и там же, с использованием ODBC алиаса dBASE Files, наверняка ведь есть), если необходимо оставить то что есть то нужно дальше разбиратся.


 
koks
 
(2003-12-17 15:55)
[15]

2 sniknik — огромное спасибо….

Короче понятно шо гремучая смесь. Я вышел из положения так — убрал присоединение и использую lookup-поля (из табл. massives на masid). Все работает….


Понравилась статья? Поделить с друзьями:
  • Translate error please try again later
  • Transforming table error rutoken
  • Transforming table error msi
  • Transformers war for cybertron ошибка physxloader
  • Transformers fall of cybertron ошибка 0xc0000142 windows 10