小墨同学 發表於 2022-8-20 16:18:00

delphi基于结构的CRUD(JSON)

<p>delphi基于结构的CRUD(JSON)</p>
<p>以采购订单为例。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">unit rest.tcgddtcgdd2;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">代码由代码工厂自动生成
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2022-08-20 16:04:54</span>
<span style="color: rgba(0, 0, 0, 1)">{$I def.inc}
</span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)">

uses
{$IFDEF firedac}db.firedac, db.firedacPool, {$ENDIF}
{$IFDEF unidac}db.unidac, db.unidacpool,{$ENDIF}
classes, db, System.NetEncoding,
system.JSON.Serializers, yn.log, SysUtils;

type
Ttcgdd </span>= record <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">采购订单主表</span>
    billid: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    adddate: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    supplierid: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    suppliername: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    warehouseid: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    warehousename: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    makerid: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    note: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    shenhe: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    maker: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
end;

type
Ttcgdd2 </span>= record <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">采购订单从表</span>
    billid: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    recno: integer;
    goodsid: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    goodsname: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    gg: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    dw: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    dj: <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)">;
    qty: <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)">;
    amount: <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)">;
end;

Tmodels </span>= record <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">采购订单主从表</span>
    status: integer;
    exception: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    message: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    tcgdds: TArray&lt;Ttcgdd&gt;<span style="color: rgba(0, 0, 0, 1)">;
    tcgdd2s: TArray&lt;Ttcgdd2&gt;<span style="color: rgba(0, 0, 0, 1)">;
end;

TRes </span>= record <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">应答</span>
    status: integer;
    exception: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    message: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
end;

function </span><span style="color: rgba(0, 0, 255, 1)">select</span>(url: <span style="color: rgba(0, 0, 255, 1)">string</span>; body: TBytes): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;

function insert(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span>; body: TBytes): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;

function update(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span>; body: TBytes): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;

function delete(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span>; body: TBytes): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;

implementation

function </span><span style="color: rgba(0, 0, 255, 1)">select</span>(url: <span style="color: rgba(0, 0, 255, 1)">string</span>; body: TBytes): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
db: tdb;
pool: tdbpool;
arr: TArray</span>&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
serial: TJsonSerializer;
rows: Tmodels;
i: integer;
res: TRes;
begin
serial :</span>=<span style="color: rgba(0, 0, 0, 1)"> TJsonSerializer.Create;
</span><span style="color: rgba(0, 0, 255, 1)">try</span>
    <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
      arr :</span>= url.Split([<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]);
      pool :</span>= GetDBPool(arr[<span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">]);
      db :</span>=<span style="color: rgba(0, 0, 0, 1)"> pool.Lock;
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> <span style="color: rgba(0, 0, 255, 1)">where</span>: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.Close;
      db.qry.SQL.Clear;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> high(arr) &gt;= <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)"> then
      </span><span style="color: rgba(0, 0, 255, 1)">where</span> := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> where </span><span style="color: rgba(128, 0, 0, 1)">'</span> + TNetEncoding.URL.Decode(arr[<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">]);
      db.qry.SQL.Text :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">select * from tcgdd</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(0, 0, 255, 1)">where</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.Open;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> db.qry.isempty then
      begin
      rows.status :</span>= <span style="color: rgba(128, 0, 128, 1)">500</span><span style="color: rgba(0, 0, 0, 1)">;
      rows.exception :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">No found any data.</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      result :</span>= serial.Serialize&lt;Tmodels&gt;<span style="color: rgba(0, 0, 0, 1)">(rows);
      exit;
      end;
      SetLength(rows.tcgdds, db.qry.RecordCount);
      db.qry.First;
      i :</span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">while</span> not db.qry.Eof <span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      rows.tcgdds.billid :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">billid</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.adddate :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">adddate</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.supplierid :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">supplierid</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.suppliername :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">suppliername</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.warehouseid :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">warehouseid</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.warehousename :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">warehousename</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.makerid :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">makerid</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.note :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">note</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.shenhe :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">shenhe</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdds.maker :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">maker</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      inc(i);
      db.qry.Next;
      end;
      db.qry.Close;
      db.qry.SQL.Clear;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> high(arr) &gt;= <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)"> then
      </span><span style="color: rgba(0, 0, 255, 1)">where</span> := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> where </span><span style="color: rgba(128, 0, 0, 1)">'</span> + TNetEncoding.URL.Decode(arr[<span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)">]);
      db.qry.SQL.Text :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">select * from tcgdd2</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(0, 0, 255, 1)">where</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.Open;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> db.qry.isempty then
      begin
      rows.status :</span>= <span style="color: rgba(128, 0, 128, 1)">500</span><span style="color: rgba(0, 0, 0, 1)">;
      rows.exception :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">No found any data.</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      result :</span>= serial.Serialize&lt;Tmodels&gt;<span style="color: rgba(0, 0, 0, 1)">(rows);
      exit;
      end;
      SetLength(rows.tcgdd2s, db.qry.RecordCount);
      db.qry.First;
      i :</span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">while</span> not db.qry.Eof <span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      rows.tcgdd2s.billid :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">billid</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdd2s.recno :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">recno</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asinteger;
      rows.tcgdd2s.goodsid :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">goodsid</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdd2s.goodsname :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">goodsname</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdd2s.gg :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gg</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdd2s.dw :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dw</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).asstring;
      rows.tcgdd2s.dj :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dj</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).AsFloat;
      rows.tcgdd2s.qty :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">qty</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).AsFloat;
      rows.tcgdd2s.amount :</span>= db.qry.fieldbyname(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">amount</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).AsFloat;
      inc(i);
      db.qry.Next;
      end;
      rows.status :</span>= <span style="color: rgba(128, 0, 128, 1)">200</span><span style="color: rgba(0, 0, 0, 1)">;
      rows.message :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">success</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      result :</span>= serial.Serialize&lt;Tmodels&gt;<span style="color: rgba(0, 0, 0, 1)">(rows);
    except
      on E: Exception </span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      res.status :</span>= <span style="color: rgba(128, 0, 128, 1)">500</span><span style="color: rgba(0, 0, 0, 1)">;
      res.exception :</span>=<span style="color: rgba(0, 0, 0, 1)"> E.message;
      result :</span>= serial.Serialize&lt;TRes&gt;<span style="color: rgba(0, 0, 0, 1)">(res);
      end;
    end;
</span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)">
    pool.Unlock(db);
    serial.Free;
end;
end;

function insert(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span>; body: TBytes): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
db: tdb;
pool: tdbpool;
arr: tarray</span>&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
serial: TJsonSerializer;
res: TRes;
begin
serial :</span>=<span style="color: rgba(0, 0, 0, 1)"> TJsonSerializer.Create;
</span><span style="color: rgba(0, 0, 255, 1)">try</span>
    <span style="color: rgba(0, 0, 255, 1)">try</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> rows: Tmodels;
      rows :</span>= serial.Deserialize&lt;Tmodels&gt;<span style="color: rgba(0, 0, 0, 1)">(TEncoding.UTF8.GetString(body));
      arr :</span>= url.Split([<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]);
      pool :</span>= GetDBPool(arr[<span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">]);
      db :</span>=<span style="color: rgba(0, 0, 0, 1)"> pool.Lock;
      db.startTrans;
      </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(0, 0, 255, 1)">var</span> row: Ttcgdd <span style="color: rgba(0, 0, 255, 1)">in</span> rows.tcgdds <span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      db.qry.Close;
      db.qry.SQL.Clear;
      db.qry.SQL.Text :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">insert into tcgdd (billid,adddate,supplierid,suppliername,warehouseid,warehousename,makerid,note,shenhe,maker) values (:billid,:adddate,:supplierid,:suppliername,:warehouseid,:warehousename,:makerid,:note,:shenhe,:maker)</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">billid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.billid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">adddate</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.adddate;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">supplierid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.supplierid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">suppliername</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.suppliername;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">warehouseid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.warehouseid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">warehousename</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.warehousename;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">makerid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.makerid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">note</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.note;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">shenhe</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.shenhe;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">maker</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.maker;
      db.qry.ExecSQL;
      end;
      </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(0, 0, 255, 1)">var</span> row: Ttcgdd2 <span style="color: rgba(0, 0, 255, 1)">in</span> rows.tcgdd2s <span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      db.qry.Close;
      db.qry.SQL.Clear;
      db.qry.SQL.Text :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">insert into tcgdd2 (billid,recno,goodsid,goodsname,gg,dw,dj,qty,amount) values (:billid,:recno,:goodsid,:goodsname,:gg,:dw,:dj,:qty,:amount)</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">billid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.billid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">recno</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsInteger :=<span style="color: rgba(0, 0, 0, 1)"> row.recno;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">goodsid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.goodsid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">goodsname</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.goodsname;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gg</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.gg;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dw</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.dw;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dj</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsFloat :=<span style="color: rgba(0, 0, 0, 1)"> row.dj;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">qty</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsFloat :=<span style="color: rgba(0, 0, 0, 1)"> row.qty;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">amount</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsFloat :=<span style="color: rgba(0, 0, 0, 1)"> row.amount;
      db.qry.ExecSQL;
      end;
      db.commitTrans;
      res.status :</span>= <span style="color: rgba(128, 0, 128, 1)">200</span><span style="color: rgba(0, 0, 0, 1)">;
      res.message :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">success</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      Result :</span>= serial.Serialize&lt;TRes&gt;<span style="color: rgba(0, 0, 0, 1)">(res);
    except
      on E: Exception </span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      db.rollbackTrans;
      res.status :</span>= <span style="color: rgba(128, 0, 128, 1)">500</span><span style="color: rgba(0, 0, 0, 1)">;
      res.exception :</span>=<span style="color: rgba(0, 0, 0, 1)"> E.Message;
      Result :</span>= serial.Serialize&lt;TRes&gt;<span style="color: rgba(0, 0, 0, 1)">(res);
      end;
    end;
</span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)">
    pool.Unlock(db);
    serial.Free;
end;
end;

function update(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span>; body: TBytes): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
db: tdb;
pool: tdbpool;
arr: tarray</span>&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
serial: TJsonSerializer;
res: TRes;
begin
serial :</span>=<span style="color: rgba(0, 0, 0, 1)"> TJsonSerializer.Create;
</span><span style="color: rgba(0, 0, 255, 1)">try</span>
    <span style="color: rgba(0, 0, 255, 1)">try</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> rows: Tmodels;
      rows :</span>= serial.Deserialize&lt;Tmodels&gt;<span style="color: rgba(0, 0, 0, 1)">(TEncoding.UTF8.GetString(body));
      arr :</span>= url.Split([<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]);
      pool :</span>= GetDBPool(arr[<span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">]);
      db :</span>=<span style="color: rgba(0, 0, 0, 1)"> pool.Lock;
      db.startTrans;
      </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(0, 0, 255, 1)">var</span> row: Ttcgdd <span style="color: rgba(0, 0, 255, 1)">in</span> rows.tcgdds <span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      db.qry.Close;
      db.qry.SQL.Clear;
      db.qry.SQL.Text :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">update tcgdd set billid=:billid,adddate=:adddate,supplierid=:supplierid,suppliername=:suppliername,warehouseid=:warehouseid,warehousename=:warehousename,makerid=:makerid,note=:note,shenhe=:shenhe,maker=:maker where billid=:key0</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">billid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.billid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">key0</span><span style="color: rgba(128, 0, 0, 1)">'</span>).value :=<span style="color: rgba(0, 0, 0, 1)"> row.billid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">adddate</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.adddate;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">supplierid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.supplierid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">suppliername</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.suppliername;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">warehouseid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.warehouseid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">warehousename</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.warehousename;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">makerid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.makerid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">note</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.note;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">shenhe</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.shenhe;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">maker</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.maker;
      db.qry.ExecSQL;
      end;
      </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(0, 0, 255, 1)">var</span> row: Ttcgdd2 <span style="color: rgba(0, 0, 255, 1)">in</span> rows.tcgdd2s <span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      db.qry.Close;
      db.qry.SQL.Clear;
      db.qry.SQL.Text :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">update tcgdd2 set billid=:billid,recno=:recno,goodsid=:goodsid,goodsname=:goodsname,gg=:gg,dw=:dw,dj=:dj,qty=:qty,amount=:amount where billid=:key0 and recno=:key1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">billid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.billid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">key0</span><span style="color: rgba(128, 0, 0, 1)">'</span>).value :=<span style="color: rgba(0, 0, 0, 1)"> row.billid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">recno</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsInteger :=<span style="color: rgba(0, 0, 0, 1)"> row.recno;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">key1</span><span style="color: rgba(128, 0, 0, 1)">'</span>).value :=<span style="color: rgba(0, 0, 0, 1)"> row.recno;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">goodsid</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.goodsid;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">goodsname</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.goodsname;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gg</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.gg;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dw</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString :=<span style="color: rgba(0, 0, 0, 1)"> row.dw;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dj</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsFloat :=<span style="color: rgba(0, 0, 0, 1)"> row.dj;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">qty</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsFloat :=<span style="color: rgba(0, 0, 0, 1)"> row.qty;
      db.qry.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">amount</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsFloat :=<span style="color: rgba(0, 0, 0, 1)"> row.amount;
      db.qry.ExecSQL;
      end;
      db.commitTrans;
      res.status :</span>= <span style="color: rgba(128, 0, 128, 1)">200</span><span style="color: rgba(0, 0, 0, 1)">;
      res.message :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">success</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      Result :</span>= serial.Serialize&lt;TRes&gt;<span style="color: rgba(0, 0, 0, 1)">(res);
    except
      on E: Exception </span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      db.rollbackTrans;
      res.status :</span>= <span style="color: rgba(128, 0, 128, 1)">500</span><span style="color: rgba(0, 0, 0, 1)">;
      res.exception :</span>=<span style="color: rgba(0, 0, 0, 1)"> E.Message;
      Result :</span>= serial.Serialize&lt;TRes&gt;<span style="color: rgba(0, 0, 0, 1)">(res);
      end;
    end;
</span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)">
    pool.Unlock(db);
    serial.Free;
end;
end;

function delete(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span>; body: TBytes): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
db: tdb;
pool: tdbpool;
arr: tarray</span>&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
serial: TJsonSerializer;
res: TRes;
begin
serial :</span>=<span style="color: rgba(0, 0, 0, 1)"> TJsonSerializer.Create;
</span><span style="color: rgba(0, 0, 255, 1)">try</span>
    <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
      arr :</span>= url.Split([<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]);
      pool :</span>= GetDBPool(arr[<span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">]);
      db :</span>=<span style="color: rgba(0, 0, 0, 1)"> pool.Lock;
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> <span style="color: rgba(0, 0, 255, 1)">where</span>: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
      db.startTrans;
      db.qry.Close;
      db.qry.SQL.Clear;
      </span><span style="color: rgba(0, 0, 255, 1)">where</span> := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> where </span><span style="color: rgba(128, 0, 0, 1)">'</span> + TNetEncoding.URL.Decode(arr[<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">]);
      db.qry.SQL.Text :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">delete from tcgdd</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(0, 0, 255, 1)">where</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.ExecSQL;
      db.qry.Close;
      db.qry.SQL.Clear;
      </span><span style="color: rgba(0, 0, 255, 1)">where</span> := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> where </span><span style="color: rgba(128, 0, 0, 1)">'</span> + TNetEncoding.URL.Decode(arr[<span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">]);
      db.qry.SQL.Text :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">delete from tcgdd2</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(0, 0, 255, 1)">where</span><span style="color: rgba(0, 0, 0, 1)">;
      db.qry.ExecSQL;
      db.commitTrans;
      res.status :</span>= <span style="color: rgba(128, 0, 128, 1)">200</span><span style="color: rgba(0, 0, 0, 1)">;
      res.message :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">success</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
      Result :</span>= serial.Serialize&lt;TRes&gt;<span style="color: rgba(0, 0, 0, 1)">(res);
    except
      on E: Exception </span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
      begin
      db.rollbackTrans;
      res.status :</span>= <span style="color: rgba(128, 0, 128, 1)">500</span><span style="color: rgba(0, 0, 0, 1)">;
      res.exception :</span>=<span style="color: rgba(0, 0, 0, 1)"> E.Message;
      Result :</span>= serial.Serialize&lt;TRes&gt;<span style="color: rgba(0, 0, 0, 1)">(res);
      end;
    end;
</span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)">
    pool.Unlock(db);
    serial.Free;
end;
end;

end.</span></pre>
</div>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/16607986.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/16607986.html
頁: [1]
查看完整版本: delphi基于结构的CRUD(JSON)