Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

’’ is not a valid integer value   Найти похожие ветки 

 
RayRom ©   (2004-04-03 18:56) [0]

Необходима помощь по ошибке или ее устранении.
Использую МуSQL 4.0.17 и библиотеку ZeosDbo 5.3.4, уже год пытаюсь понять ее причину, выскакивает не часто, но метко.

MyQuery2.Close;
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;
// Вот здесь происходит ошибка «’’ is not a valid integer value»

Запрос получается типа
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;
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;
// Вот здесь происходит ошибка «’’ is not a valid integer value»

Запрос получается типа
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.033 c
3-1081831042
_новый_
2004-04-13 08:37
2004.05.09
Как записать в BLOB поле файл?


3-1081506421
stelius
2004-04-09 14:27
2004.05.09
DBGrid и Ctrl+Del


1-1082647882
NovaPS
2004-04-22 19:31
2004.05.09
Подстановка строки вместо переменной или объекта, как?


1-1082454727
webpauk
2004-04-20 13:52
2004.05.09
Центровка надписи


8-1076481355
Evgeniy_K
2004-02-11 09:35
2004.05.09
Экранная лупа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский