Diocp open-source project-demo (how to operate a remote database)

Source: Internet
Author: User

After two days of open-source development, I would like to thank the netizens for providing some suggestions for the changes, especially in Xe.

 

You can download the latest code from SVN.

 

https://code.google.com/p/diocp/

Today, I made a database operation demonstration.

 

Database Operations are relatively simple. There are two functions. The first part is to enable the SQL

Procedure tfrmmain. btnopensqlclick (Sender: tobject); var lvjsonstream, lvrecvobject: tjsonstream; lvstream: tstream; lvdata: ansistring; L, J, X: integer; begin lvjsonstream: = tjsonstream. create; try lvjsonstream. JSON: = So (); lvjsonstream. JSON. I ['cmdindex ']: = 1001; // open an SQL script to obtain lvjsonstream data. JSON. s ['SQL']: = mmosql. lines. text; fclientsocket. sendobject (lvjsonstream); finally lvjsonstream. free; end; // read data lvrecvobject: = tjsonstream. create; try fclientsocket. recvobject (lvrecvobject); if not lvrecvobject. getresult then begin raise exception. create (lvrecvobject. getresultmsg); end; setlength (lvdata, lvrecvobject. stream. size); lvrecvobject. stream. position: = 0; lvrecvobject. stream. readbuffer (lvdata [1], lvrecvobject. stream. size); cdsmain. xmldata: = lvdata; finally lvrecvobject. free; end;

Processing in clientcontext on the server

Procedure tclientcontext. values (const pvdataobject: tobject); var lvjsonstream: tjsonstream; lvfile: string; lvcmdindex: Cardinal; values, lvencodedata: ansistring; lvsql: string; begin lvjsonstream: = tjsonstream (pvdataobject ); lvcmdindex: = lvjsonstream. JSON. I ['cmdindex ']; // echo test if lvcmdindex = 1000 then begin interlockedincrement (testerinfo. _ recvtimes); // write-back data writeobject (lvjsonstream); end else if lvcmdindex = 1001 then begin // obtain data based on SQL and put it in stream try lvsql: = lvjsonstream. JSON. s ['SQL']; lvxmldata: = dmmain. cdsprovider. queryxmldata (lvsql); lvjsonstream. clear (); lvjsonstream. stream. writebuffer (lvxmldata [1], length (lvxmldata); lvjsonstream. setresult (true); counter t on E: exception do begin lvjsonstream. clear (); lvjsonstream. setresult (false); lvjsonstream. setresultmsg (E. message); end; // writeobject (lvjsonstream );

 

A very useful DLL is used to save data.

Client:

Procedure tfrmmain. btnpostclick (Sender: tobject); var lvjsonstream, lvrecvobject: tjsonstream; lvstream: tstream; lvdata: ansistring; L, J, X: integer; begin if cdsmain. state in [dsinsert, dsedit] Then cdsmain. post; If cdsmain. changecount = 0 then begin showmessage ('no modification made! '); Exit; end; lvjsonstream: = tjsonstream. create; try lvjsonstream. JSON: = So (); lvjsonstream. JSON. I ['cmdindex ']: = 1002; // open an SQL script and obtain the data. // package the modification record with tcdsoperatorwrapper. createcdsencode do begin settableinfo (pansichar (ansistring (edtupdatetable. text), pansichar (ansistring (edtkeyfields. text); setdata (cdsmain. data, cdsmain. delta); // execute code execute; lvdata: = getpackagedata; end; mmodata. clear; mm Odata. lines. add (lvdata); lvjsonstream. stream. write (lvdata [1], length (lvdata); fclientsocket. sendobject (lvjsonstream); finally lvjsonstream. free; end; // read data lvrecvobject: = tjsonstream. create; try fclientsocket. recvobject (lvrecvobject); if not lvrecvobject. getresult then begin raise exception. create (lvrecvobject. getresultmsg); End else begin showmessage ('saved successfully! '); End; finally lvrecvobject. Free; end; cdsmain. mergechangelog (); end;

Server:

If lvcmdindex = 1002 then // Save the data to a regular customer begin try lvjsonstream. stream. position: = 0; setlength (lvencodedata, lvjsonstream. stream. size); lvjsonstream. stream. readbuffer (lvencodedata [1], lvjsonstream. stream. size); dmmain. executeapplyupdate (lvencodedata); lvjsonstream. clear (); lvjsonstream. setresult (true); counter t on E: exception do begin lvjsonstream. clear (); lvjsonstream. setresult (false); lvjsonstream. setresultmsg (E. message); end; // writeobject (lvjsonstream); End

 

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.