🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #346991

Re: Pomysł a funkcjonalność - prośba o poradę

#346991
From: lordbz
Date: Mon, 13 May 2019 16:29
101 lines
5411 bytes
W dniu niedziela, 12 maja 2019 15:25:51 UTC+2 użytkownik lordbz napisał:
> Witam 
> 
> 
> Piszę pewną aplikację i wymyśliłem sobie żeby ograniczyć liczbę formatek itp.
> Aplikacja (poza tym co robi) ma możliwość dodawania użytkownika do bazy oraz edycji już istniejącego użytkownika. 
> Tyle tytułem wstępu.
> 
> Na formie dałem PageControl i dwie zakładki, oraz dwa przyciski (pobrane jednak z ramki). Jeden to "Zapisz" drugi "Koniec".
> 
> Na TabSheet1 są kontrolki dodające użytkownika a na TabSheet2 wyświetlane są dane użytkownika z wcześniejszej formatki gotowe do edycji.
> 
> Całość chciałem zrobić tak, żeby był jeden klawisz "Zapisz" (z ramki), który by obsługiwał obie sytuacje.
> Napisałem więc procedurę , która Insertuje do bazy nowego użytkownika, oraz osobną , która updatuje już istniejącego w bazie i teraz pod klawszem "Zapisz":
> 
> 
> procedure TFrm1.Btn1ZapiszClick(Sender: TObject);
> begin
> 
> if PageControl1.ActivePageIndex = 0 then
> DodajUzytkownika //wywołuję procedurę dodawania
> else
> EdytujUztkownika
> end;
> 
> taki pomysł - wydaje mi się , że ok ale.... jakoś czuję że to mało eleganckie, można prościej.
> 
> Może jakoaś opinia (tylko bez krzyków bo zamknę się w sobie i znowu kasa na terapeutę pójdzie :-)  )
> 
> pozdrawiam
> 
> Przemek

Pewnie źle opisałem. Jeszcze raz - hhciałem ujednolicić interface dla użytkownika programu. Stąd pomysł.
Jest tak: na formatce jest siatka z danymi np. klientów (iksiński igerkowski itp.) W prawej części formatki są klawisze Wyszkaj, Dodaj nowego, Edytuj itp.. Teraz --> gdy wybierze "Dodaj nowego" otwiera się okno (nowa forma ) o nazwie "Dadaj/Edytuj" z aktywną zakładką "Dodaj" i są pola gotowe do wypełnienia nowymi danymi. A gdy zaznaczę kogoś na siatce i kliknę "Edytuj" to otwiera się okno "Dodaj/Edytuj" (tak to samo co przedtem okno) ale z aktywną zakładką "Edytuj".

No nie chcę przecież edytować tyle co założonego klienta bo i po co :-).

Może dam kodzik jak to wygląda.
Procedura dla dodawania nowego: (tu zajęcia)

procedure TFrmDodajEdytujZaj.ZakladkaDodajZajecia;
var
  generator: Integer;
  historia: string;
begin
  try
    with DtMdl.IBQtemp, SQL do          //dodanie nowego zajecia
    begin
      Close;
      Clear;
      Add('INSERT INTO Zajecia (Nazwa_zajecia, Opis)');
      Add('VALUES (:Nazwa_zajecia, :Opis)');
      ParamByName('Nazwa_zajecia').AsString := Trim(EdtNazwaZaj.Text);
      ParamByName('Opis').AsString := Trim(EdtOpisZaj.Text);
      ExecSQL;
      DtMdl.ibtransTemp.Commit;
    end;
    with DtMdl.IBQtemp, SQL do                    //po dodaniu w oknie wczesniejszym ustawiamy się na nowym
    begin
      Clear;
      Add('SELECT gen_id (gen_zajecia_id, 0) FROM rdb$database ');
      Open;
      generator := FieldByName('gen_id').AsInteger;
    end;


    with DtMdl.IBQZajecia, SQL do
    begin
      Close;
      Clear;
      Add('SELECT Id_zajecia, Nazwa_zajecia, Opis, Data_utworzenia, Aktywny, Usun FROM Zajecia');
      Add('WHERE Usun =:usun order by Nazwa_zajecia');
      ParamByName('Usun').AsInteger := 0;
      Open;
    end;
    DtMdl.IBQZajecia.Locate('id_zajecia', generator, [loCaseInsensitive, loPartialKey]);           //ustawienie fokusu na nowym zajeciu
    Close;
  except
    DtMdl.ibtransTemp.Rollback;
    ShowMessage('Błąd nie udało się dodać nowego Zajęcia ');
  end;
end;


Następna procedura dla edycji już istniejącego tylko że UPDATE - kod prawie taki sam.

i teraz całość jest wywoływana pod klawiszem :

procedure TFrmDodajEdytujZaj.RmkZajrzBitBZapiszClick(Sender: TObject);
begin
  if RzPgCtrl1.ActivePageIndex = 0 then
  begin
    ZakladkaDodajZajecia
  end
  else
   ZakladkaEdytujZajecia

czyli w zależności od tego która zakładka Pagecontrlo jest aktywna to ta procedura się wywołuje. 

Taki tam pomysł...
Technical Details
Message-ID: <c494f2a3-2543-493d-b49a-77e68331901f@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.166.216.MISMATCH!136no22792itk.0!news-out.google.com!l135ni27itc.0!nntp.google.com!136no22789itk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <f1d5f52e-7035-41ad-a7bb-b78126030630@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a5d:96c4:: with SMTP id r4mr17865585iol.193.1557764947801;        Mon, 13 May 2019 09:29:07 -0700 (PDT)
X-Received: by 2002:a9d:77d6:: with SMTP id w22mr17138392otl.154.1557764947580; Mon, 13 May 2019 09:29:07 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.166.216.MISMATCH!136no22792itk.0!news-out.google.com!l135ni27itc.0!nntp.google.com!136no22789itk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Mon, 13 May 2019 09:29:07 -0700 (PDT)
In-Reply-To: <f1d5f52e-7035-41ad-a7bb-b78126030630@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=188.147.96.234; posting-account=7n8jYQoAAAD8CMBk_0SEIjdWdfp4EnSW
NNTP-Posting-Host: 188.147.96.234
References: <f1d5f52e-7035-41ad-a7bb-b78126030630@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <c494f2a3-2543-493d-b49a-77e68331901f@googlegroups.com>
Subject: Re: Pomysł a funkcjonalność -
 prośba o poradę
From: lordbz <lordbz@gmail.com>
Injection-Date: Mon, 13 May 2019 16:29:07 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit