![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Какую ошибку выдает?
Поля имеют какой тип?