Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Различное поведение НД при вставке и редактировании.   Найти похожие ветки 

 
Sergey__   (2006-12-21 10:28) [0]

Уважаемые мастера, столкнулся со следующей ситуацией. Есть система учета взвешиваний, на каждое взвешивание оформляется  весовая карточка. При создании новой карточки, заполнения необходимых полей и последующем ее сохранении почему-то исчезают значения полей на форме ввода, хотя карточка сохраняется нормально. При вызове на редактирование ранее созданной карточки и последующем сохранении, значения полей на форме ввода остаются. Последовательность действий в обоих случаях одинакова. В чем может быть причина исчезновения значений полей на форме ввода при создании новой карточки ?


 
ЮЮ ©   (2006-12-21 10:33) [1]


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


Например, сделано специально, для ввода многих карточек подряд. Т.е. после сохранения на форме ввода уже вставленная запись.


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


Если код твой - то только в нем :)


 
Sergey__   (2006-12-21 10:44) [2]

2ЮЮ
Код мой. Различие одно - при создании я делаю Insert, а при редактировании Edit. Дальнейшие действия абсолютно идентичны. Пробовал после Insert сделать сразу же Post и Edit, эффект остался неизменным.


 
ЮЮ ©   (2006-12-21 10:53) [3]


> При создании новой карточки, заполнения необходимых полей
> и последующем ее сохранении почему-то исчезают значения
> полей на форме ввода, хотя карточка сохраняется нормально.
>


В какой момент? Форма ввода показавается модально? Тогда она должна вообще закрыться.

Последовательность действий в обоих случаях одинакова.

Чьих действий? Пользователя или программы. У тебя используется тот же код в обоих случаях, или скопирован?

З.Ы. Ты с кодом и Дельфи ошибку найти не можешь, а нас телепатировать заставляешь.


 
Плохиш ©   (2006-12-21 11:02) [4]


> Sergey__   (21.12.06 10:44) [2]
> 2ЮЮ
> Код мой. Различие одно - при создании я делаю Insert

По методу Insert в наборе данных создаётся новая запись с пустыми полями.

PS. Никак люди не поймут, что не может любая кухарка не только управлять государством, но и быть программистом :-(


 
Sergey__   (2006-12-21 11:16) [5]

2ЮЮ


> > В какой момент?


При сохранении.


> Форма ввода показавается модально? Тогда
> > она должна вообще закрыться.


Нет, не модально.

2Плохиш

> По методу Insert в наборе данных создаётся новая запись
> с пустыми полями.
>


Это я знаю. Но после этого поля заполняются необходимыми значениями.


 
ЮЮ ©   (2006-12-21 11:20) [6]

Значит показывай какой код выполняется для вставки, редактирования и сохранения записи. Конкретно твой. И обработчики событий DataSet-а.


 
Плохиш ©   (2006-12-21 11:21) [7]


> Sergey__   (21.12.06 11:16) [5]


> Но после этого поля заполняются необходимыми значениями.

Тогда в чём вопрос?


 
Sergey__   (2006-12-21 11:34) [8]

2Плохиш

> Тогда в чём вопрос?


Вопрос изложен в самом начале :-) Но повторюсь : значения полей на форме ввода исчезают ПОСЛЕ сохранения заполненной записи. При редактировании такого эффекта не наблюдается.

2ЮЮ

Сейчас накопирую...


 
ЮЮ ©   (2006-12-21 11:36) [9]


> Сейчас накопирую...


Полегче там ... :)


 
Sergey__   (2006-12-21 11:46) [10]

2ЮЮ

Создание\редактирование карточки

.
.
.
.
With QGetCard do begin
 Close;
 SQL.Clear;
 SQL.Add("select * from cards");
 If newcard then begin
  SQL.Add("where cardn is NULL");
  Open;
  Insert;
  CardT.Time := Time;
 end else begin
  SQL.Add("where cardn = " + IntToStr(GurCardF.Tag));
  Open;
  Line.KeyValue := FieldByName("LineId").Value;
  Brak.KeyValue := FieldByName("GoodID").Value;
  Reason.KeyValue := FieldByName("MotivId").Value;
  Boss.KeyValue := FieldByName("BossId").Value;
  Box.KeyValue := FieldByName("BoxId").Value;
  CardT.Time := FieldByName("CardT").Value;
  Edit;
 end;
end;
.
.
.


procedure TCardF.QGetCardAfterInsert(DataSet: TDataSet);
var cardn    : integer;
   h,m,s,ms : word;
begin
QGetCard.FieldByName("OperID").Value := oper_cod;
with QGetNcard do begin
 Close;
 Open;
 if Fields[0].Value = Null then cardn := 1
                           else cardn := Fields[0].Value + 1;
 Close;
end;
QGetCard.FieldByName("CardN").Value := cardn;
QGetCard.FieldByName("CardD").Value := Now;
QGetCard.FieldByName("CardT").Value := Time;
QGetCard.FieldByName("Brutto").Value := 0;
QGetCard.FieldByName("Netto").Value := 0;
QGetCard.FieldByName("PaletW").Value := Palett;
with DM.QCalcSmen do begin
 Close;
 DecodeTime(Time,h,m,s,ms);
 ParamByName("cs").Value := h * 3600 + m * 60 + s;
 Open;
 QGetCard.FieldByName("Smena").Value := FieldByName("Number").Value;
 Close;
end;
end;


Сохранение карточки

.
.
.
If not DM.DB.InTransaction then DM.DB.StartTransaction;
try
 With QGetCard do begin
  FieldByName("LineID").Value := Line.KeyValue;
  FieldByName("GoodID").Value := Brak.KeyValue;
  FieldByName("MotivID").Value := Reason.KeyValue;
  FieldByName("BoxID").Value := Box.KeyValue;
  FieldByName("BossID").Value := Boss.KeyValue;
  If oper_cod = admin then
   FieldByName("Cardd").Value := DateToStr(DtC.Date) + " " +      TimeToStr(CardT.Time);
  CheckBrowseMode;
  ApplyUpdates;
 end;
 DM.DB.Commit;
 QGetCard.CommitUpdates;
except
 ErrorFl := True;
 DM.DB.RollBack;
end;
.
.
.


 
Плохиш ©   (2006-12-21 11:55) [11]

Осталось выяснить каким боком тут какая-то "форма ввода".


 
Sergey__   (2006-12-21 12:02) [12]

2Плохиш

> Осталось выяснить каким боком тут какая-то "форма ввода".


Экранная форма, в которой пользователь заполняет необходимые поля.
TCardF = class(TForm)


 
Плохиш ©   (2006-12-21 12:05) [13]


> Sergey__   (21.12.06 12:02) [12]
> 2Плохиш
>
> > Осталось выяснить каким боком тут какая-то "форма ввода".
>
>
>
> Экранная форма, в которой пользователь заполняет необходимые
> поля.
> TCardF = class(TForm)

Всё, мне скучно, не люблю партизанов, можешь дальше не продолжать.


 
Anatoly Podgoretsky ©   (2006-12-21 12:27) [14]

> Sergey__  (21.12.2006 11:16:05)  [5]

Не обманывай, из ниже приведеного кода этого не наблюдается


 
ЮЮ ©   (2006-12-21 13:01) [15]

Во-первых, для вставки одной записи кэшировать НД совсем ни к чему.
DM.DB.StartTransaction;
ApplyUpdates;
DM.DB.Commit;
QGetCard.CommitUpdates;

If newcard then begin
 SQL.Add("where cardn is NULL");
 Open;
 Insert;
 CardT.Time := Time;
end


QGetCard содержит только одну карточку, или Inserted или с cardn = GurCardF.Tag. Чему равен GurCardF.Tag после вставки - непонятно, т.е.
код на Создание\редактирование карточки запросто может вернуть пустой набор, как для вставк, если он затем выполняется. Поставь брекпоинт для контроля этого кода. Возможно, что QGetCard после сохранения где-то переоткрывается. Создай у него AfterOpen, чтобы поймать в отладчике


 
Sergey__   (2006-12-21 13:05) [16]

2Anatoly Podgoretsky

> Не обманывай, из ниже приведеного кода этого не наблюдается


Не обманываю, говорю как на духу :-) Причину понял сам. Просто после сохранения новой карточки перестает выполняться условие выборки
 SQL.Add("select * from cards");
If newcard then begin
 SQL.Add("where cardn is NULL");

т.к. поле cardn уже не NULL. И в приведенном коде это четко наблюдается :-) Тем не менее всем ответившим огромное спасибо.


 
ЮЮ ©   (2006-12-22 02:54) [17]

Причину понял сам. Просто после сохранения новой карточки перестает выполняться условие выборки
SQL.Add("select * from cards is NULL");


Это же не фильтр DataSeta, а условие первоначальной выборки. Даже если запись и не удовлетворяет этому условию, сама она из DataSeta никуда не денется, пока твы не переоткроешь его.



Страницы: 1 вся ветка

Текущий архив: 2007.01.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.076 c
2-1166618448
регинка
2006-12-20 15:40
2007.01.14
как нам тяжело новичкам


2-1165993024
VOPROS
2006-12-13 09:57
2007.01.14
Ошибка сервера. Excel.


1-1164029559
StriderMan
2006-11-20 16:32
2007.01.14
TDBF.PackTable


2-1166780478
kukuikar
2006-12-22 12:41
2007.01.14
Изменение даты создания файла


2-1166632717
Grey-SPB
2006-12-20 19:38
2007.01.14
Кнопка отмены или выхода (без закрытия всей прогр.)