В прошлом посте мы построили сервер приложений DataSnap. В данном же посте сделаем простейшее клиентское приложение.
Итак, создаем новое VCL приложение в Dephi (File New VCL Forms Application). Сразу же создадим для него новый модуль данных (File New VCL Data Module Delphi). Сохраните всё под понятными именами.
В модуле данных разместим SQLConnection.
Сохраним всё (File Save all) в отдельный каталог. Дайте понятные имена всем модулям, чтобы потом проще было воспринимать что есть что. Например, я назвал DataModule клиентского приложения ClientDataModule.
Как настроить SQLConnection в ClientDataModule?
Поскольку у меня сервер и клиент на одном компьютере, я прописал HostName localhost;
Создаем класс методов сервера внутри клиента
В результате создастся ещё один модуль со следующим кодом (листинг ниже). Этот модуль является связующим мостиком между клиентским приложением и серверным. Если Вы на сервере создали новые методы, то для того, чтобы обновить их в классе клиента – просто ещё раз нажмите правой кнопкой на SQLConnection в ClientDataModule и новые методы появятся внутри класса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
// // Created by the DataSnap proxy generator. // 25.08.2015 9:23:34 // unit ClientMethods; interface uses System.JSON, Data.DBXCommon, Data.DBXClient, Data.DBXDataSnap, Data.DBXJSON, Datasnap.DSProxy, System.Classes, System.SysUtils, Data.DB, Data.SqlExpr, Data.DBXDBReaders, Data.DBXCDSReaders, Data.DBXJSONReflect; type TServerMethods1Client = class(TDSAdminClient) private FEchoStringCommand: TDBXCommand; FReverseStringCommand: TDBXCommand; public constructor Create(ADBXConnection: TDBXConnection); overload; constructor Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); overload; destructor Destroy; override; function EchoString(Value: string): string; function ReverseString(Value: string): string; end; implementation function TServerMethods1Client.EchoString(Value: string): string; begin if FEchoStringCommand = nil then begin FEchoStringCommand := FDBXConnection.CreateCommand; FEchoStringCommand.CommandType := TDBXCommandTypes.DSServerMethod; FEchoStringCommand.Text := 'TServerMethods1.EchoString'; FEchoStringCommand.Prepare; end; FEchoStringCommand.Parameters[0].Value.SetWideString(Value); FEchoStringCommand.ExecuteUpdate; Result := FEchoStringCommand.Parameters[1].Value.GetWideString; end; function TServerMethods1Client.ReverseString(Value: string): string; begin if FReverseStringCommand = nil then begin FReverseStringCommand := FDBXConnection.CreateCommand; FReverseStringCommand.CommandType := TDBXCommandTypes.DSServerMethod; FReverseStringCommand.Text := 'TServerMethods1.ReverseString'; FReverseStringCommand.Prepare; end; FReverseStringCommand.Parameters[0].Value.SetWideString(Value); FReverseStringCommand.ExecuteUpdate; Result := FReverseStringCommand.Parameters[1].Value.GetWideString; end; constructor TServerMethods1Client.Create(ADBXConnection: TDBXConnection); begin inherited Create(ADBXConnection); end; constructor TServerMethods1Client.Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); begin inherited Create(ADBXConnection, AInstanceOwner); end; destructor TServerMethods1Client.Destroy; begin FEchoStringCommand.DisposeOf; FReverseStringCommand.DisposeOf; inherited; end; end. |
Сохраняем и подключаем вновь созданный модуль через File | Use Unit
Как оформить главную форму клиентского приложения?
Главную форму нашего клиентского приложения оформим следующим образом…
Далее, в событии OnChange для Edit1 нам нужно написать следующий код…
1 2 3 4 5 6 7 8 |
procedure TForm1.Edit1Change(Sender: TObject); var SMC:TServerMethods1Client; begin SMC:=TServerMethods1Client.Create(ClientDataModule.DataModule2.SQLConnection1.DBXConnection); label1.Caption:=SMC.EchoString(edit1.Text); SMC.Free; end; |
А вот и результат нашего простейшего приложения по технологии DataSnap…