Приаттачил подсистему со всем необходимым. Скриншот прилагается. Для отработки примера, естественно, необходимо создать ODBC-соединение и подставить его параметры в процедуру Init.

А вот полный текст примера:
## Код:
```
MODULE TestSql;

   IMPORT 
      SqlDB, StdTables, Dialog, StdLog;

   TYPE
      (* структура для чтения результата запроса должна иметь экспортированные поля *)
      Rec = RECORD
         name*: ARRAY 50 OF CHAR
      END;
      
   VAR
      db: SqlDB.Database;  (* глобальный указатель на БД *)
      table*: StdTables.Table; (* интерактор для таблицы *)

   PROCEDURE Init (OUT d: SqlDB.Database; IN id, password, datasource: Dialog.String);
      VAR res: INTEGER;
   BEGIN
      SqlDB.OpenDatabase('SqlOdbc3', id, password, datasource, SqlDB.async, SqlDB.showErrors, d, res);
      IF d # NIL THEN
            (* Пример инициализации SQL-сеанса для сервера БД MySQL 5.0.xx *)
            d.Exec("SET NAMES 'cp1251'");
            d.Exec("SET CHARACTER SET cp1251");
            d.Exec("SET SQL_MODE='REAL_AS_FLOAT,PIPES_AS_CONCAT,IGNORE_SPACE'");
      END;
   END Init;

   (*Сервисная процедура*)
   PROCEDURE Query (db: SqlDB.Database; IN statement : ARRAY OF CHAR; OUT t: SqlDB.Table);
   BEGIN
      ASSERT(db#NIL, 21);
      t := db.NewTable();
      t.Exec(statement);
   END Query;
   
   PROCEDURE Do*;
      VAR rows, res : INTEGER; t: SqlDB.Table; i: INTEGER; rec: Rec;
   BEGIN
         IF db # NIL THEN
            Query(db, "SELECT name FROM ref_cities", t);
            (* Обработка результата запроса *)
            IF t.rows > 0 THEN
               table.SetSize(t.rows, 1); table.SetLabel(0, 'Город'); (* Инициализация интерактора *)
               FOR i := 0 TO t.rows-1 DO
                  t.Read(i, rec);
                  table.SetItem(i, 0, rec.name$)
               END;
               Dialog.Update(table)
            END
         END
   END Do;
BEGIN
   Init(db, 'user', 'password', 'odbcSource');
END TestSql.

"TestSql.Do; StdCmds.OpenAuxDialog('Test\Rsrc\Sql.odc', 'SQL')"
```
