Текущий архив: 2004.04.11;
Скачать: CL | DM;
Вниз’’ is not a valid integer value Найти похожие ветки
← →
RayRom © (2004-04-03 18:56) [0]Необходима помощь по ошибке или ее устранении.
Использую МуSQL 4.0.17 и библиотеку ZeosDbo 5.3.4, уже год пытаюсь понять ее причину, выскакивает не часто, но метко.MyQuery2.Close;
// Вот здесь происходит ошибка «’’ is not a valid integer value»
MyQuery2.Sql.Clear;
MyQuery2.Sql.Add("select * from texosmotr where nomznak like "" + ZDBGrid1.DataSource.DataSet.FieldByName("nom_znak").AsString + "" and typeamt = " + DM.MyQuery.FieldByName("type_amt").AsString + " and year(texosmotr.date)=year(now());");
MyQuery2.Open;
Запрос получается типа
select * from texosmotr
where nomznak like "Ж6918ДО" and typeamt = 1 and year(texosmotr.date)=year(now());
Структура таблицы:
Поле Тип Ноль По умолчанию
nkard int(9) Нет
date date Нет 0000-00-00
nomznak varchar(8) Да NULL
vkub smallint(5) Нет 0
yearpay tinyint(1) Нет 0
typeamt tinyint(1) Нет 0
nalog float(8,2) Нет 0.00
tosp float(5,2) Нет 0.00
diag float(5,2) Нет 0.00
comp float(5,2) Нет 0.00
talonto float(5,2) Нет 0.00
summ float(8,2) Нет 0.00
lgots char(1) Нет N
typelg tinyint(1) Нет 0
50pr char(1) Нет N
LUD varchar(30) Да NULL
talon int(11) Нет 0
Использую для редактирования компоненты:
DBCtrlGrid1: TDBCtrlGrid;
DBText2: TDBText;
DBText3: TDBText;
DBCheckBox1: TDBCheckBox;
DBCheckBox2: TDBCheckBox;
DBEdit2: TDBEdit;
DBText1: TDBText;
DBComboBox1: TDBComboBox;
DBEdit1: TDBEdit;
DBComboBox3: TDBComboBox;
DBComboBox4: TDBComboBox;
DBComboBox5: TDBComboBox;
DBText4: TDBText;
DBText5: TDBText;
RxDBComboBox1: TRxDBComboBox;
DBEdit3: TDBEdit;
RxDBComboBox2: TRxDBComboBox;
Надеюсь что полную информацию дал.
Мастера кто что может сказать по этому поводу?!!!
← →
RayRom © (2004-04-03 18:56) [0]Необходима помощь по ошибке или ее устранении.
Использую МуSQL 4.0.17 и библиотеку ZeosDbo 5.3.4, уже год пытаюсь понять ее причину, выскакивает не часто, но метко.MyQuery2.Close;
// Вот здесь происходит ошибка «’’ is not a valid integer value»
MyQuery2.Sql.Clear;
MyQuery2.Sql.Add("select * from texosmotr where nomznak like "" + ZDBGrid1.DataSource.DataSet.FieldByName("nom_znak").AsString + "" and typeamt = " + DM.MyQuery.FieldByName("type_amt").AsString + " and year(texosmotr.date)=year(now());");
MyQuery2.Open;
Запрос получается типа
select * from texosmotr
where nomznak like "Ж6918ДО" and typeamt = 1 and year(texosmotr.date)=year(now());
Структура таблицы:
Поле Тип Ноль По умолчанию
nkard int(9) Нет
date date Нет 0000-00-00
nomznak varchar(8) Да NULL
vkub smallint(5) Нет 0
yearpay tinyint(1) Нет 0
typeamt tinyint(1) Нет 0
nalog float(8,2) Нет 0.00
tosp float(5,2) Нет 0.00
diag float(5,2) Нет 0.00
comp float(5,2) Нет 0.00
talonto float(5,2) Нет 0.00
summ float(8,2) Нет 0.00
lgots char(1) Нет N
typelg tinyint(1) Нет 0
50pr char(1) Нет N
LUD varchar(30) Да NULL
talon int(11) Нет 0
Использую для редактирования компоненты:
DBCtrlGrid1: TDBCtrlGrid;
DBText2: TDBText;
DBText3: TDBText;
DBCheckBox1: TDBCheckBox;
DBCheckBox2: TDBCheckBox;
DBEdit2: TDBEdit;
DBText1: TDBText;
DBComboBox1: TDBComboBox;
DBEdit1: TDBEdit;
DBComboBox3: TDBComboBox;
DBComboBox4: TDBComboBox;
DBComboBox5: TDBComboBox;
DBText4: TDBText;
DBText5: TDBText;
RxDBComboBox1: TRxDBComboBox;
DBEdit3: TDBEdit;
RxDBComboBox2: TRxDBComboBox;
Надеюсь что полную информацию дал.
Мастера кто что может сказать по этому поводу?!!!
← →
Zacho © (2004-04-03 19:31) [1]Не использую ни MySQL, ни Zeos, но могу дать пару советов:
1. Используй параметризированный запрос вместо динамической генерации запроса.
2. typeamt точно не может быть NULL ?
← →
Zacho © (2004-04-03 19:31) [1]Не использую ни MySQL, ни Zeos, но могу дать пару советов:
1. Используй параметризированный запрос вместо динамической генерации запроса.
2. typeamt точно не может быть NULL ?
← →
RayRom © (2004-04-03 20:02) [2]
> 2. typeamt точно не может быть NULL ?
Нулем он ни когда не бывает только от 1 до 6
← →
RayRom © (2004-04-03 20:02) [2]
> 2. typeamt точно не может быть NULL ?
Нулем он ни когда не бывает только от 1 до 6
← →
DevMaster © (2004-04-03 22:19) [3]showmessage(MyQuery2.Sql.Strings[0]); посмотри результат на эране может запрос не верный(где-то кавычку потерял?)
>DM.MyQuery.FieldByName("type_amt").AsString - это тот же Query?
← →
DevMaster © (2004-04-03 22:19) [3]showmessage(MyQuery2.Sql.Strings[0]); посмотри результат на эране может запрос не верный(где-то кавычку потерял?)
>DM.MyQuery.FieldByName("type_amt").AsString - это тот же Query?
← →
Nikolay M. © (2004-04-04 12:31) [4]
> "select * from texosmotr where nomznak like "
Должна быть одинарная.
← →
Nikolay M. © (2004-04-04 12:31) [4]
> "select * from texosmotr where nomznak like "
Должна быть одинарная.
← →
sniknik © (2004-04-04 12:47) [5]’’ is not a valid integer value
явно же говорит "" невалидное целочисленное значение. значит временами (хотя и говориш невозможно) проходит туда пустое значение. проверяй какждое значение перед заданием в запрос для уверености.
> like "Ж6918ДО"
лутше, если возможно на = переделать, а то индекс не используется
> year(texosmotr.date)=year(now())
вообще из запроса выкинуть, и то и то значение внутрь передается ну и обрабатывай с клиента, не сходится - запрос не нужен.
> ну и все естественно на параметры переделать
Nikolay M. © (04.04.04 12:31) [4]
>> "select * from texosmotr where nomznak like "
> Должна быть одинарная.
точно? аксес к примеру и так и так понимает, MySQL возможно тоже а то и только ".
← →
sniknik © (2004-04-04 12:47) [5]’’ is not a valid integer value
явно же говорит "" невалидное целочисленное значение. значит временами (хотя и говориш невозможно) проходит туда пустое значение. проверяй какждое значение перед заданием в запрос для уверености.
> like "Ж6918ДО"
лутше, если возможно на = переделать, а то индекс не используется
> year(texosmotr.date)=year(now())
вообще из запроса выкинуть, и то и то значение внутрь передается ну и обрабатывай с клиента, не сходится - запрос не нужен.
> ну и все естественно на параметры переделать
Nikolay M. © (04.04.04 12:31) [4]
>> "select * from texosmotr where nomznak like "
> Должна быть одинарная.
точно? аксес к примеру и так и так понимает, MySQL возможно тоже а то и только ".
← →
RayRom © (2004-04-04 18:58) [6]
> > year(texosmotr.date)=year(now())
> вообще из запроса выкинуть, и то и то значение внутрь передается
> ну и обрабатывай с клиента, не сходится - запрос не нужен.
к сождалению у меня накопительная система и данные по ентому клиету за предыдущий год не должны быть видны, это основное и главное, но данные за предыдущие года должны быть.
Да кстати когда делаю запуск с отладкой то возникает исключение EConvertError в модуле DB.
Кстати по поводу одинарной или двойной кавічки то в МуСКЛ єто безразницы, в отличии от Аксеса!!!!
← →
RayRom © (2004-04-04 18:58) [6]
> > year(texosmotr.date)=year(now())
> вообще из запроса выкинуть, и то и то значение внутрь передается
> ну и обрабатывай с клиента, не сходится - запрос не нужен.
к сождалению у меня накопительная система и данные по ентому клиету за предыдущий год не должны быть видны, это основное и главное, но данные за предыдущие года должны быть.
Да кстати когда делаю запуск с отладкой то возникает исключение EConvertError в модуле DB.
Кстати по поводу одинарной или двойной кавічки то в МуСКЛ єто безразницы, в отличии от Аксеса!!!!
← →
sniknik © (2004-04-04 19:15) [7]> к сождалению у меня накопительная система и данные по ентому клиету за предыдущий год не должны быть видны, это основное и главное, но
> данные за предыдущие года должны быть.
какая разница? если texosmotr.date ты передаеш изне, из своей программы и текущую(now()) тоже узнать не проблема, и в запросе везде между условиями and стоит, т.е. если бы ты туда сразу результат сравнений передал trye/false было бы тоже самое, и при false запрос ничего не вернет, ну вот это то и лишнее, в этом случае запрос вообще не нужен (все одно пустой будет) только лишняя обработка.
> Да кстати когда делаю запуск с отладкой то возникает исключение EConvertError в модуле DB
ну твои же данные конвертит, неужели посмотреть нельзя что он пытается сконвертить, до ошибки.
> Кстати по поводу одинарной или двойной кавічки то в МуСКЛ єто безразницы, в отличии от Аксеса!!!!
если ты так все по своему понимаеш, то думаю дальнейшие обьяснения бессмысленны. (значит и другое "перевернул")
вроде ясно сказал "аксес к примеру и так и так понимает"
т.е. select "1"1"1", "2"2"2"
вполне нормальный для аксесса запрос.
← →
sniknik © (2004-04-04 19:15) [7]> к сождалению у меня накопительная система и данные по ентому клиету за предыдущий год не должны быть видны, это основное и главное, но
> данные за предыдущие года должны быть.
какая разница? если texosmotr.date ты передаеш изне, из своей программы и текущую(now()) тоже узнать не проблема, и в запросе везде между условиями and стоит, т.е. если бы ты туда сразу результат сравнений передал trye/false было бы тоже самое, и при false запрос ничего не вернет, ну вот это то и лишнее, в этом случае запрос вообще не нужен (все одно пустой будет) только лишняя обработка.
> Да кстати когда делаю запуск с отладкой то возникает исключение EConvertError в модуле DB
ну твои же данные конвертит, неужели посмотреть нельзя что он пытается сконвертить, до ошибки.
> Кстати по поводу одинарной или двойной кавічки то в МуСКЛ єто безразницы, в отличии от Аксеса!!!!
если ты так все по своему понимаеш, то думаю дальнейшие обьяснения бессмысленны. (значит и другое "перевернул")
вроде ясно сказал "аксес к примеру и так и так понимает"
т.е. select "1"1"1", "2"2"2"
вполне нормальный для аксесса запрос.
← →
RayRom © (2004-04-04 19:24) [8]Так короче для sniknik если чел проходил техосмотр в прошлом году то в ентом году он дожен пройти по новойо, а ошибка ета возникает тогда когда чел неколько дней н6азад пришол получил простыню для прохождения техосмотра то зачем по новой поля заполнят лучше новую карточку распечатать по тем же данным что раньше были введены, а тут длин ошибка возникает!!!
← →
RayRom © (2004-04-04 19:24) [8]Так короче для sniknik если чел проходил техосмотр в прошлом году то в ентом году он дожен пройти по новойо, а ошибка ета возникает тогда когда чел неколько дней н6азад пришол получил простыню для прохождения техосмотра то зачем по новой поля заполнят лучше новую карточку распечатать по тем же данным что раньше были введены, а тут длин ошибка возникает!!!
← →
sniknik © (2004-04-04 23:33) [9]ладно давай по другому, сделай так и ошибки не будет, и плюс скорость при наличии индексов соответствующих возрастет
MyQuery2.Close;
MyQuery2.Sql.Clear;
MyQuery2.Sql.Add("select * from texosmotr where "+
"typeamt = :typeamt and "+
"texosmotr.date >= :txDate and "+
"nomznak = :nomznak"););
MyQuery2.ParamByName("typeamt").AsInteger:= DM.MyQuery.FieldByName("type_amt").AsInteger;
MyQuery2.ParamByName("txDate").AsDateTime:= StartOfTheYear(now());
MyQuery2.ParamByName("nomznak").AsString:= ZDBGrid1.DataSource.DataSet.FieldByName("nom_znak").AsString;
MyQuery2.Open;
так надеюсь понятнее чем про преобразованиях в запросе толковать.
← →
sniknik © (2004-04-04 23:33) [9]ладно давай по другому, сделай так и ошибки не будет, и плюс скорость при наличии индексов соответствующих возрастет
MyQuery2.Close;
MyQuery2.Sql.Clear;
MyQuery2.Sql.Add("select * from texosmotr where "+
"typeamt = :typeamt and "+
"texosmotr.date >= :txDate and "+
"nomznak = :nomznak"););
MyQuery2.ParamByName("typeamt").AsInteger:= DM.MyQuery.FieldByName("type_amt").AsInteger;
MyQuery2.ParamByName("txDate").AsDateTime:= StartOfTheYear(now());
MyQuery2.ParamByName("nomznak").AsString:= ZDBGrid1.DataSource.DataSet.FieldByName("nom_znak").AsString;
MyQuery2.Open;
так надеюсь понятнее чем про преобразованиях в запросе толковать.
← →
RayRom © (2004-04-10 18:19) [10]Спасибо всем кто откликнулся, особенно sniknik .
Нашол ошибку отключая по очереди компоненты ввода.
Она оказалась в DBCheckBox2: TDBCheckBox;
Не правильно указал значения на Истину и Лож в поле базы.
Да кстати sniknik твой вариант мне не очень пождходит особенно с датой, дело втом что один вид транспорта проходит раз в 2 года техосмотр а другой каждый год.
И представь если на компе клиента год другой будет стоять и что тогда, по этому я и использую дату сервера.
← →
RayRom © (2004-04-10 18:19) [10]Спасибо всем кто откликнулся, особенно sniknik .
Нашол ошибку отключая по очереди компоненты ввода.
Она оказалась в DBCheckBox2: TDBCheckBox;
Не правильно указал значения на Истину и Лож в поле базы.
Да кстати sniknik твой вариант мне не очень пождходит особенно с датой, дело втом что один вид транспорта проходит раз в 2 года техосмотр а другой каждый год.
И представь если на компе клиента год другой будет стоять и что тогда, по этому я и использую дату сервера.
← →
sniknik © (2004-04-10 23:16) [11]даже если нужна дата сервера, то всеравно лутше использовать такой принцип (> < = between) с датой, а не результат функции year(texosmotr.date)=year(now() вот здесь. иначе индекс не используется. (как узнать начало года в функциях MySql я к сожалению не знаю поэтому и привел пример с параметром, хотя видел что у тебя now(), ну у тебя есть дока - посмотри)
← →
sniknik © (2004-04-10 23:16) [11]даже если нужна дата сервера, то всеравно лутше использовать такой принцип (> < = between) с датой, а не результат функции year(texosmotr.date)=year(now() вот здесь. иначе индекс не используется. (как узнать начало года в функциях MySql я к сожалению не знаю поэтому и привел пример с параметром, хотя видел что у тебя now(), ну у тебя есть дока - посмотри)
Страницы: 1 вся ветка
Текущий архив: 2004.04.11;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.04 c