RESUMO: Não sei qual tipo de dado VBA (Data, String ou ?) armazenar a data VBA que será passada ao SQL Server para inserção por meio da definição de parâmetro ADO. Quando o parâmetro ADO JDate é estabelecido, ele pede um tipo de dado. Usei adDate, mas tenho problemas.
Minha conexão VB/ADO db está funcionando, posso passar SQL baseado em texto para inserções e leituras com sucesso. No entanto, por vários motivos, preciso alternar uma INSERT
consulta para usar parâmetros ADO em vez de apenas SQL baseado em texto.
Para testes, simplifiquei tudo isso em uma única tabela, com duas colunas simples para testes.
Tabela do SQL Server: testJournal
- tem 2 colunas: City nchar(100) not null
e JDate date not null
. Comecei a testar o código abaixo com o mesmo nome de tabela contendo apenas a City
coluna. Funcionou perfeitamente, ou seja, cada execução inseriu uma linha no SQL Server. Depois que eu excluo e recrio manualmente a mesma tabela para incluir JDate
e executar o código VBA para inserir, recebo um erro de que um Null não pode ser inserido em JDate. ou seja, a data VBA que estou fornecendo ao parâmetro ADO nunca está chegando ao SQL Server por meio do parâmetro ADO.
Alguns dos meus códigos VBA:
Dim TDate As Date
TDate = "2025-03-07"
Call mDataBase.Open("Provider=SQLOLEDB;Initial Catalog=" & pCatalog & ";Data Source=xxxxxxxxxxxxxxxx" & pServer & ";Integrated Security=SSPI")
mCmd.ActiveConnection = mDataBase
With mCmd
.Parameters.Append .CreateParameter("City", adLongVarChar, adParamInput, 100, "Beaumont")
.Parameters.Append .CreateParameter("JDate", adDate, adParamInput, TDate)
End With
.CommandText = "INSERT INTO testJournal ( City, JDate ) VALUES(?,?)"
Set mRS = mCmd.Execute
Quando a última linha acima é executada, recebo um erro de que a coluna JDate do SQL Server não permite nulos. Inspecionei o mCmd no lado do VB durante o tempo de execução. A propriedade de valor para "City" é "Beaumont". No entanto, a propriedade de valor para "JDate" é nula.
Que combinação de variáveis VBA e/ou tipos de dados de parâmetros VBA ADO devo usar para passar com sucesso minha data VBA para uma coluna de data do SQL Server?