Article View: pl.comp.lang.delphi
Article #346991Re: Pomysł a funkcjonalność - prośba o poradę
From: lordbz
Date: Mon, 13 May 2019 16:29
Date: Mon, 13 May 2019 16:29
101 lines
5411 bytes
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-mailReferences:
<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