In the C++Builder of RAD Server, FireDAC + SQLServer connection.[JAPAN]
I explained the FireDAC + SQL Server connection in the previous parallel processing.
// Use FireDAC to MSSQL Server in parallel(std::vector<std::thread>)[JAPAN]
The "japan post office data"(SQL import) used last time is used from RAD Server.
We will create a new RAD Server project this time. That's C++Builder.
I have created one resource data module(TTestResource1). And we prepared a data module(TDataModule2) for one FireDAC.
We will create a single suffix for the resource. It is a member function.
//// class TTestResource1 : public TDataModule { __published: private: TDataModule2* test{new TDataModule2(this)}; public: __fastcall TTestResource1(TComponent* Owner); void Get(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse); //Custom SuffixName = zip/{z1}/{z2} void GetItem(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse); void GetFullZip(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse); void Post(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse); };
Added setting to register function.
//// static void Register() { std::auto_ptr<TEMSResourceAttributes> attributes(new TEMSResourceAttributes()); attributes->ResourceName = "test"; attributes->ResourceSuffix["GetItem"] = "{item}"; //add to attributes->ResourceSuffix["GetFullZip"] = "zip/{z1}/{z2}"; RegisterResource(__typeinfo(TTestResource1), attributes.release()); }
Place TFDConnection+TFDQuery on the other data module(TDataModule2).
//USEFORM("Unit2.cpp", DataModule2); of that time _libmain() file is commented out.
Add member functions.
//// class TDataModule2 : public TDataModule { __published: // IDE で管理されるコンポーネント TFDConnection *FDConnection1; TFDQuery *FDQuery1; private: // ユーザー宣言 public: // ユーザー宣言 __fastcall TDataModule2(TComponent* Owner); //added this. TJSONObject* __fastcall zipnum_to_json(String p1, String p2); };
Function implementation.
//// TJSONObject* __fastcall TDataModule2::zipnum_to_json(String p1, String p2) { constexpr wchar_t zip_sql1[] = L" = '%s%s' "; constexpr wchar_t zip_sql2[] = L" like '%s%%' "; constexpr wchar_t ziptable_sql[] = L"select * from T_ZIP where zip_id"; String zip_sql; TJSONArray* json1 = new TJSONArray(); try { (p2.Length() == 0)? zip_sql = ziptable_sql + Format(zip_sql2, ARRAYOFCONST((p1))): zip_sql = ziptable_sql + Format(zip_sql1, ARRAYOFCONST((p1,p2))); FDQuery1->SQL->Text = zip_sql; FDQuery1->Active = true; while (! FDQuery1->Eof) { TJSONObject* _line = new TJSONObject(); for (auto Field:FDQuery1->Fields) { _line->AddPair(new TJSONPair(Field->FieldName, Field->AsString)); } json1->Add(_line ); FDQuery1->Next(); } FDQuery1->Active = false; } catch(Exception& e1) { json1->Add(new TJSONPair("error", e1.Message)); } return new TJSONObject(new TJSONPair(L"zipnum_to_json",json1)); }
The argument of this function(zipnum_to_json) is the first half and the second half of the postal code.
Finally TJSONObject* is returned.
Add TDataModule2* test{new TDataModule2(this)}; to TTestResource1. Includes are also required.#include "Unit2.h"
/// void TTestResource1::GetFullZip(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse) { String z1 = ARequest->Params->Values["z1"]; String z2 = ARequest->Params->Values["z2"]; AContext->Response->Body->SetValue( test->zipnum_to_json(z1, z2),false); } void TTestResource1::GetItem(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse) { String z1 = ARequest->Params->Values["item"]; AContext->Response->Body->SetValue( test->zipnum_to_json(z1, ""),false); }
http://localhost:8080/test/zip/112/0004 to access.
http://localhost:8080/test/100


Comments
-
Please login first in order for you to submit comments