[Delphi] Dwie niemal identyczne procedury...

[Delphi] Dwie niemal identyczne procedury...
JK
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Ta działa bez zarzutu

Kopiuj
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ł

Kopiuj
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]

zajcev
  • Rejestracja: dni
  • Ostatnio: dni
0

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

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

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

JK
  • Rejestracja: dni
  • Ostatnio: dni
0

Na poczatek dzięki za zainteresowanie :)

Trim nic nie zmienił

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ń:

Kopiuj
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;

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?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.