Autohotkey
February 11, 2023

Как создать SQL-запрос в Access

🌰 Создаём новый запрос сразу в режиме SQL с помощью скрипта на AHK

Если Вы решили создать новый запрос в Access, то нажимаете «Создание», «Конструктор запросов», Закрываете окошко с выбором таблиц, и только потом кнопку «SQL». Как можно ускорить этот процесс, чтобы сразу перейти к вводу SQL-кода? Нам поможет следующий скрипт на AutoHotKey, основанный на макросе со StackOverflow:

#Requires AutoHotkey v2+
#HotIf WinActive("ahk_class OMain") ; Когда активно окно Access
^sc31:: AccessNewQuery() ; Новый SQL-запрос по ctrl+N	

AccessNewQuery(*) {
    try {
        app := ComObjActive("Access.Application") ; берём access...
    } catch {
        Tooltip('AccessNewQuery FAIL: ComObjActive("Access.Application")')
        SetTimer(()=>Tooltip(), 1000)
        Return
    }
    ; Убедимся в том, что база открыта:
    try {
        db := app.CurrentDb
        if (db = "")
            return
    } catch {
        return
    }
    ; Найдём незанятое имя для запроса:
    qName := ""
    Loop 250 {
        if !QueryExists("NewQuery" . A_Index) {
            qName := "NewQuery" . A_Index
            Break
        }
    }
    if !qName
        return
    ; Нашли незанятое имя, создаём новый запрос:
    qdf := db.CreateQueryDef(qName)
    qdf.SQL := "SELECT Date() AS Today;"
    qdf.Close()
    app.DoCmd.OpenQuery(qName, 1) ;1=acViewDesign
    app.DoCmd.RunCommand(184) ;184=acCmdSQLView
    ;app.DoCmd.RunCommand 337 ;337=acCmdDelete ; очистка текста запроса
    ; всё!
    QueryExists(nm) { ; существует ли запрос с таким названием в базе db?
        for qd in db.QueryDefs {
            if qd.Name = nm
                return true
        }
        return false
    }  
}

Сканкод sc31 соответствует клавише N и теперь при нажатии на Ctrl+N будет открываться редактор запросов с текстом SELECT Date() AS Today.
Разумеется, горячую клавишу можно задать любую другую.