Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Delphi6 DB2 [D6, DB2]


Anisa ©   (2004-07-01 09:26:00) 

Просветите, кто знает. SQLQuery примерно такого типа
UPDATE AAA SET
P1=:par1
WHERE p2=:par2 and p3=:par3. Так вот, когда в условиях числовые параметры, то работает, а со строками не отрабатывается.


Anisa   (2004-07-01 10:29:00) [1]

ОГРОМНОЕ ВСЕМ СПАСИБО ЗА ПОМОЩЬ
действительно, ...UPPER(Pensioner.Family)=:Family


Johnmen   (2004-07-01 10:10:00) [2]

Пиши
SQLQuery7.ParamByName('Family').AsString:=AnsiUpperCase(PENS.fields[3].AsString);
Смотри, как выглядит реальный запрос.
Фамилии в табл. не в верхнем регистре.
...UPPER(Pensioner.Family)=:Family


Курдль   (2004-07-01 10:08:00) [3]

А если попробовать завершать строку #0?


Anisa   (2004-07-01 10:03:00) [4]

По поводу: value и asstring - уже пробовали, ему все равно не помагает.
С asfloat работает, и если asinteger, тоже все хорошо
при добавлении string проблема-то.
Эту же программулю делали на С# в VS.NET, там передача параметров идет как CHAR() и все в порядке, в Delphi уже измучились


Курдль   (2004-07-01 10:02:00) [5]

Мне кажется, что вариантные модификаторы " .value" использовать следует, только когда нет другого выхода.
Кстати, и конструкцию varisnull(PENS.fields[8].value)можно заменить на PENS.fields[8].IsNullа еще лучше - на PENS.FieldByName('field_name').IsNull


Курдль   (2004-07-01 09:58:00) [6]

А если уточнить:
SQLQuery7.ParamByName('Family').value
SQLQuery7.ParamByName('Family').AsString


Johnmen   (2004-07-01 09:58:00) [7]

Похоже дело в SQLQuery7.ParamByName('Insnumber').Asfloat
Почему номер по сути определяется, как с плавающей точкой по содержимому ???


Anisa   (2004-07-01 09:53:00) [8]

Like тоже не работает. Текст SQL следующий:

update Pensioner set
Policser=:ps, Policnum=:pn,
Address=:a, Addresbirth=:ab
where Pensioner.Insnumber=:Insnumber and Pensioner.Family=:Family
//здесь Insnumber - float, Family-string
// в таблице PENS типы столбцов соответствуют параметрам запроса
Кусок кода:
  while not PENS.Eof do
   begin
    SQLQuery7.Close;
    SQLQuery7.ParamByName('ps').Asstring:=PENS.fields[1].value;
    SQLQuery7.ParamByName('pn').Asstring:=PENS.fields[2].value;
    SQLQuery7.ParamByName('Insnumber').Asfloat:=PENS.fields[0].value;
    SQLQuery7.ParamByName('Family').value:=AnsiUpperCase(PENS.fields[3].value);
    if not varisnull(PENS.fields[8].value) then SQLQuery7.ParamByName('a').Asstring:=PENS.fields[8].value
     else SQLQuery7.ParamByName('a').Asstring := '';
    if not varisnull(PENS.fields[13].value) then SQLQuery7.ParamByName('ab').Asstring:=PENS.fields[13].value
     else SQLQuery7.ParamByName('ab').Asstring := '';
    i := SQLQuery7.ExecSQL();
    cc := SQLQuery7.RowsAffected;
В результате i=cc=0


Johnmen   (2004-07-01 09:43:00) [9]

>что еще надо?

Привести конкретный кусок кода с необходимыми пояснениями...


Курдль   (2004-07-01 09:42:00) [10]

like


Anisa   (2004-07-01 09:40:00) [11]

Одно поле в WHERE имеет float, второе string.
если оставить только float, то запрос отрабатывается.
как только в условие добавляю string, то SQLQuery.ExecSQL возвращает 0.
string по длине одинаковые, верхний регистр. что еще надо?


Наталия   (2004-07-01 09:27:00) [12]

Какую ошибку выдает?
Поля имеют какой тип?


Наверх

Титульная страница Поиск, карта сайта Написать письмо