日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用delphi 做服务器,basic4android 实现三层数据交互

發布時間:2024/1/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用delphi 做服务器,basic4android 实现三层数据交互 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是我第一次寫博客,寫得不好,以前學的東西我從來就沒有想過記錄下來,使用很快就忘記了,所以我現在開始寫博客把所有學到的東西都要記錄下來,加油...


首先delphi 里面加入kbmMWClient 這個插件 下載地址:http://pan.baidu.com/share/link?shareid=2712849152&uk=3993363350

第一個頁面

unit unt_main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, kbmMWCustomTransport, kbmMWServer, kbmMWTCPIPIndyServerTransport,
StdCtrls;

type
Tmainform = class(TForm)
kbmMWServer1: TkbmMWServer;
kbmMWTCPIPIndyServerTransport1: TkbmMWTCPIPIndyServerTransport;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
mainform: Tmainform;

implementation

uses unt_service_func, unt_dm;

{$R *.dfm}

procedure Tmainform.Button1Click(Sender: TObject);
begin
//鏈接數據庫
DataModule1.ADOConnection1.ConnectionString := Edit1.Text;
DataModule1.ADOConnection1.Connected := True;
//啟動服務
kbmMWServer1.Active := True;
end;

procedure Tmainform.FormCreate(Sender: TObject);
var
sd: TKbmMWCustomServiceDefinition;
begin
//項目啟動時先要注冊服務
sd := kbmMWServer1.RegisterService(TkbmMWSimpleService1,false);
end;

end.


第 二 個頁面

unit unt_service_func;

// =========================================================================
// kbmMW - An advanced and extendable middleware framework.
// by Components4Developers (http://www.components4developers.com)
//
// Service generated by kbmMW service wizard.
//
// INSTRUCTIONS FOR REGISTRATION/USAGE
// -----------------------------------
// Please update the uses clause of the datamodule/form the TkbmMWServer is placed on by adding
// YourServiceUnitName to it. Eg.
//
// uses ...,kbmMWServer,YourServiceUnitName;
//
// Somewhere in your application, make sure to register the serviceclass to the TkbmMWServer instance. Eg.
//
// var
// sd:TkbmMWCustomServiceDefinition;
// ..
// sd:=kbmMWServer1.RegisterService(yourserviceclassname,false);
//
// Set the last parameter to true if this is the default service.
//

?

{$I kbmMW.inc}

interface

uses
SysUtils,
{$ifdef LEVEL6}
Variants,
{$else}
Forms,
{$endif}
Classes,
kbmMWSecurity,
kbmMWServer,
kbmMWServiceUtils,
kbmMWGlobal,
kbmMWADOX,DB, ADODB,kbmMemTable, kbmMemBinaryStreamFormat;

type
TkbmMWSimpleService1 = class(TkbmMWSimpleService)
private
{ Private declarations }
protected
{ Protected declarations }
//新增以下函數
function ProcessRequest(const Func:string; const ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant; override;
function PerformUpdate(ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant; virtual;
function PerformSelect(ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant; virtual;
public
{ Public declarations }
{$IFNDEF CPP}class{$ENDIF} function GetPrefServiceName:string; override;
{$IFNDEF CPP}class{$ENDIF} function GetVersion:string; override;
{$IFNDEF CPP}class{$ENDIF} function GetFlags:TkbmMWServiceFlags; override;
end;

implementation

uses kbmMWExceptions, unt_main, unt_dm;

{$R *.dfm}


// Service definitions.
//---------------------

{$IFNDEF CPP}class{$ENDIF} function TkbmMWSimpleService1.GetPrefServiceName:string;
begin
Result:='demoservice';
end;

{$IFNDEF CPP}class{$ENDIF} function TkbmMWSimpleService1.GetVersion:string;
begin
Result:='1.0';
end;

{$IFNDEF CPP}class{$ENDIF} function TkbmMWSimpleService1.GetFlags:TkbmMWServiceFlags;
begin
Result:=[mwsfListed];
end;

function TkbmMWSimpleService1.ProcessRequest(const Func:string; const ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant;
var
AFunc:string;
begin
AFunc:=UpperCase(Func);
if AFunc='UPDATE' then // 關聯到PerformUpdate函數
Result:=PerformUpdate(ClientIdent,Args)
else
if AFunc='SELECT' then // 關聯到PerformSelect 函數
Result:=PerformSelect(ClientIdent,Args)
else Result:=inherited ProcessRequest(Func,ClientIdent,Args);
end;

function TkbmMWSimpleService1.PerformUpdate(ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant;
var
param: string;
aQuery: TADOQuery;
aconn: TkbmMWADOXConnection;
begin
Result := 0;
param :=args[0]; //取出參數
aQuery := TADOQuery.Create(nil);
//從數據庫連接池中取出可用鏈接
aconn := TkbmMWADOXConnection(DataModule1.kbmMWADOXConnectionPool1.GetBestConnection(True,0,nil,10000));
if aconn = nil then
begin
kbmMWRaiseServerException('無可用的數據庫連接');
Exit;
end;
aQuery.Connection := aconn.Database;
aQuery.SQL.Text := 'update devinfo set dev_name=:param where id < 10';
aQuery.Parameters.ParamByName('param').Value := param; //傳入參數
try
try
aQuery.ExecSQL;
Result := aQuery.RowsAffected;//返回影響條數
except
Result := -1; //錯誤時返回-1
end;
finally
aconn.UnlockConnection;
aQuery.Free;
end;
end;

function TkbmMWSimpleService1.PerformSelect(ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant;
var
param: string;
aQuery: TADOQuery;
aconn: TkbmMWADOXConnection;
memTable: TkbmMemTable; //內存表類
aStreamFormat: TkbmBinaryStreamFormat; //流格式類
begin
Result := 0;
param :=args[0]; //取出參數
aQuery := TADOQuery.Create(nil);
//從數據庫連接池中取出可用鏈接
aconn := TkbmMWADOXConnection(DataModule1.kbmMWADOXConnectionPool1.GetBestConnection(True,0,nil,10000));
if aconn = nil then
begin
kbmMWRaiseServerException('無可用的數據庫連接');
Exit;
end;
aQuery.Connection := aconn.Database;
aQuery.SQL.Text := 'select * from devinfo where dev_name=:param';
aQuery.Parameters.ParamByName('param').Value := param; //傳入參數
//初始化內存表
memTable := TkbmMemTable.Create(nil);
//初始化流格式
aStreamFormat := TkbmBinaryStreamFormat.Create(nil);
//內存表設置
memTable.DefaultFormat := aStreamFormat;
memTable.IndexFieldNames := '';
memTable.SortFields := '';
memTable.MasterSource := nil;
try
try
aQuery.Open;
Result := aQuery.RecordCount;//返回記錄條數
//導入結果到流
memTable.LoadFromDataSet(aQuery,[mtcpoStructure,mtcpoProperties]);
//格式化流
memTable.SaveToStreamViaFormat(ResultStream,aStreamFormat);
except
Result := -1; //錯誤時返回-1
end;
finally
aconn.UnlockConnection;
aQuery.Free;
memTable.Free;
aStreamFormat.Free;
end;
end;


end.


第三個 頁面

?

unit unt_dm;

interface

uses
SysUtils, Classes, kbmMWCustomConnectionPool, kbmMWCustomSQLMetaData,
kbmMWMSSQLMetaData, DB, ADODB, kbmMWADOX;

type
TDataModule1 = class(TDataModule)
kbmMWADOXConnectionPool1: TkbmMWADOXConnectionPool;
ADOConnection1: TADOConnection;
kbmMWMSSQLMetaData1: TkbmMWMSSQLMetaData;
kbmMWPooledSession1: TkbmMWPooledSession;
private
{ Private declarations }
public
{ Public declarations }
end;

var
DataModule1: TDataModule1;

implementation

{$R *.dfm}

end.

這些每加入一個頁面最好、F9 一下 看看錯在那?

如果有一些頁面時經常報錯的 加入

這樣服務器做好了...明天再發android 客戶端的

轉載于:https://www.cnblogs.com/-long/p/3188822.html

總結

以上是生活随笔為你收集整理的用delphi 做服务器,basic4android 实现三层数据交互的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。