Mega Code Archive

 
Categories / Delphi / LAN Web TCP
 

Params in a Web Query at run time

Title: Params in a Web-Query at run time Question: Property editors are fine, but code is more readable and maintainable if we put the data out from TQuery's ressource direct in the implementation section. So the serialisation is important. Answer: 1. It's important to assign the query first (SQL:= aQuery) and second assign the Params including definition of dataType: procedure TModWebBroker.execWebQuerySQL; var aQuery: TStringList; begin try aQuery:= TStringList.Create; aQuery.clear; Build_kontoSQLString(aQuery); with qryWebCust do begin SQL.Clear; SQL:= aQuery; params[0].name:='clientname'; params[0].dataType:=ftstring; OPEN; end; //with finally aQuery.Free; end; //try end; 2. We build the query in a own procedure, so it's open for change (programming for change ;)): procedure TModWebBroker.Build_kontoSQLString(var aQuery: TStringList); begin with aQuery do begin Add('SELECT cust_no, customer, descript, amount'); Add('FROM account, customer, acctype'); Add('WHERE account.cust_no = customer.cust_no'); Add('AND account.acc_type = acctype.acc_id'); Add('AND UPPER(customer) LIKE UPPER(:clientname)||'#39'%'#39); Add('ORDER BY amount'); end; end; 3. We get the parameter from a browser through a request-object in a ISAPI-DLL: (The example "webqueries" is available on the net,now) procedure TModWebBroker.kontoStand1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var paraField: string; begin with qrywebAccount do begin paraField:=(Request.QueryFields.Values['clientname']); if Pos (uppercase(paraField), uppercase(Content)) 1 then Response.Content:= Content else Response.Content:= Format('Client"%s" not found!' + '', [Request.QueryFields.Values['clientname']]); end; //qrywebAccount end; last tip: after an insert you can get the last primary key without a stored procedure: function GetGenID (const AGeneratorName: string): integer; begin with TFIBQuery.Create(NIL) do try Database:= ibDB; SQL.Text:= 'SELECT GEN_ID (' + AGeneratorName + ', 1) from rdb$database'; ExecQuery; Result:= Fields [0].AsInteger; Close; finally Free; end; end;