[Delphi] Dwie niemal identyczne procedury...

0

Poniżej dwie niemal identyczne procedury. Chciałbym bardzo wiedzieć czemu druga z nich szwankuje.

Ta działa bez zarzutu

procedure Tf_zamowienia.b_edytuj_zamClick(Sender: TObject);
var id:string;
begin
id:=grid_zamowienia.Fields[0].AsString; //jedyna różnica z drugą procedurą (id=00007)
  t_zamowienia.First;
  while not t_zamowienia.EoF do
    begin
    if id=t_zamowienia.FieldValues['id_zamowienia'] then
      begin
        t_zamowienia.Edit;
        t_zamowienia.fieldvalues['id_zamowienia']:=id;
        t_zamowienia.fieldvalues['id_kontrahenta']:=e_id_kon.text;
        t_zamowienia.fieldvalues['data_zamowienia']:=DateToStr(Date);
        if e_termin.text<>'' then t_zamowienia.fieldvalues['termin']:=e_termin.text;
        if e_zaliczka.text<>'' then t_zamowienia.fieldvalues['zaliczka']:=e_zaliczka.text;
        t_zamowienia.fieldvalues['uwagi']:=uwagi;
        t_zamowienia.Post;
      end;
    t_zamowienia.Next;
  end;
DM.IBTr.CommitRetaining;
q_zamowienia.Close;
q_zamowienia.Open;
end;

Ta zdaje się nie działac. Nie wyrzuca żadnego wyjątku, jednak już np pole zaliczka nie zostaje aktualizowane, mimo że pętla wykonuje się prawidłowo. Program przechodzi przez funkcje edycyjne jak by ich nie wykonywał

procedure Tf_zamowienia.b_zatw_zamClick(Sender: TObject);
var id:string;
begin
id:=DM.l_id_zamowienia.Caption; //kluczowy moment, poniżej ShowMessage, który upewnia mnie że pobrane zostaje właściwe ID
showmessage(id); //(id=00007)
  t_zamowienia.First;
  while not t_zamowienia.EoF do
    begin
    if id=t_zamowienia.FieldValues['id_zamowienia'] then
      begin
        t_zamowienia.Edit;
        t_zamowienia.fieldvalues['id_zamowienia']:=id;
        t_zamowienia.fieldvalues['id_kontrahenta']:=e_id_kon.text;
        t_zamowienia.fieldvalues['data_zamowienia']:=DateToStr(Date);
        if e_termin.text<>'' then t_zamowienia.fieldvalues['termin']:=e_termin.text;
        if e_zaliczka.text<>'' then t_zamowienia.fieldvalues['zaliczka']:=e_zaliczka.text;
        t_zamowienia.fieldvalues['uwagi']:=uwagi;
        t_zamowienia.Post;
      end;
    t_zamowienia.Next;
  end;
DM.IBTr.CommitRetaining;
q_zamowienia.Close;
q_zamowienia.Open;
end;

[glowa]

0

z tak okrojonym kodem duzo nikt nie zdziala ale:
sproboj Trim:

1.
id := Trim(DM.l_id_zamowienia.Caption);

2.
skoro
if id=t_zamowienia.FieldValues['id_zamowienia'] then
to
t_zamowienia.fieldvalues['id_zamowienia']:=id;
nie ma sensu.

  1. ile ty masz transakcji aktywnych w aplikacji? O_o

  2. co to jest t_zamowienia? mam nadzieje ze nie dataset O_o

0

Na poczatek dzięki za zainteresowanie :)

1.
Trim nic nie zmienił

2.
wiem, ze to nie ma sensu, tyle że ten fragment akurat nic nie zmienia. W docelowej procedurze ma zostać jedynie edycja pól zaliczka, termin i uwagi. Tak dla porównania wrzuciłem jedynie.

W ten deseń:

procedure Tf_zamowienia.b_edytuj_zamClick(Sender: TObject);
var id:string;
begin
id:=DM.l_id_zamowienia.Caption; //kluczowy moment, poniżej ShowMessage, który upewnia mnie że pobrane zostaje właściwe ID
showmessage(id); //(id=00007)
  t_zamowienia.First;
  while not t_zamowienia.EoF do
    begin
    if id=t_zamowienia.FieldValues['id_zamowienia'] then
      begin
        t_zamowienia.Edit;
        if e_termin.text<>'' then t_zamowienia.fieldvalues['termin']:=e_termin.text;
        if e_zaliczka.text<>'' then t_zamowienia.fieldvalues['zaliczka']:=e_zaliczka.text;
        t_zamowienia.fieldvalues['uwagi']:=uwagi;
        t_zamowienia.Post;
      end;
    t_zamowienia.Next;
  end;
DM.IBTr.CommitRetaining;
q_zamowienia.Close;
q_zamowienia.Open;
end;

3.
W aplikacji mam tylko to IbTr z którego korzystają wszystkie procedury.

  1. t_zamowienia to komponent IbTable, czyli w zasadzie to chyba dataset, prawda?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0