Comments
Submitted by: @pavel-zotov
Run this on 2.5, 3.x and 4.x:
set sqlda_display on;
set term ^;
execute block returns(o_rel_id int) as
begin
execute statement (‘select iif(1 <= ?, ?, null) from rdb$database’) (2, 3) into o_rel_id;
suspend;
end
^
set term ;^
Output:
1) on 2.5:
INPUT SQLDA version: 1 sqln: 10 sqld: 0
OUTPUT SQLDA version: 1 sqln: 20 sqld: 1
01: sqltype: 497 LONG Nullable sqlscale: 0 sqlsubtype: 0 sqllen: 4
: name: (8)O_REL_ID alias: (8)O_REL_ID
: table: (0) owner: (0)
============
Statement failed, SQLSTATE = HY004
Dynamic SQL Error
-SQL error code = -804
-Data type unknown
-At block line: 3, col: 5
2) on 3.x and 4.x:
INPUT message field count: 0
OUTPUT message field count: 1
01: sqltype: 496 LONG Nullable scale: 0 subtype: 0 len: 4
: name: O_REL_ID alias: O_REL_ID
: table: owner:
============
Statement failed, SQLSTATE = 22018
conversion error from string » «
-At block line: 3, col: 5
One need to know in advance that NULL w/o CAST() is considered as CHAR(1), but i could not find this in the $FB_HOME/doc/* and in https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/nullguide/firebird-null-guide.html
Phrase: conversion error from string » » — definitely looks weird (there is no any text variables / parameters in this example).
Perhaps, it will be better to change this message back to 2.5.x ?
Commented by: @mrotteveel
«One need to know in advance that NULL w/o CAST() is considered as CHAR(1)», why do you think that is the case? As far as I know it shouldn’t have any type in this situation. It looks to me like the behaviour in 2.5 is correct (where it cannot infer the datatype), and the behavior in 3.0 and 4.0 is wrong.
Instead, it looks to me that maybe the datatype is inferred as SQL_NULL, which shouldn’t be usable in this context, which is then coerced to a string which is then not convertible to an integer.
Commented by: @pavel-zotov
> why do you think that is the case? // char(1)
Because when i explicitly cast NULL to required datatype (int) then all works fine:
set term ^;
execute block returns(o_rel_id int) as
begin
execute statement (‘select iif(1 <= ?, ?, cast(null as int) ) from rdb$database’) (2, 3) into o_rel_id;
suspend;
end
^
INPUT message field count: 0
OUTPUT message field count: 1
01: sqltype: 496 LONG Nullable scale: 0 subtype: 0 len: 4
: name: O_REL_ID alias: O_REL_ID
: table: owner:
============
3
PS.
Maybe subject of this ticket is also confusing as null cast/missed cast…
Once again:
1) execute statement (‘select iif(1 <= ?, ?, null) from rdb$database’) (2, 3) into o_rel_id; ==> Statement failed, SQLSTATE = 22018 / conversion error from string » «
2) execute statement (‘select iif(1 <= ?, ?, cast(null as int) ) from rdb$database’) (2, 3) into o_rel_id; ==> all OK.
Here we can see nothing about cast parameters («?»); rather it’s about cast NULL literal
Commented by: @mrotteveel
As I said in my previous comment, it looks like the second parameter is inferred as type SQL_NULL, which isn’t usable in this context. When the parameter is then assigned, it gets the value ‘not null’ instead of 3, that is then coerced to a string which is then not convertible to an integer. The behaviour of 2.5 should probably be retained in this case, or at least SQL_NULL should not be allowed in this context.
I have confirmed this by preparing the statement select iif(1 <= ?, ?, cast(null as int) ) from rdb$database using Jaybird, and checking the type of the second parameter, which is 32767, or a (nullable) SQL_NULL.
Commented by: @mrotteveel
The reason the cast works, is that changes the inference of the parameter to SQL_LONG instead of SQL_NULL (just as would have been if you used iif(1 <= ?, cast(? as int), null)), that is because in an expression like iif(…, ?, VAL), the type of the parameter is inferred from the type of VAL, and if VAL is NULL, then it can only infer SQL_NULL (where in 2.5 it couldn’t derive a datatype, so it produced a datatype unknown error), unless you explicitly cast that null to an explicit type.
Repeating my check in Jaybird, the type of the second parameter is (nullable) SQL_LONG in both
select iif(1 <= ?, ?, cast(null as int)) from rdb$database
and
select iif(1 <= ?, cast(? as int), null) from rdb$database
1 participant
0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 39 |
|
1 |
|
20.01.2010, 10:43. Показов 21360. Ответов 17
Доброго времени суток всем!!! Недавно столкнулся с проблемой conversion error from string «» в InterBase, программу установил в 2007 году, работала нормально. Начиная с 01 января 2010 года перестало стабильно работать, то есть при работе с IBConsole результаты не сохраняются и выводится ошибка conversion error from string «», иногда ошибка выводится с номером ошибки в ковычках, но в большинстве случаев без номера ошибки. Пытался исправить, никак не получается. Подскажите в чем проблема и что надо делать??? Изображения
__________________
0 |
213 / 107 / 15 Регистрация: 28.01.2009 Сообщений: 481 |
|
20.01.2010, 12:49 |
2 |
0 |
0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 39 |
|
20.01.2010, 13:05 [ТС] |
3 |
Ex_Soft, Да, тоже самое. А это не связано с сертификатом?
0 |
1263 / 706 / 62 Регистрация: 21.12.2009 Сообщений: 2,255 |
|
20.01.2010, 14:05 |
4 |
В 9 случаях из 10 где-то формируется строка, длина которой больше длины поля набора данных
0 |
0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 39 |
|
20.01.2010, 15:10 [ТС] |
5 |
SAMZ, Как изменить поле таблицы, в таблице это поле varchar(6). Добавлено через 14 минут Точно, нашел это поле, в таблице это поле varchar(6). Хотелось бы изменить ее на большее. Если не трудно опиши пошаговую работу (SQL query или что-то похожее на нее). Thank’s
0 |
1263 / 706 / 62 Регистрация: 21.12.2009 Сообщений: 2,255 |
|
20.01.2010, 15:53 |
6 |
Найди в БД домен, которым описывается это поле. Если есть IBExpert, то это не проблема Код update RDB$FIELDS set RDB$FIELD_LENGTH = новая длина, RDB$CHARACTER_LENGTH = новая длина where RDB$FIELD_NAME = 'ЗДЕСЬ ИМЯ ДОМЕНА' новая длина — это новая длина поля
0 |
0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 39 |
|
20.01.2010, 20:49 [ТС] |
7 |
SAMZ, Установлено IBConsole, процедуру создания новой длины или выполнения запроса можно осуществить в IBConsole?
0 |
Ex_Soft 213 / 107 / 15 Регистрация: 28.01.2009 Сообщений: 481 |
||||
21.01.2010, 01:04 |
8 |
|||
Код update RDB$FIELDS set RDB$FIELD_LENGTH = новая длина, RDB$CHARACTER_LENGTH = новая длина where RDB$FIELD_NAME = 'ЗДЕСЬ ИМЯ ДОМЕНА' /me думает: по кому-то плачет канделябр…
А если домен:
0 |
1263 / 706 / 62 Регистрация: 21.12.2009 Сообщений: 2,255 |
|
21.01.2010, 06:13 |
9 |
Установлено IBConsole, процедуру создания новой длины или выполнения запроса можно осуществить в IBConsole? IBConsole уже сто лет не использую. Скачай IBExpert c IBase.ru, очень хороший инструмент. С замечанием Ex_Soft согласен, канделябра заслужил.
0 |
Супер-модератор 8781 / 2532 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
21.01.2010, 09:28 |
10 |
SAMZ, ну я бы таких дифирамбов IBExpert тоже не пел, потому что у меня он глючит причем даже не в работе с базой, а в самом интерфейсе, постоянно сыпет эксепшены… либо версия кривая, либо у меня руки, кто его знает…
0 |
1263 / 706 / 62 Регистрация: 21.12.2009 Сообщений: 2,255 |
|
21.01.2010, 10:20 |
11 |
ну я бы таких дифирамбов IBExpert тоже не пел, потому что у меня он глючит причем даже не в работе с базой, а в самом интерфейсе, постоянно сыпет эксепшены… либо версия кривая, либо у меня руки, кто его знает… На IB/FB работаю приблизительно с 1996 года и очень давно, много лет, использую IBExpert. С проблемами не сталкивался
0 |
213 / 107 / 15 Регистрация: 28.01.2009 Сообщений: 481 |
|
21.01.2010, 10:26 |
12 |
ну я бы таких дифирамбов IBExpert тоже не пел, потому что у меня он глючит причем даже не в работе с базой, а в самом интерфейсе, постоянно сыпет эксепшены… либо версия кривая, либо у меня руки, кто его знает… /me думает: странно: всю Одессу удовлетворяет, одного Вас — нЭт. Лучшего GUI инструмента под IB/FB/Yaffil — нЭт. А по поводу глюков — сообщите Александру (news://ibexpert.info/interbase.ibexpert.ru)
0 |
dozent 0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 39 |
||||
21.01.2010, 11:54 [ТС] |
13 |
|||
Ex_Soft, На запрос
выводит такой error Миниатюры
0 |
Супер-модератор 8781 / 2532 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
21.01.2010, 12:22 |
14 |
Ex_Soft,
/me думает: странно: всю Одессу удовлетворяет, одного Вас — нЭт. Лучшего GUI инструмента под IB/FB/Yaffil — нЭт. а меня как-то раздражают окошки с неперехваченными исключениями, и, тем более, я ничего не сказал про работу с базами, у меня притензии именно программным ошибкам…
0 |
Ex_Soft 213 / 107 / 15 Регистрация: 28.01.2009 Сообщений: 481 |
||||
21.01.2010, 13:00 |
15 |
|||
такой error
Все сухо… FB 2.1 WI-V6.3.3.18185 Дорогая редакция, что я делаю не так? Дайте DDL таблицы и версию сервера.
а меня как-то раздражают окошки с неперехваченными исключениями … у меня притензии именно программным ошибкам… 1. Версия IBExpert’а
А по поводу глюков — сообщите Александру (news://ibexpert.info/interbase.ibexpert.ru)
0 |
0 / 0 / 0 Регистрация: 26.05.2009 Сообщений: 39 |
|
21.01.2010, 13:37 [ТС] |
16 |
Ex_Soft,
Все сухо… FB 2.1 WI-V6.3.3.18185 Дорогая редакция, что я делаю не так? Дайте DDL таблицы и версию сервера. Версия сервера Intebase 7.0 Изменить таблицу, то есть поле никак не получается…
0 |
Супер-модератор 8781 / 2532 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
21.01.2010, 14:01 |
17 |
Ex_Soft, Version 2004 03 16
0 |
213 / 107 / 15 Регистрация: 28.01.2009 Сообщений: 481 |
|
21.01.2010, 15:41 |
18 |
выводит такой error БлЫн!!! Нечего printscreen’ы вставлять. Не шоб просто самому руками продублировать. Ну там же написано:
Column REQUEST_CODE from table PAYMENT_REQUEST is referenced in DESBURSEGMENT_INSERT DESBURSEGMENT_INSERT — это тригер? Попробуйте грохнуть его, alter’нуть таблицу и переподписать.
2004 03 16 IBExpert
1 |
Модераторы: kdv, dimitr
-
DastiX
- Сообщения: 1
- Зарегистрирован: 27 янв 2010, 03:47
conversion error from string » «
Доброго времени суток)
Совсем недавно начал изучение Firebird, по этому если что не так — не судите строго.
Собственно сабж.
Есть firebird 2.0 WI-V2.0.1.12855, работает на VMware 6.5, WinXP 32bit.
Через IBExpert созданы три таблицы: одна главная и две подчиненные.
К примеру главная ФИРМЫ и подчиненные ЛЮДИ и ТЕХНИКА.
Хочу соответственно, что бы одной строке в главной соответствовало несколько строк в подчиненной.
Т.е. в главной таблице ФИРМЫ есть поле ЛЮДИ, и поле ТЕХНИКА типа INTEGER;
Бегаем по фирмам -> отображаются только те люди и техника, которые относятся к этой фирме.
Так вот. Создаю в главной таблице два уникальных поля типа INTEGER, пытаюсь ввести данные — все ок.
В каждой подчиненной по одному полю для внешнего ключа.
Назначаю внешний ключ в таблице ЛЮДИ — все ок. Ввожу данные в поле ЛЮДИ в таблице ФИРМЫ — ок,
в IBExpert можно посмотреть через MasterDetail что определенной фирме соответствует определенный список людей.
И тут самое интересное, назначаю внешний ключ в таблице ТЕХНИКА, все прокатывает.
Но как только пытаюсь ввести данные в главной таблице, в поле ТЕХНИКА появляется ошибка
<<Overflow occurred durig data type conversion
conversion error from string » »
[00543BBF]>> хотя ввожу число.
Дальше интереснее. Удаляю из таблицы ТЕХНИКА внешний ключ(индекс) — ок.
Пытаюсь удалить ограничение на уникальность поля ТЕХНИКА в таблице ФИРМЫ, создается тразакция, все ок, нажимаю Commit,
и получаю deadlock. Хотя вроде все закрыто….
Пробую еще раз и получаю сообщение
<<This operation is not defined for system tables.
unsuccessful metadata update.
object INDEX is in use.
Changes will be rolled back…>>
После этого IBExpert зависает при закрытии, а при принудительном завершении соответственно отчет об ошибке.
Переоткрываю и удалю ограничение на уникальность…
В может быть тут дело не пойму. Откуда эта ошибка неизвестно…
Сколько уже написал, надеюсь кто-нибудь прочитает…заранее спасибо за ответы….
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Re: conversion error from string » «
Сообщение
kdv » 27 янв 2010, 18:20
conversation — это общение. conversion — конверсия, конвертация. Исправил.
По сути — либо сообщение не то из-за неправильного firebird.msg (результат установки разных версий IB/ФБ на одном компе), либо действительно раньше было char/varchar, а потом поменяли на integer, или наоборот.
Если второе, то это обычно следствие модификации структуры таблиц, наполненных данными. Причем не просто модификации, а из IBExpert.
Рекомендую извлечь скрипт БД, создать из него базу по новой, причем обновить ФБ, а то 2.0.1 как то не очень, и перелить данные из старой покоцанной БД в новую.
|
|
|
информация о разделе
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных — обсуждаем в разделе «Базы данных: общие вопросы». Убедительная просьба — соблюдать «Правила форума» и не пренебрегать «Правильным оформлением своих тем». Прежде, чем создавать тему, имеет смысл заглянуть в раздел «Базы данных: FAQ», возможно там уже есть ответ. |
conversion error from string
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Senior Member Рейтинг (т): 59 |
Всем привет, БД IB 1.5 делаю следующий запрос delete from spool where id = ‘{2EE94DD7-7AB4-4424-87A5-3FE2A61C7702}’
и выдает ошибку |
SilverShield |
|
Full Member Рейтинг (т): 11 |
IB 1.5 |
Bas |
|
Цитата Nahel @ 04.08.06, 05:37 conversion error from string Тут явно идет конвертация из строки во чтото другое. |
Nahel |
|
Senior Member Рейтинг (т): 59 |
Раньше id был интегер сечас CHAR(40) |
Bas |
|
А связи есть? |
Romkin |
|
Проверить Foreign keys, triggers и тд |
Nahel |
|
Senior Member Рейтинг (т): 59 |
дело было в следующем в табдице были записи соответственно ID был числовым, после смены ID на CHAR(40) видимо записи коректно не конвертировались, стоило их подпраить ручками и все зафунцикляло. |
jack128 |
|
Цитата Nahel @ 04.08.06, 05:37 БД IB 1.5
класс. Где ты такой раритер достал??? С Абрамса скомуниздил? |
Sanbyter |
|
Всем привет. У меня примерно такая же ситуация, при записи в БД данных вылетает ошибка: |
Bas |
|
Что записываем? |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Базы данных: SQL
- Следующая тема
[ Script execution time: 0,0288 ] [ 15 queries used ] [ Generated: 9.02.23, 09:18 GMT ]
Словил ошибку на строке Session[guid + «data»] = dbCXD.getSqlTable(query,null);
conversion error from string «А»
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.
Сведения об исключении: FirebirdSql.Data.Common.IscException: conversion error from string «А»
Ошибка источника:
{ //строка 66
if (Request.QueryString["guid"] != null) //строка 67
guid = Request.QueryString["guid"].ToString(); //строка 68
else guid = Guid.NewGuid().ToString(); } //строка 69
.....
query = query.Replace("#PERIOD#", cb_period.Value.ToString().PadLeft(2, '0')); //строка 369
Session[guid + "data"] = dbCXD.getSqlTable(query,null); //строка 370
} //строка 371
Исходный файл: c:inetpubYaKITv4.1.MSHControlsCMconstructor.ascx.cs Строка: 371
Трассировка стека:
[IscException: conversion error from string «А»]*
FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.ProcessResponse(IResponse response) +70
FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.ReadResponse() +60
FirebirdSql.Data.Client.Managed.Version12.GdsStatement.Execute() +240
FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteCommand(CommandBehavior behavior, Boolean returnsSet) +293
FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteReader(CommandBehavior behavior) +49[FbException (0x1400000e): conversion error from string «А»]
FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteReader(CommandBehavior
behavior) +205
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset,
DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String
srcTable, IDbCommand command, CommandBehavior behavior) +214
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32
startRecord, Int32 maxRecords, String srcTable, IDbCommand command,
CommandBehavior behavior) +180
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String
srcTable) +123 YaKIT.C1.DataBase.FireBird.getSqlTable(String query)
+447 YaKIT.C1.DataBase.DBConnect.getSqlTable(String query, List`1 lstParams) +499[Exception: YaKIT.C1.Database => getSqlTable :: select t1.*, t2.ORD as
ULUS_CUSTOM_ORD from (select distinct f.nomer,f.namemest,f.okpo,
f.oktmo,f.ulus, f.st, f.gr, f.zn from frm_data2019_0 f,
s_okpo2019_period12 o, frm_form2019 t where f.okpo=o.okpo and
t.kod=f.st and t.gr_st=2) t1 inner join S_ULUS t2 on t1.ULUS = t2.ULUSconversion error from string «А»]
YaKIT.C1.DataBase.DBConnect.catchThrow(String message, Exception ex)
+206 YaKIT.C1.DataBase.DBConnect.getSqlTable(String query, List`1 lstParams) +1031 CM_constructor.setSprData() in
c:inetpubYaKITv4.1.MSHControlsCMconstructor.ascx.cs:371
CM_constructor.Page_Load(Object sender, EventArgs e) in
c:inetpubYaKITv4.1.MSHControlsCMconstructor.ascx.cs:87
System.Web.UI.Control.OnLoad(EventArgs e) +108
System.Web.UI.Control.LoadRecursive() +90
System.Web.UI.Control.LoadRecursive() +185
System.Web.UI.Control.LoadRecursive() +185
System.Web.UI.Control.LoadRecursive() +185
System.Web.UI.Control.LoadRecursive() +185
System.Web.UI.Control.LoadRecursive() +185
System.Web.UI.Control.LoadRecursive() +185
System.Web.UI.Control.LoadRecursive() +185
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+1607*
На чтение 6 мин Обновлено 15.01.2023
Sql error code 303 conversion error from string
» title=»>» width=»8″ height=»8″/> Ошибка 303, FireBird
TechnoMag |
|
||
Шустрый Профиль Репутация: нет
CREATE TABLE NEWS_INFO ( |
create or alter procedure INSERT_NEW (
IN_NAME D_NEWS_TITLE,
IN_BUDGET D_PRICE,
IN_URL D_LINK,
IN_CATEGORY D_TAG_NAME,
IN_PLUGIN_NAME D_CITE_NAME,
IN_DESCRIPTION D_NEWS_INFO)
as
declare variable ID_TAG D_ID;
declare variable ID_PLUGIN D_ID;
declare variable ID_NEW_PROJECT D_ID;
begin
select ID FROM cites WHERE NAME=:in_plugin_name
INTO :ID_PlUGIN;
if (NOT exists (SELECT tag_name FROM tags where tag_name=:in_category)) THEN
INSERT INTO TAGs (tag_name) VALUES (:IN_category);
select ID FROM tags WHERE TAG_NAME=:in_category
INTO :ID_TAG;
ID_NEW_PROJECT = GEN_ID(GEN_NEWS_ID, 1);
insert into news (ID, TITLE, PRICE, DATE_NEW, LINK, FAVORITE, ID_CITE_M, TAG)
VALUES (:ID_NEW_PROJECT, :in_name, :in_budget, current_date, :in_url, 0, :ID_PLUGIN, :ID_TAG );
insert into news_info (ID, INFO) VALUES (:ID_NEW_PROJECT, :IN_DESCRIPTION);
POST_EVENT ‘eventNewProjectIsAdded’;
end^
Выполнение хранимой процедуры:
Код |
procedure TDataModule1.InsertNewProject(Name, Budget, Url, Category, Description, PluginName: string); begin pFIBTransactionWrite.Active := true; pFIBStoredProc1.StoredProcName := ‘INSERT_NEW’; pFIBStoredProc1.Params.ParamByName(‘IN_NAME’).AsString := Name; pFIBStoredProc1.Params.ParamByName(‘IN_BUDGET’).AsString := Budget; pFIBStoredProc1.Params.ParamByName(‘IN_URL’).AsString := Url; pFIBStoredProc1.Params.ParamByName(‘IN_CATEGORY’).AsString := Name; pFIBStoredProc1.Params.ParamByName(‘IN_PLUGIN_NAME’).AsString := PluginName; pFIBStoredProc1.Params.ParamByName(‘IN_DESCRIPTION’).AsString := Description; pFIBStoredProc1.Prepare; pFIBStoredProc1.ExecProc; end; |
Код |
Incompatible column/host variable data type. Dynamic SQL error. SQL error code = -303. Arithmetic exception, numeric overflow or string truncation. String right truncation. |
Пару записей вставились, но при последующих попытках была вышестоящая ошибка. Может проблема в длинной строке?
Akella |
|
|||
Творец Профиль Репутация: 29 Добавлено через 34 секунды Добавлено через 2 минуты и 5 секунд
Добавлено через 3 минуты и 18 секунд
или попробуй поставить её до того, как ты начнёшь присваивать значения параметрам |
||||
|
TechnoMag |
|
||
Шустрый Профиль Репутация: нет |
|||
|
Профиль
Группа: Участник
Сообщений: 39
Регистрация: 8.11.2007
Репутация: нет
Всего: 2
Incompatible column/host variable data type. — Вы явно пытаетесь вставить несовместимый тип данных в столбец другого типа! Например, float в int.
Этот ответ добавлен с нового Винграда — http://vingrad.com
Game-lot |
|
||
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
1. Базы данных (Paradox, Oracle и т.п.)
2. Способа доступа (ADO, BDE и т.д.)
- Литературу по Дельфи обсуждаем здесь
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи
- Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.
Правила форума «Delphi: Базы данных и репортинг» |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
[ Время генерации скрипта: 0.1056 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Источник
PHP PDO: SQLSTATE[HY000]: General error: -303 Dynamic SQL Error SQL error code = -303 conversion error from string
I’m connecting to a Firebird 1.5 Database with PHP5.5’s PDO library with the following code
the $kod is a string, and the firebird column KOD is a VARCHAR(15)
if i write anysort of string inside the $kod variable, it gives me this error:
when the variable is empty, or its an integer it works.
I have no idea why it is doing this.
EDIT:
EDIT2: i installed FBscanner on a windows server and watched what kind of SQl was sent to the server and i found out that the SQL was different!
and this is a different SQL entirely! This in from this function:
and i read that some drivers need closing params, that’s why i put the closeCursor there but it still doesn’t work!
Share solution ↓
Additional Information:
Didn’t find the answer?
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Similar questions
Find the answer in similar questions on our website.
Write quick answer
Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.
About the technologies asked in this question
PHP (from the English Hypertext Preprocessor — hypertext preprocessor) is a scripting programming language for developing web applications. Supported by most hosting providers, it is one of the most popular tools for creating dynamic websites. The PHP scripting language has gained wide popularity due to its processing speed, simplicity, cross-platform, functionality and distribution of source codes under its own license.
https://www.php.net/
Welcome to programmierfrage.com
programmierfrage.com is a question and answer site for professional web developers, programming enthusiasts and website builders. Site created and operated by the community. Together with you, we create a free library of detailed answers to any question on programming, web development, website creation and website administration.
Get answers to specific questions
Ask about the real problem you are facing. Describe in detail what you are doing and what you want to achieve.
Help Others Solve Their Issues
Our goal is to create a strong community in which everyone will support each other. If you find a question and know the answer to it, help others with your knowledge.
Источник
Читайте также: Error in assertion processing
Adblock
detector
Never
Команда клуба
|
Пишу процедуру на вставку данных в таблицу. Несколько параметров имеют тип VARCHAR(20). При запуске процедуры пишет «pr»-это проверочная строка, которая явно меньше 20… |
||
не умеете летать- не мучайте метлу! |
Oldy
Команда клуба
|
Never, а можно увидеть метаданные, таблицы и SP? |
||
С уважением, Oldy. |
Oldy
Команда клуба
|
Never, поскольку метеданные засекречены, |
||
С уважением, Oldy. |
Never
Команда клуба
|
Oldy, пока не знаю, сейчас погляжу |
||
не умеете летать- не мучайте метлу! |
Never
Команда клуба
|
Поля таблицы. Кодировка у всего стоит win1251, кроме первых двух полей остальные могут быть пустыми. CREATE PROCEDURE PRICE_ADD ( Проверяю процедуру- запускаю на выполнение в списке параметров ввожу для ключевых полей строки “pr” и “pr”. В окне сообщений выходит то же сообщение, о котором я говорила выше. |
||
не умеете летать- не мучайте метлу! |
Oldy
Команда клуба
|
Never, при следующих метаданных ошибки нет. CREATE TABLE PRICE ) CREATE PROCEDURE PRICE_ADD ) смотрите, что не так. |
||
С уважением, Oldy. |
Never
Команда клуба
|
Ачто- в FB не допускается составной первичный ключ? |
||
не умеете летать- не мучайте метлу! |
Oldy
Команда клуба
|
Never, вполне допустим, только метаданыые будут выглядеть немного по другому: CREATE TABLE PRICE ( |
||
С уважением, Oldy. |
Oldy
Команда клуба
|
Never, и в этом случае ошибки «overflow occurred during data type conversion error from syring ‘pr’.» нет. |
||
С уважением, Oldy. |
Never
Команда клуба
|
Oldy, но таблица же уже создана, она есть. Я же в данній момент создаю процедуру на вставку данніх в уже готовую таблицу. |
||
не умеете летать- не мучайте метлу! |
Oldy
Команда клуба
|
Never, …таблица же уже создана… метаданные похожи на те что у меня? (вы же мне их не показываете |
||
С уважением, Oldy. |
Never
Команда клуба
|
Хм. Сейчас не проверю- я на работе, а база дома. |
||
не умеете летать- не мучайте метлу! |
Oldy
Команда клуба
|
Never’чка, ну не надо ругаться |
||
С уважением, Oldy. |
Never
Команда клуба
|
Oldy, спасибо, сделаю |
||
не умеете летать- не мучайте метлу! |
Never
Команда клуба
|
SET NAMES WIN1251; CREATE TABLE PRICE ) ALTER TABLE PRICE ADD CONSTRAINT PK_PRICE PRIMARY KEY )KOD_DETALI, MAKER:; Это то, что есть по таблице если смотреть скрипт. Overflow occurred during data type conversion. До второго commit дело не доходит вообще. |
||
не умеете летать- не мучайте метлу! |
Anonymous
Гость |
Never, воспроизвести ошибку так и не удалось. Извращался как угодно: |
||
|
Oldy
Команда клуба
|
Гость не гость а Oldy |
||
С уважением, Oldy. |
Never
Команда клуба
|
После восстановления ругается: Чего я там не так сделала? |
||
не умеете летать- не мучайте метлу! |
Oldy
Команда клуба
|
А в окне File name что-то надо ставить? ПутьИмя backup файла (*.gbk | *.fbk) из которого надо восстановить базу. |
||
С уважением, Oldy. |
Never
Команда клуба
|
ставила. Пришет то же самое requires both input and output file names. |
||
не умеете летать- не мучайте метлу! |
Oldy
Команда клуба
|
|
||
С уважением, Oldy. |
← →
ShuraGrp
(2002-07-25 12:56)
[0]
Уважаемые Мастера! Помогите разобрать. Есть ХР, в которой собственно и есть insert select. Почему ошибка не пойму.
Как видно из текстов ошибок ругается на дату.
Ошибки получены в дебагере EMS QuickDesk. Сама процедура из D6 не ругается, но возвращает Null.
Если убрать из select условие по дата, то все работает.
Может кто подскажет. Буду очень признателен.
CREATE PROCEDURE MAKEDEBET (
DOC_DATE DATE,
SCL INTEGER,
PROD INTEGER)
RETURNS (
SUMDEBET NUMERIC (15, 2))
AS
declare variable u integer;
declare variable us varchar(30);
declare variable d varchar(30);
begin
u = gen_id(GEN_ENTTMP, 1);
insert into EntTemp (User_id, prod_id, ent_id, prod_cena, ent_col)
select :u, e.prod_id, e.ent_id, e.prod_cena, e.ent_col
from entries e
where e.ent1_id = 0
and e.scl_id = :Scl
and e.prod_id = :Prod
and e.doc_date <= :DOC_DATE;
incompatible column/host variable data type.
Dynamic SQL error.
SQL error code = -303.
Conversion error from string «»2002-07-22″».
Пробовал так:
begin
d = :DOC_DATE;
us = gen_id(GEN_ENTTMP, 1);
insert into EntTemp (User_id, prod_id, ent_id, prod_cena, ent_col)
select cast(:us as integer), e.prod_id, e.ent_id, e.prod_cena, e.ent_col
from entries e
where e.ent1_id = 0
and e.scl_id = :Scl
and e.prod_id = :Prod
and e.doc_date <= cast(:d as date);
An error was found in application program input parameters for the sql statment.
Dynamic SQL error.
SQL error code = -804.
Data type unknown.
← →
Alexandr
(2002-07-25 13:07)
[1]
это глюк дебаггера.
Ведь дебаггера нету.
А то, что есть это эмуляция со своими ограничениями и ошибками.
← →
ShuraGrp
(2002-07-25 13:56)
[2]
Ну допустим глюк. Но Null то почему, данные то есть в таблице.
← →
Alexandr
(2002-07-25 14:06)
[3]
ты бы хоть текст процедуры полностью привел…
а то ведь даже не видно чего там в SUMDEBET попасть должно…
← →
ShuraGrp
(2002-07-25 14:33)
[4]
CREATE PROCEDURE MAKEDEBET (
DOC_DATE DATE,
SCL INTEGER,
PROD INTEGER,
COL NUMERIC (15, 5),
NL_ID INTEGER,
DL_ID INTEGER,
DOC_ID INTEGER,
R INTEGER)
RETURNS (
SUMDEBET NUMERIC (15, 2))
AS
declare variable i integer;
declare variable u integer;
declare variable us varchar(30);
declare variable d varchar(30);
declare variable Prod_id integer;
declare variable Ent_id integer;
declare variable Prod_Cena NUMERIC(15, 2);
declare variable b CHAR(1);
declare variable Ent_Col NUMERIC(15, 5);
declare variable Ent_Col_Sum NUMERIC(15, 5);
declare variable Curr_Col NUMERIC(15, 5);
begin
/*Dat = cast(Dat as Date);*/
/*
← →
ShuraGrp
(2002-07-25 14:34)
[5]
Извиняюсь кодировка подвела, но помоему текст прозрачен
← →
Desdechado
(2002-07-25 18:22)
[6]
1. ругается не на дату, а на несовместимость типов данных.
2. я бы сделал так
for select prod_id, ent_id, prod_cena, ent_col
from entries
where ent1_id = 0 and scl_id = :Scl and prod_id = :Prod and doc_date <= :DOC_DATE
into :prd, :ent, :cena, :col
do
insert into EntTemp (User_id, prod_id, ent_id, prod_cena, ent_col) values (:u, :prd, :ent, :cena, :col );
← →
ShuraGrp
(2002-07-26 10:08)
[7]
2Desdechado © (25.07.02 18:22)
А на сколько эта конструкция будет работать медленнее на больших объемах
← →
Desdechado
(2002-07-26 10:26)
[8]
тестов не проводил, но рассуждая логически — одинаково. и там, и там строится курсор, содержимое которого запихиваются в таблицу. в твоем варианте в курсор попадает еще постоянное поле из параметра — это дополнительная нагрузка на сервер. в моем варианте идет запись в переменные — тоже нагрузка.
при желании всегда можно проверить
← →
ShuraGrp
(2002-07-26 10:41)
[9]
Кажется я нашел косяк, но все равно не пойму почему:
Такая конструкция возвращает нормальные значения
select e.prod_id, e.ent_id, e.prod_cena, e.ent_col
from entries e
where e.ent1_id = 0
and e.scl_id = :Scl
and e.prod_id = :Prod
and e.doc_date <= :DOC_DATE
into :prod_id, :ent_id, :prod_cena, :ent_col
а такая все Null
for select e.prod_id, e.ent_id, e.prod_cena, e.ent_col
from entries e
where e.ent1_id = 0
and e.scl_id = :Scl
and e.prod_id = :Prod
and e.doc_date <= :DOC_DATE
into :prod_id, :ent_id, :prod_cena, :ent_col
do insert into EntTemp (User_id, prod_id, ent_id, prod_cena, ent_col)
values (:u, :prod_id, :ent_id, :prod_cena, :ent_col);
И вполне естественно ругань на Null, тк поля not Null
← →
Desdechado
(2002-07-26 11:13)
[10]
гы! так ты хочешь все-в-одном
ты либо делай выборку с возвращением данных (1), либо заполнение таблицы из другой выборки, которая не возвращается (2). это ж совершенно разные вещи!
← →
ShuraGrp
(2002-07-26 12:59)
[11]
Я сделал как посоветовали Desdechado © (25.07.02 18:22)
А в чем разные? И все-таки хотелось бы понять с конструкцией insert select?
На чтение 3 мин. Просмотров 24 Опубликовано 15.12.2019
В настоящее время я работаю над проектом, который позволяет импортировать данные из файла Excel. Я использую программу RazorSQL. Но каждый раз, когда я начинаю импорт,
Код ошибки ISC 335544334 ->
Использует ли Firebird некоторые специальные форматы даты? Мне действительно нужен ответ, это очень важно. Эта проблема заставляет меня ждать, чтобы продолжить работу.
sql import excel firebird razorsql
1 ответ
1 Решение Mark Rotteveel [2018-08-16 16:09:00]
Сообщение об ошибке указывает, что Firebird попытался преобразовать значение строки 2002-07-07 22:00:00.000 в тип данных, отличный от CHAR / VARCHAR и не удалось, потому что строковое значение недействительно для целевого типа данных. Формат, как показано, будет правильно преобразован в TIMESTAMP , а это значит, что вы назначаете это либо неправильному столбцу, либо столбец имеет неправильный тип. Например, DATE не имеет компонента времени на диалекте 3, поэтому преобразование строки с компонентом времени завершится неудачей с этой ошибкой, так же как и преобразование в числовой столбец ( INTEGER , BIGINT и т.д.).
Без дополнительной информации о соответствующих столбцах и точном способе импорта невозможно предоставить более конкретный ответ.
I am currently working on a project which allows you to import data from an Excel file. I use the Programm RazorSQL. But every time I start the import, the
ISC error code 335544334 occures ->
Does Firebird use some special Date formats? I really need an answer, it’s very important. This problem keeps me waiting to continue with my work.
1 Answer 1
The error message indicates that Firebird tried to convert the string value 2002-07-07 22:00:00.000 to a datatype other than CHAR / VARCHAR and did not succeed because the string value is invalid for the target datatype. The format as shown will correctly convert to a TIMESTAMP , which means that you are assigning this either to the wrong column, or the column has the wrong type. For example, a DATE has no time component in dialect 3, so converting a string with a time component will fail with this error, as will converting to a numerical column ( INTEGER , BIGINT , etc).
Without more information about the columns involved and the exact method of import, it is not possible to provide a more specific answer.
Сейчас я работаю над проектом, который позволяет импортировать данные из файла Excel. Я использую Programm RazorSQL. Но каждый раз, когда я начинаю импорт, в
ISC код ошибки 335544334 встречается, ->
Используют ли Firebird некоторых специальных форматов даты? Я действительно нужен ответ, это очень важно. Эта проблема заставляет меня ждать, чтобы продолжить свою работу .
Сообщение об ошибке указывает на то, что Firebird пытался преобразовать строковое значение 2002-07-07 22:00:00.000 в тип данных, кроме CHAR / VARCHAR и не увенчались успехом , поскольку значение строки является недействительным для целевого типа данных. Формат , как показано правильно преобразовать к TIMESTAMP , что означает , что вы назначаете это либо к неправильному столбца, или столбец имеет неправильный тип. Например, DATE не имеет времени компонент в диалекте 3, так что преобразование строки с временным компонентом потерпит неудачу с этой ошибкой, как будет преобразовывать в числовой колонке ( INTEGER , BIGINT и т.д.).
Без дополнительной информации о столбцах, участвующих и точный метод импорта, это не представляется возможным дать более конкретный ответ.