delphi基于结构的CRUD(protobuf)
<p>delphi基于结构的CRUD(protobuf)</p><p>以采购订单为例。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">unit proto.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:14</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}
Grijjy.ProtocolBuffers, SysUtils, classes, System.NetEncoding, db;
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<Ttcgdd>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">主表</span>
tcgdd2s: TArray<Ttcgdd2>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">从表</span>
<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><span style="color: rgba(0, 0, 0, 1)">; body: TBytes): TBytes;
function insert(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; body: TBytes): TBytes;
function update(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; body: TBytes): TBytes;
function delete(url: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; body: TBytes): TBytes;
implementation
function </span><span style="color: rgba(0, 0, 255, 1)">select</span>(url: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; body: TBytes): TBytes;
</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><<span style="color: rgba(0, 0, 255, 1)">string</span>><span style="color: rgba(0, 0, 0, 1)">;
serial: TgoProtocolBuffer;
rows: Tmodels;
i: integer;
res: TRes;
begin
serial :</span>=<span style="color: rgba(0, 0, 0, 1)"> TgoProtocolBuffer.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) >= <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<Tmodels><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) >= <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<Tmodels><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<Tmodels><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<TRes><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><span style="color: rgba(0, 0, 0, 1)">; body: TBytes): TBytes;
</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><<span style="color: rgba(0, 0, 255, 1)">string</span>><span style="color: rgba(0, 0, 0, 1)">;
serial: TgoProtocolBuffer;
res: TRes;
begin
serial :</span>=<span style="color: rgba(0, 0, 0, 1)"> TgoProtocolBuffer.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;
serial.DeSerialize</span><Tmodels><span style="color: rgba(0, 0, 0, 1)">(rows, 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<TRes><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<TRes><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><span style="color: rgba(0, 0, 0, 1)">; body: TBytes): TBytes;
</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><<span style="color: rgba(0, 0, 255, 1)">string</span>><span style="color: rgba(0, 0, 0, 1)">;
serial: TgoProtocolBuffer;
res: TRes;
begin
serial :</span>=<span style="color: rgba(0, 0, 0, 1)"> TgoProtocolBuffer.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;
serial.Deserialize</span><Tmodels><span style="color: rgba(0, 0, 0, 1)">(rows, 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<TRes><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<TRes><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><span style="color: rgba(0, 0, 0, 1)">; body: TBytes): TBytes;
</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><<span style="color: rgba(0, 0, 255, 1)">string</span>><span style="color: rgba(0, 0, 0, 1)">;
serial: TgoProtocolBuffer;
res: TRes;
begin
serial :</span>=<span style="color: rgba(0, 0, 0, 1)"> TgoProtocolBuffer.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<TRes><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<TRes><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> </p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/16607968.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/16607968.html
頁:
[1]