🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#347002
From: zpksoft
Date: Wed, 15 May 2019 12:30
82 lines
4818 bytes
W dniu środa, 15 maja 2019 13:54:59 UTC+2 użytkownik J-23 napisał:
> W dniu 15.05.2019 o 13:04, zpksoft pisze:
> > W dniu środa, 15 maja 2019 10:27:14 UTC+2 użytkownik lordbz napisał:
> >>> U mnie przeważnie zapytania sql są tworzone dynamicznie (..)
> >>>
> >>> Paweł
> >>
> >> Może jakiś mały konkretny przykład ....
> >> poproszę ?
> >>
> >> Przemek
> > 
> > No dobra, kawałek kodu (piszę z głowy):
> > 
> > var par: array of variant;
> > sql: string;
> > where: string;
> > i: integer;
> > begin
> >    sql:='select * from tabelka ';
> >    where:='';
> >    if cbDat.Checked then begin
> >      setLength(par, high(par)+2);
> >      par[high(par)]:=eDat.Value;
> >      where:=' where dat>:dat ';
> >    end;
> >    if cbMat.Checked then begin
> >      setLength(par, high(par)+2);
> >      par[high(par)]:=eMat.Value;
> >      if where='' then where:=' where mat=:mat '
> >      else where:=where+' and mat=:mat ';
> >    end;
> >    if cbPat.Checked then begin
> >      setLength(par, high(par)+2);
> >      par[high(par)]:=ePat.Value;
> >      if where='' then where:=' where pat containing :pat '
> >      else where:=where+' and pat containing :pat ';
> >    end;
> >    sql:=sql+where;
> >    
> >    query.sql:=sql;
> >    query.prepare; //inicjacja parametrów (ale nie ich typów!)
> >    
> >    for i:=0 to high(par) do
> >    begin
> >      query.params[i].value=par[i];
> >    end;
> >    
> >    //tu: ew. transakcja...
> >    query.open; //dla select
> > end;
> 
> Te kontrolki są do ułatwienia wielu rzeczy ale nie do wszystkiego - 
> głównym ich zadaniem jest ułatwienie połączenia warstwy GUI z warstwą 
> danych - by nie pisać kodu tam gdzie jest on zbędny.
> 
> Generowanie SQL to zupełnie inna bajka - u mnie (programuje teraz 
> głownie w Javie i czasem w Lazarus) załatwiam to jedną klasą w całej 
> aplikacji która w zależności od Parametrów generuje mi odpowiedni SQL i 
> w takim wypadku nie korzystam z żadnych kontrolek ani zwykłych ani DB bo 
> po co? Dane z kontrolek jeśli już są mi potrzebne bo np na ich podstawie 
> jest generowany sql przekazuje za pomocą odpowiedniego property który 
> znajduje się w klasie odpowiedzialnej za generowanie sql - po co? a no 
> wszystko mam zamknięte w jednym module (obsługa wyjątków itd).
> 
> Można by to zrobić bez kodu nawet typu przekazanie do property ale 
> wymagało by to napisania jeszcze jednego komponentu który kładę na formę 
> i wskazuje w edytorze odpowiednie kontrolki DB. Ale to zrobię jeśli będę 
> miał chwile czasu
> 
> PS a właśnie takie przykłady (choć rozumiem ze powyższy kod miał na celu 
> pokazanie problemu) ale to co jest powyżej to jest metoda drutowania o 
> której piszesz w tym wątku
> 
> Pozdrawiam

Drutowanie inaczej pojmuję :)
Ja bym to raczej nazwał programowaniem (chyba, że to pojęcie już wyszło z użycia?)

A tak konkretniej- pytający chciał prostej ilustracji w kodzie i ją podałem.

Paweł
Technical Details
Message-ID: <b91da0c2-0187-4129-81de-e1f714b82de4@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news.unit0.net!newsreader4.netcologne.de!news.netcologne.de!feeder1.cambriumusenet.nl!feed.tweak.nl!209.85.166.216.MISMATCH!i64no124634iti.0!news-out.google.com!l135ni122itc.0!nntp.google.com!i64no124633iti.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <f1d5f52e-7035-41ad-a7bb-b78126030630@googlegroups.com> <002449dc-a011-4ede-9274-800249fd0699@googlegroups.com> <5cdb42f1$0$531$65785112@news.neostrada.pl> <0fd326ca-4ef2-402a-81a3-09d36f322b9d@googlegroups.com> <6dcd275e-3f6b-45db-9100-8cfbb31aa6a2@googlegroups.com> <de026013-f26c-43e7-8603-cbc4426398cf@googlegroups.com> <5cdbfe0a$0$17364$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a24:b349:: with SMTP id z9mr8587291iti.77.1557923457743;        Wed, 15 May 2019 05:30:57 -0700 (PDT)
X-Received: by 2002:aca:c456:: with SMTP id u83mr1847860oif.129.1557923457474; Wed, 15 May 2019 05:30:57 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news.unit0.net!newsreader4.netcologne.de!news.netcologne.de!feeder1.cambriumusenet.nl!feed.tweak.nl!209.85.166.216.MISMATCH!i64no124634iti.0!news-out.google.com!l135ni122itc.0!nntp.google.com!i64no124633iti.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Wed, 15 May 2019 05:30:57 -0700 (PDT)
In-Reply-To: <5cdbfe0a$0$17364$65785112@news.neostrada.pl>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.22.194.139; posting-account=8ND_mgoAAAD5J9y9fnaTB1Kcu7xKWk7Q
NNTP-Posting-Host: 83.22.194.139
References: <f1d5f52e-7035-41ad-a7bb-b78126030630@googlegroups.com> <002449dc-a011-4ede-9274-800249fd0699@googlegroups.com> <5cdb42f1$0$531$65785112@news.neostrada.pl> <0fd326ca-4ef2-402a-81a3-09d36f322b9d@googlegroups.com> <6dcd275e-3f6b-45db-9100-8cfbb31aa6a2@googlegroups.com> <de026013-f26c-43e7-8603-cbc4426398cf@googlegroups.com> <5cdbfe0a$0$17364$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <b91da0c2-0187-4129-81de-e1f714b82de4@googlegroups.com>
Subject: Re: Pomysł a funkcjonalność -
 prośba o poradę
From: zpksoft <zpksoft@op.pl>
Injection-Date: Wed, 15 May 2019 12:30:57 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit