II. Gestion statique des données : TPageproducer▲
Nous allons voir maintenant comment afficher des données statiquement (sans entrée de l'utilisateur) à partir d'un SBGD.
Imporant pour les ISAPI : pour un accès à votre SGBD par ODBC, vous devez impérativement créer un DNS Système et non utilisateur.
Autre petit conseil : évitez le BDE si possible. Surtout au vu de l'attribution des droits IUSR_VOTRE_MACHINE (c'est le compte utilisateur Internet de base sous IIS). Si vous en avez la possibilité, les composants ADO sont parfaits, ou alors Interbase 6, car compatible Linux et… gratuit ;-)
Tout se passe à nouveau dans le Webmodule. Nous allons y ajouter des composants base de données :
- un composant TDatabase pour l'accès au SGBD (ici avec les composants ADO) ;
- un composant TTable pour l'accès aux données ;
- un composant TPageProducer
Nous allons insérer dans la page Showname le code HTML. Vous allez ajouter un Tag (ici <#NOM>) où Delphi insérera les données.
Dans l'éditeur d'action, nous allons rajouter… une action ;-)
…que nous nommons Showname, dans le dialogue pathInfo. Pour l'affichage des résultats, nous avons deux solutions. Soit mettre le nom de notre page qui recueillera les données sous Producer et aucun codage n'est nécessaire…
… soit ne rien mettre sous Producer et coder la réponse : voici le code d'appel de l'action ShowName, qui appelle la page du même nom :
procedure
TWebM.WebMShownameAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var
Handled: Boolean
);
begin
Response.Content := ShowName.Content;
end
;
Lors de l'appel à cette page, la procédure ShowNameHTMLTag est activée et c'est là où nous allons remplacer le tag <#NOM> par les données du SGBD à travers l'événement OnHTMLTag :
procedure
TWebM.ShowNameHTMLTag(Sender: TObject; Tag: TTag; const
TagString: String
;
TagParams: TStrings; var
ReplaceText: String
);
Var
Data: String
;
begin
Try
if
CompareText(TagString, 'NOM'
) = 0
then
begin
//Ouverture de la base et du fichier
Try
Adresses.Connected:=True
;
Except
on
E:exception do
Data:=E.Message
;
end
;
Nom.Open;
Data := ''
;
Nom.First;
while
not
Nom.Eof do
begin
Data := Data + Nom.FieldByName('Nom'
).AsString+' '
+Nom.FieldByName('prenom'
).AsString;
//Nous devons ajouter à Data un retour/ligne HTML
Data:= Data +'<BR>'
;
Nom.Next;
end
;
end
;
Finally
Adresses.Connected:=False
;
ReplaceText := Data;
end
;
end
;
Vous devriez alors, en appelant http://localhost/myisapi.dll/showname avoir une liste de toute votre table.