Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.013 c
2-1167114999
Константин_
2006-12-26 09:36
2007.01.14
Оптимизация при открытии окна


15-1167019136
Riply
2006-12-25 06:58
2007.01.14
Зависание XP SP2 при старте.


2-1166644753
i-am-vladko
2006-12-20 22:59
2007.01.14
published property`s


15-1166600761
infom
2006-12-20 10:46
2007.01.14
Сжатие картинок в документах MS Word


1-1164102536
DelphiLexx
2006-11-21 12:48
2007.01.14
TTreeView определить стоит ли курсор на корне дерева





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский