Criar Estrutura do Histórico via Script

Existe a possibilidade de enviar um comando para criar a estrutura da tabela via script?
Eu estou definindo o nome da tabela baseado em uma condição e após essa definição quero enviar o comando para criar a tabela, mas via script. Existe essa possibilidade?

Olhei a documentação e não tem nada explicito sobre.


Sim, é possível. Um exemplo simples para criar uma tabela em uma banco de dados SQL Express.

Sub CreateTableIfNotExists()

    Dim tableName
    tableName = "SampleTable"

    Dim query
    Set query = Application.GetObject("Data.Query")

    Dim sqlQuery
    sqlQuery = _
        "IF NOT EXISTS ( " & _
        "    SELECT 1 " & _
        "    FROM sys.tables " & _
        "    WHERE name = '" & tableName & "' " & _
        ") " & _
        "BEGIN " & _
        "    CREATE TABLE " & tableName & " ( " & _
        "        Id INT PRIMARY KEY, " & _
        "        Name NVARCHAR(100), " & _
        "        CreatedAt DATETIME " & _
        "    ); " & _
        "END"

    query.SQL = sqlQuery
    query.Execute

End Sub

Desculpa, não fui claro na minha dúvida.

Eu tenho um objeto HIST e quero gerar a estrutura dessa tabela. Quando o E3 inicia ele dispara a rotina para criar a estrutura da tabela, mas quero controlar o momento de criar a tabela.

Pois preciso fazer uma série de verificações para depois disparar o CREATE TABLE do table.

Não encontrei uma maneira de criar um objeto da classe DB.Hist dinâmicamente, porém, você pode criar um objeto desta classe sem nenhum field configurado, assim, o Elipse não irá criar nenhuma tabela na inicialização. Então, você pode manipular este objeto por script.

    Const fdInteger = 1
    
    Dim hist
    Set hist = Nothing
    On Error Resume Next
    Set hist = Application.GetObject("Hist")
    On Error Goto 0
    
    If hist Is Nothing Then Exit Sub
    
    ' Desativar o objeto antes de editar
    hist.Deactivate()
    
    ' ------------------------
    ' Define o nome da tabela
    ' ------------------------
    hist.TableName = "TableName"
    
    ' ------------------------
    ' Criar os campos
    ' ------------------------
    Dim sourceLink
    sourceLink = 42 ' Constante neste exemplo (usar link para tag de interesse)
    
    hist.Item("Fields").AddField "AnswerToEverything", sourceLink, fdInteger
    
    ' ------------------------
    ' Definir demais propriedades
    ' ------------------------
    hist.ScanTime = 5000
    
    
    ' Ativar o objeto, neste momento a tabela será criada
    hist.Activate()