🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#347016
From: Roman Wilk
Date: Sat, 18 May 2019 10:01
83 lines
4520 bytes
> To ja Ciebie teraz poproszę o alternatywne rozwiązanie zagadnienia które przedstawiłem w kodzie. Dwa check-boxy i dwie kontrolki edycyjne.
> Ciekaw jestem jak to będzie wyglądało "bez drutowania"
> 
> Paweł

Jak cos od poczatku jest "drutem", to rzeczywiscie trudo nie drutowac :-).

1. Uzyj komponentow DB, czyli DBCheckBox i DBEdit (dla przykladu)
2. Powiaz z lokalnym DataSet, np. ClientDataSet (oczywiscie, moze byc ich wiele ...)
3. Uzyj tego co ClientDataSet oferuje z automatu (osobiscie nie uzywam) do zapisu do bazy danych.
4. Napisz automatyzacje kodu zapisu do bazy danych (w tym przypadku DB moze byc dowolna) tego co masz w lokalnym DataSeci'e (ja tak robie)
5. Przyklad kodu SQL'a automatyzacji dla Firebird'a 

function CreateUpdateOrInsertCommand(LocalTable: TDataSet; pozycje: TList;
  tableName: string; MatchingFields: array of string; params: TParams): string;
var
  i: integer;
  poz: string;
  sqlcomm: string;
  sep: Boolean;

  function GetMatchingCondition(MatchingFields: array of string): string;
  var
    i: integer;
    cmd: string;
  begin
    cmd := '';
    for i := 0 to high(MatchingFields) do
      cmd := cmd + MatchingFields[i] + ',';
    cmd := Copy(cmd, 1, length(cmd) - 1);
    Result := cmd;

  end;

begin
  sep := False;
  sqlcomm := 'UPDATE OR INSERT INTO ' + tableName + ' ( ';
  for i := 0 to pozycje.Count - 1 do
  begin
    poz := PString(pozycje[i])^;
    if LocalTable.FieldByName(poz).FieldKind = fkData then
    begin
      if sep = true then
        sqlcomm := sqlcomm + ', ';
      sqlcomm := sqlcomm + poz;
      sep := true;
    end;
  end;
  sqlcomm := sqlcomm + ') VALUES (';
  sep := False;
  for i := 0 to pozycje.Count - 1 do
  begin
    poz := PString(pozycje[i])^;
    if LocalTable.FieldByName(poz).FieldKind = fkData then
    begin
      if sep = true then
        sqlcomm := sqlcomm + ', ';
      sqlcomm := sqlcomm + ':' + poz;
      params.Add;
      params[params.Count - 1].name := poz;
      params[params.Count - 1].DataType := LocalTable.FieldByName(poz).DataType;
      if not LocalTable.FieldByName(poz).IsNull then
        params[params.Count - 1].Value := LocalTable.FieldByName(poz).Value;
      sep := true;
    end;
  end;
  sqlcomm := sqlcomm + ')';
  sqlcomm := sqlcomm + ' MATCHING( ' + GetMatchingCondition
    (MatchingFields) + ')';
  Result := sqlcomm;

end;

Ps.
Jak Ci 3 osby mowia, ze jestes pijany, to poloz sie spac :-)

Pozdrawiam 
----
Roman
 


 
Technical Details
Message-ID: <0ee35f1d-a0cb-4061-b2b1-9737e860fbba@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.215.MISMATCH!u76no304545ita.0!news-out.google.com!p73ni278itp.0!nntp.google.com!i64no306239iti.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> <qbgv5q$3f6$1@node2.news.atman.pl> <98f7302e-73d3-42cd-8017-d762169aecf7@googlegroups.com> <qbhat3$ead$1@node2.news.atman.pl> <16cb3810-8959-4887-8e67-9d268ad7b9e7@googlegroups.com> <e559209a-fd84-4206-a081-6b13e56d7821@googlegroups.com> <cb3be295-ea9b-4f89-a7c0-3937c9d06261@googlegroups.com> <5cdf299b$0$17345$65785112@news.neostrada.pl> <254d1279-bfbf-475a-819b-2764f76ee2bc@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a5e:8e4d:: with SMTP id r13mr35677818ioo.300.1558173669948;        Sat, 18 May 2019 03:01:09 -0700 (PDT)
X-Received: by 2002:a9d:d89:: with SMTP id 9mr39080217ots.117.1558173669683; Sat, 18 May 2019 03:01:09 -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.215.MISMATCH!u76no304545ita.0!news-out.google.com!p73ni278itp.0!nntp.google.com!i64no306239iti.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Sat, 18 May 2019 03:01:09 -0700 (PDT)
In-Reply-To: <254d1279-bfbf-475a-819b-2764f76ee2bc@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=91.234.102.48; posting-account=lJNmiQoAAAAcuwZEAibFvFBE7IgRs9bN
NNTP-Posting-Host: 91.234.102.48
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> <qbgv5q$3f6$1@node2.news.atman.pl> <98f7302e-73d3-42cd-8017-d762169aecf7@googlegroups.com> <qbhat3$ead$1@node2.news.atman.pl> <16cb3810-8959-4887-8e67-9d268ad7b9e7@googlegroups.com> <e559209a-fd84-4206-a081-6b13e56d7821@googlegroups.com> <cb3be295-ea9b-4f89-a7c0-3937c9d06261@googlegroups.com> <5cdf299b$0$17345$65785112@news.neostrada.pl> <254d1279-bfbf-475a-819b-2764f76ee2bc@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <0ee35f1d-a0cb-4061-b2b1-9737e860fbba@googlegroups.com>
Subject: Re: j Re: Pomysł a
 funkcjonalność - prośba o
 poradę
From: Roman Wilk <kameleonsql@gmail.com>
Injection-Date: Sat, 18 May 2019 10:01:09 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit