Интерфейсы в HTA. Динамическое заполнение HTA окна данными из запроса

Из за не тривиальности реализации интерфейсов в HTA, это направление отталкивает многих разработчиков. Постараюсь поделиться различными методами реализации интерфейсов.
Построение таблицы с чекбоксами из набора данных, полученных ADODB

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<script language="vbscript">
window.resizeTo 400, 700 ' Изменяем размер окна и отрисовываем его по центру экрана
window.moveTo screen.width/2-400/2, screen.height/2-700/2
Document.Write ("<input type='button' value='Старт' onclick='Start()'>") ' Добавляем кнопку старт. Нажав на нее запустится скрипт Start()
HTMLstr = "<table border='1' width='100' bordercolorlight='#000000' cellspacing='0' bordercolordark='#C0C0C0' style='border-collapse: collapse; font-family: Verdana; font-size: 8pt'>"+vbcr+"<tr><td ><b>Индекс</b></td><td><b>Наименование группы</b></td></tr>"
' Здесь строка HTMLstr это HTML разметка для HTA окна
Sub Start()
Set objFSO = CreateObject("Scripting.FileSystemObject") 
	Set WshShell = CreateObject("WScript.Shell")
	path = WshShell.CurrentDirectory ' Определяем папку, из которой запущено приложение
	udlFile = "sm.udl"
  strFilePath = Path & "" & udlFile 'Читаем файл подключения к источнику данных. В нашем случае это UDL файл, находящийся в той же папке
  Const For_Reading = 1
  Const Tristate_True = -1
  Set objTS = objFSO.OpenTextFile(strFilePath,  For_Reading, False, Tristate_True)
  objTS.SkipLine
  objTS.SkipLine
  Udlread=objTS.Readline
  Set DBConn = CreateObject("ADODB.Connection")
  DBConn.Open(Udlread) 'Пробуем подключится
	SQLstr = "SELECT * FROM CLASSIF_TREE_CHILD(0, 119, 1) order by ID_CLASSIF" ' Текст SQL запроса. 
	Set DBrecords=DBConn.Execute(SQLstr)
While Not DBrecords.EOF ' Перебираем все записи 
SqRec="select * from cardscla where classif="+Cstr(DBrecords.Fields(0).Value) ' Дополнительное условие отбора (в данном примере проверка на наличие записей)
set SdbRec=DBConn.Execute(SqRec)
if not SdbRec.EOF then 'Если записи есть, продолжаем собирать текст HTML разметки, уже с данными из запроса
HTMLstr=HTMLstr+"<tr><td><input type='checkbox' id=C"+Cstr(DBrecords.Fields(0).Value)+">"+Cstr(DBrecords.Fields(0).Value)+"</td>"+"<td>"+Cstr(DBrecords.Fields(2).Value)+"</td></tr>"+vbcr
 end if ' Каждому чекбоксу присваивается свой ID состоящий из буквы С и номера записи. 
  DBrecords.MoveNext	
Wend
HTMLstr=HTMLstr+"</table>"
Document.Write (HTMLstr) ' Пишем документ в окно приложения
document.title = "Выберите группы для загрузки" ' Изменение заголовка окна
 End sub ' Далее остальной текст страницы
</script>
</head>
<body style="font:normal 8px Verdana;">
</body>
</html>