Delphi - Súgó létrehozása SQL lekérdezésből

HTML Help komponensek 5. rész

forráskód letöltése
Sorozatunk utolsó részében kipróbáljuk az elkészített komponenseket. Egy SQL lekérdezésből készítünk CHM állományt. A lekérdezéshez a Northwind adatbázis Region és Territories tábláit használjuk, melyekből hierarchikusan felépülő tartalomjegyzéket is készítünk. Programból generáljuk az indexeket, a tartalomjegyzéket és a HTML állományokat.
A mellékelt példaprogram használatához szükség van az előző részekben elkészített komponensekre. Amennyiben az ADOConnection1 objektumban beállított ConnectionString értéke az Ön beállításainak nem megfelelő, úgy módosítsa azt, hogy az SQL szerver Northwind adatbázisa elérhetővé váljon.
Szükségünk van mindhárom elkészített komponensre.
Az SQL szerverhez a szokásos módon, ADO komponensek segítségével kapcsolódunk.
A súgó elkészítése során a Territories tábla tartalmából elkészítjük az egyes HTM állományokat, amelyekbe egy-egy rekordot helyezünk el.
Készítünk egy tartalomjegyzéket, amelyben a területek nevei vannak felsorolva, az őket tartalmazó régióknak alárendelten. A területek neveit az indexben is szerepeltetjük.
A HTM állományokat egy Files nevű alkönyvtárban helyezzük el.
Path:=ExtractFilePath(Application.ExeName)+'Files';
Létrehozzuk az új project-et, indexet és tartalomjegyzéket. A létrejövő súgót és részegységeit az alkalmazással megegyező könyvtárban helyezzük el, test néven.
HTMLHelpProject1.CreateNewProject;
HTMLHelpProject1.FileName:=ExtractFilePath(Application.ExeName)+'test.hhp';
...
Először létrehozzuk a területek adatait tartalmazó HTM állományokat. A következő SELECT parancsot használjuk:
SQL.Add('SELECT * FROM Territories');
Végigmegyünk a lekérdezés találati listájának összes elemén, és egy TStringList (sl) típusú változó segítségével legeneráljuk a HTM oldalakat.
sl.Add('<HTML><BODY>');
for i:=0 to FieldCount-1 do
  sl.Add(Fields[i].FieldName+' = '+Fields[i].AsString+'<br><br>');
sl.Add('</BODY></HTML>');
sl.SaveToFile(Path+'\'+Fields[0].AsString+'.htm');
Az elmentett állományokat hozzáadjuk a project-hez.
HTMLHelpProject1.TopicFiles.Add(Path+'\'+Fields[0].AsString+'.htm');
Kezdőállományként beállítjuk a találati lista első települését.
Következő lépésben a hierarchikus tartalomjegyzéket készítjük el.
Egy újabb lekérdezést hajtunk végre, ezúttal a Region táblán.
SQL.Add('SELECT * FROM Region');
Végigmegyünk a Region tábla összes során. A régió nevét elhelyezzük a tartalomjegyzék első szintjén.
HTMLHelpTOC1.Items.Add('l=0; i=1; n='+Fields[1].AsString);
Név szerint rendezve lekérdezzük a régióhoz tartozó összes területet.
ADOQuery2.SQL.Add('SELECT * FROM Territories WHERE RegionID='+Fields[0].AsString);
ADOQuery2.SQL.Add('ORDER BY TerritoryDescription');
A területek neveit feljegyezzük a tartalomjegyzék második és az index első szintjén.
HTMLHelpTOC1.Items.Add('l=1; i=11; n='+ADOQuery2.Fields[1].AsString+'; f='+Path+'\'+ADOQuery2.Fields[0].AsString+'.htm');
HTMLHelpIndex1.Items.Add('l=0; k='+ADOQuery2.Fields[1].AsString+'; f='+Path+'\'+ADOQuery2.Fields[0].AsString+'.htm');
A SaveIndex és SaveTOC metódusok meghívásával elmentjük az indexet és a tartalomjegyzéket.
A project-et összekapcsoljuk az index- és a tartalomjegyzék-állományokkal, elmentjük, majd lefordítjuk.
HTMLHelpProject1.IndexFile:=HTMLHelpIndex1.FileName;
HTMLHelpProject1.ContentsFile:=HTMLHelpTOC1.FileName;
HTMLHelpProject1.Title:='Területek';
HTMLHelpProject1.SaveProject;
HTMLHelpProject1.Compile;
A súgó megjelenítéséhez használhatjuk a ShellAPI unit ShellExecute utasítását.
ShellExecute(0,'open',PChar('"'+ExtractFilePath(Application.ExeName)+'test.chm"'),'','',SW_SHOW);

HTML Help komponensek cikksorozat