|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Изменение записи в таблице.
Существует база данных, при создании новой записи часто приходиться не указывать дату окончания действия договора, так как она не известна, соответственно одно поле остается пустым. Когда дата становиться известна нужно внести изменение в запись, но она не хочет меняться, видимо не может подставить дату на пустое поле. Как можно обойти это?. P.S. Когда все данные есть изменяется запись легко, запрос праильно написал.
|
#2
|
||||
|
||||
Нав чем база? И код запроса напиши?
|
#3
|
|||
|
|||
На BDE.
update main set nom = :n, name_dog = :nd, vid = :v, dat_pod = :d, gar = :g , dat_ok = :d1, stor1 = :s1, stor2 =:s2, stor3 =:s3, stoim =:st, val1 =:v1, avans =:av, val2=:v2, typ_d=:t, prim =r where nom = :n4 and name_dog = :nd4 and vid = :v4 and dat_pod = :d4 and gar = :g1 and dat_ok = :d14 and stor1 = :s14 and stor2 =:s24 and stor3 =:s34 and stoim =:st4 and val1 =:v14 and avans =:av4 and val2=:v24 and typ_d=:t4 Form1.edit.Prepare; Form1.edit.Params[0].AsString := Edit1.Text; Form1.edit.Params[1].AsInteger := n; Form1.edit.Params[2].AsString := Edit2.Text; Form1.edit.Params[3].AsDate := DateTimePicker1.Date; Form1.edit.Params[4].AsBoolean := CheckBox1.Checked; Form1.edit.Params[5].AsDate := DateTimePicker2.Date; Form1.edit.Params[6].AsInteger := s1; Form1.edit.Params[7].AsInteger := s2; Form1.edit.Params[8].AsInteger := s3; Form1.edit.Params[9].AsInteger := StrToInt(Edit3.Text); Form1.edit.Params[10].AsInteger := v1; Form1.edit.Params[11].AsInteger := StrToInt(Edit4.Text); Form1.edit.Params[12].AsInteger := v2; Form1.edit.Params[13].AsInteger := t1; Form1.edit.Params[14].AsMemo := Memo1.Text; Form1.edit.Params[15].AsString := Form1.Gridf1.FieldByName('nom').AsString;; Form1.edit.Params[16].AsInteger := Form1.Gridf1.FieldByName('name_dog_1').AsInteger; Form1.edit.Params[17].AsString := Form1.Gridf1.FieldByName('vid').AsString;; Form1.edit.Params[18].AsDate := Form1.Gridf1.FieldByName('dat_pod').AsDateTime; Form1.edit.Params[19].AsBoolean := Form1.Gridf1.FieldByName('gar').AsBoolean; Form1.edit.Params[20].AsDate := Form1.Gridf1.FieldByName('dat_ok').AsDateTime;// вот эта дата пустая. Form1.edit.Params[21].AsInteger := Form1.Gridf1.FieldByName('stor1').AsInteger; Form1.edit.Params[22].AsInteger := Form1.Gridf1.FieldByName('stor2').AsInteger; Form1.edit.Params[23].AsInteger := Form1.Gridf1.FieldByName('stor3').AsInteger; Form1.edit.Params[24].AsInteger := Form1.Gridf1.FieldByName('stoim').AsInteger; Form1.edit.Params[25].AsInteger := Form1.Gridf1.FieldByName('val1').AsInteger; Form1.edit.Params[26].AsInteger := Form1.Gridf1.FieldByName('avans').AsInteger; Form1.edit.Params[27].AsInteger := Form1.Gridf1.FieldByName('val2').AsInteger; Form1.edit.Params[28].AsInteger := Form1.Gridf1.FieldByName('typ_d').AsInteger; Form1.edit.ExecSQL; Последний раз редактировалось vlad19, 04.06.2007 в 09:04. |
#4
|
||||
|
||||
У меня от твоего кода голова закружилась
Есть предположение, что может запрос просто не может найти именно ту запись которая тебе нужна. Просмотри хорошенько условие
|
#5
|
|||
|
|||
Да эт еще маленький запрос, я и больше писал. Все написано правильно, когда дата есть, меняется без проблем, а вот когда пусто не хочет менять.
|
#6
|
||||
|
||||
Да я удивляюсь не объему
Понимаешь у тя условие искать по всем полям, вот когда поле заполненное запрос его находит.А когда поле пустое ты его как находишь? (Where dat_ok = :d14 , когда нужно найти пустое поле, чему D14 равно).Вообще посмотри какую выдает ошибку? Быть не может, чтобы запрос не мог изменить пустое поле. Думай ищи.
|
#7
|
|||
|
|||
Ну с чего бы по всем полям то? задана конкретное поле, че новое записать и че было. Не выдает ни какой ошибки, в том то и дело. Просто тупо не изменяет данные.
|
#8
|
|||
|
|||
В общем узнай что такое ключевые поля для таблицы и создай такое поле. Оно тебе и скорость работы добавит при правильных построения запроса.
Так как у тебя поле пустое, то field = null не одно и тоже что и field is Null. Поэтому я думаю запрос не срабатывает. Замени на проверку is null или вообще исключи его из условия where. |
#9
|
|||
|
|||
Simbar, ну и как его исключить? Запись то менять нужно и при известной дате. Тут, я думаю, проблема в том что поле задано как data, с string то проблем нет. Можно применить post, но табличка то локальная, будут косяки.
|
#10
|
|||
|
|||
Цитата:
Поэтому просто для пробы - убери его из условия. Simbar советовал следующее. Заведи поле, (например ID), значение которого будет уникально для каждой записи. И именно по этому полю ищи запись. Скорость работы (и правильность) неизмеримо возрастут. И уже по этому полю делай update. |
#11
|
|||
|
|||
А я как делаю? id и так есть по нему и меняю запись. Решил проблему, коряво правда но решил.
|
#12
|
|||
|
|||
Зачем тогда?
Цитата:
Если достаточно where id:=selID selID - id выбранной записи |
#13
|
|||
|
|||
Привык я так писать, вижу сразу что на что меняю, да и потом нужно же тип переменной указывать, а то ошибешься в коде и потом полчаса ловишь ошибку.
|