Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.06.2007, 06:39
vlad19 vlad19 вне форума
Прохожий
 
Регистрация: 03.06.2007
Сообщения: 20
Репутация: 10
По умолчанию Изменение записи в таблице.

Существует база данных, при создании новой записи часто приходиться не указывать дату окончания действия договора, так как она не известна, соответственно одно поле остается пустым. Когда дата становиться известна нужно внести изменение в запись, но она не хочет меняться, видимо не может подставить дату на пустое поле. Как можно обойти это?. P.S. Когда все данные есть изменяется запись легко, запрос праильно написал.
Ответить с цитированием
  #2  
Старый 04.06.2007, 08:33
Аватар для merdashka
merdashka merdashka вне форума
Новичок
 
Регистрация: 03.04.2007
Адрес: Ашгабат
Сообщения: 77
Репутация: 10
По умолчанию

Нав чем база? И код запроса напиши?
Ответить с цитированием
  #3  
Старый 04.06.2007, 09:02
vlad19 vlad19 вне форума
Прохожий
 
Регистрация: 03.06.2007
Сообщения: 20
Репутация: 10
По умолчанию

На 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  
Старый 04.06.2007, 10:16
Аватар для merdashka
merdashka merdashka вне форума
Новичок
 
Регистрация: 03.04.2007
Адрес: Ашгабат
Сообщения: 77
Репутация: 10
По умолчанию У меня от твоего кода голова закружилась

Есть предположение, что может запрос просто не может найти именно ту запись которая тебе нужна. Просмотри хорошенько условие
Ответить с цитированием
  #5  
Старый 04.06.2007, 14:40
vlad19 vlad19 вне форума
Прохожий
 
Регистрация: 03.06.2007
Сообщения: 20
Репутация: 10
По умолчанию

Да эт еще маленький запрос, я и больше писал. Все написано правильно, когда дата есть, меняется без проблем, а вот когда пусто не хочет менять.
Ответить с цитированием
  #6  
Старый 04.06.2007, 15:01
Аватар для merdashka
merdashka merdashka вне форума
Новичок
 
Регистрация: 03.04.2007
Адрес: Ашгабат
Сообщения: 77
Репутация: 10
По умолчанию Да я удивляюсь не объему

Понимаешь у тя условие искать по всем полям, вот когда поле заполненное запрос его находит.А когда поле пустое ты его как находишь? (Where dat_ok = :d14 , когда нужно найти пустое поле, чему D14 равно).Вообще посмотри какую выдает ошибку? Быть не может, чтобы запрос не мог изменить пустое поле. Думай ищи.
Ответить с цитированием
  #7  
Старый 04.06.2007, 15:27
vlad19 vlad19 вне форума
Прохожий
 
Регистрация: 03.06.2007
Сообщения: 20
Репутация: 10
По умолчанию

Ну с чего бы по всем полям то? задана конкретное поле, че новое записать и че было. Не выдает ни какой ошибки, в том то и дело. Просто тупо не изменяет данные.
Ответить с цитированием
  #8  
Старый 04.06.2007, 19:26
Simbar Simbar вне форума
Прохожий
 
Регистрация: 15.07.2006
Сообщения: 24
Репутация: 10
По умолчанию

В общем узнай что такое ключевые поля для таблицы и создай такое поле. Оно тебе и скорость работы добавит при правильных построения запроса.
Так как у тебя поле пустое, то field = null не одно и тоже что и field is Null. Поэтому я думаю запрос не срабатывает.
Замени на проверку is null или вообще исключи его из условия where.
Ответить с цитированием
  #9  
Старый 04.06.2007, 19:36
vlad19 vlad19 вне форума
Прохожий
 
Регистрация: 03.06.2007
Сообщения: 20
Репутация: 10
По умолчанию

Simbar, ну и как его исключить? Запись то менять нужно и при известной дате. Тут, я думаю, проблема в том что поле задано как data, с string то проблем нет. Можно применить post, но табличка то локальная, будут косяки.
Ответить с цитированием
  #10  
Старый 04.07.2007, 13:03
_Asph _Asph вне форума
Прохожий
 
Регистрация: 25.05.2007
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от vlad19
Simbar, ну и как его исключить?
У тебя по стольким полям идет проверка... И без него надо полагать не особенно ошибешься
Поэтому просто для пробы - убери его из условия.

Simbar советовал следующее. Заведи поле, (например ID), значение которого будет уникально для каждой записи. И именно по этому полю ищи запись. Скорость работы (и правильность) неизмеримо возрастут.
И уже по этому полю делай update.
Ответить с цитированием
  #11  
Старый 05.07.2007, 09:46
vlad19 vlad19 вне форума
Прохожий
 
Регистрация: 03.06.2007
Сообщения: 20
Репутация: 10
По умолчанию

А я как делаю? id и так есть по нему и меняю запись. Решил проблему, коряво правда но решил.
Ответить с цитированием
  #12  
Старый 05.07.2007, 10:17
_Asph _Asph вне форума
Прохожий
 
Регистрация: 25.05.2007
Сообщения: 5
Репутация: 10
По умолчанию

Зачем тогда?
Цитата:
Сообщение от vlad19
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

Если достаточно
where id:=selID

selID - id выбранной записи
Ответить с цитированием
  #13  
Старый 11.07.2007, 07:05
vlad19 vlad19 вне форума
Прохожий
 
Регистрация: 03.06.2007
Сообщения: 20
Репутация: 10
По умолчанию

Привык я так писать, вижу сразу что на что меняю, да и потом нужно же тип переменной указывать, а то ошибешься в коде и потом полчаса ловишь ошибку.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:52.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter