{ To make this sample work: 1. Be sure to compile and register the Join2 server 2. Compile and copy the EXE/DLL to a script-capable directory (e.g. c:\inetpub\scripts) 3. Place the join.htm file in a directory on your web server 4. Access the join.htm file in your browser } unit WebMain; interface uses Windows, Messages, SysUtils, Classes, HTTPApp, DBWeb, Db, DBClient, MConnect, DSProd, HTTPProd; type TWebModule1 = class(TWebModule) dcJoin: TDCOMConnection; cdsJoin: TClientDataSet; dstpJoin: TDataSetTableProducer; dsppJoin: TDataSetPageProducer; ppSuccess: TPageProducer; ppError: TPageProducer; procedure WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure WebModule1waListAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure dstpJoinFormatCell(Sender: TObject; CellRow, CellColumn: Integer; var BgColor: THTMLBgColor; var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs, CellData: String); procedure WebModule1waEditAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure dsppJoinHTMLTag(Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings; var ReplaceText: String); procedure WebModule1waUpdateAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); private { Private declarations } DataFields : TStrings; public { Public declarations } end; var WebModule1: TWebModule1; implementation {$R *.DFM} procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin with Request do case MethodType of mtPost: DataFields:=ContentFields; mtGet: DataFields:=QueryFields; end; end; function LocalServerPath(sFile : string = '') : string; var FN: array[0..MAX_PATH- 1] of char; sPath : shortstring; begin SetString(sPath, FN, GetModuleFileName(hInstance, FN, SizeOf(FN))); Result := ExtractFilePath( sPath ) + ExtractFileName( sFile ); end; procedure TWebModule1.WebModule1waListAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin cdsJoin.Open; Response.Content := dstpJoin.Content; end; procedure TWebModule1.dstpJoinFormatCell(Sender: TObject; CellRow, CellColumn: Integer; var BgColor: THTMLBgColor; var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs, CellData: String); begin if (CellRow > 0) and (CellColumn = 0) then CellData := Format('%s', [Request.ScriptName, CellData, CellData]); end; procedure TWebModule1.WebModule1waEditAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin dsppJoin.HTMLFile := LocalServerPath('join.htm'); cdsJoin.Filter := 'EmpNo = ' + DataFields.Values['empno']; cdsJoin.Filtered := true; Response.Content := dsppJoin.Content; end; procedure TWebModule1.dsppJoinHTMLTag(Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings; var ReplaceText: String); begin if CompareText(TagString, 'SCRIPTNAME')=0 then ReplaceText:=Request.ScriptName; end; procedure TWebModule1.WebModule1waUpdateAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var EmpNo, LastName, FirstName, HireDate, Salary, Vacation: string; begin EmpNo:=DataFields.Values['EmpNo']; LastName:=DataFields.Values['LastName']; FirstName:=DataFields.Values['FirstName']; HireDate:=DataFields.Values['HireDate']; Salary:=DataFields.Values['Salary']; Vacation:=DataFields.Values['Vacation']; cdsJoin.Open; if cdsJoin.Locate('EMPNO', EmpNo, []) then begin cdsJoin.Edit; cdsJoin.FieldByName('LastName').AsString:=LastName; cdsJoin.FieldByName('FirstName').AsString:=FirstName; cdsJoin.FieldByName('HireDate').AsString:=HireDate; cdsJoin.FieldByName('Salary').AsString:=Salary; cdsJoin.FieldByName('Vacation').AsString:=Vacation; if cdsJoin.ApplyUpdates(0)=0 then Response.Content:=ppSuccess.Content else Response.Content:=pPError.Content; end; end; end.