Hi guys! Me again 
Now i need help to make an Insert Statement, i’m trying with:
insert_query = "INSERT INTO resumoValores (Data, Unidade, Total_Fechamento_SIDG)
values(?,?,?)"
stmt = DBInterface.prepare(cnn, insert_query)
DBInterface.executemany(stmt, [df_pronto.DATA, df_pronto.UNIDADE, df_pronto.Total_Fechamento])
DBInterface.close!(stmt)
---
MethodError: no method matching getconnection(::ODBC.Statement)
Stacktrace:
[1] executemany(stmt::ODBC.Statement, params::Vector{AbstractVector})
I dont know why i’m having this error, i’m connected in a SqlServer using ODBC.
connection_string = "DRIVER="*driver*";PORT=port;SERVER="*server*";PORT=1443;DATABASE="*database*";UID="*username*
";PWD="*password
cnn = ODBC.Connection(connection_string)
Thanks for all help, and sorry about a lot of questions haha.
Your connection string is wrong, it has two PORTs in it and one is the string “port”
also, use interpolation rather than multiple concatenation e.g.
connection_string = "DRIVER=$driver;SERVER=$server;PORT=1443;DATABASE=$database;UID=$username;PWD=$password"
Not only is it easier to read (re-writing it made me spot the port thing) but concatenation creates multiple strings and then joins them, rather than a single string.
If that is the source of the problem, then I suspect DBInterface is giving you the wrong error message, which is worth looking into, I shall do that when I get to work.
You can also test for the existence of the function yourself, and see the result
DBInterface.getconnection(stmt)
OK, it’s not the connection string.
calling the function by itself
julia> DBInterface.getconnection(stmt)
ERROR: MethodError: no method matching getconnection(::ODBC.Statement)
Stacktrace:
[1] top-level scope
@ REPL[22]:
and when I went to report it …
https://github.com/JuliaDatabases/DBInterface.jl/issues/43
as a workaround, you can define this yourself
DBInterface.getconnection(stmt::ODBC.Statement) = stmt.dsn
although in my case it turned into another problem
julia> DBInterface.executemany(stmt, [["a", 1], ["b", 2]])
ERROR: 22018: [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Conversion failed when converting the varchar value 'b' to data type int.
Stacktrace:
and if I changed it to
julia> DBInterface.executemany(stmt, [["a", 1], [1, 2]])
The insert completed with 1 inserted as a string into the first column
but that’s something else to find
I created a PR to fix it in ODBC
https://github.com/JuliaDatabases/ODBC.jl/pull/336
Thx @lawless-m for the help!
I changed my code and did the bulk insert with a for loop:
insert_query = "INSERT INTO resumoValores (Data, Unidade, Total_Fechamento_SIDG)
values(?,?,?)"
stmt = DBInterface.prepare(cnn, insert_query)
@simd for i in eachrow(df_pronto)
DBInterface.execute(stmt, (i.DATA, i.UNIDADE, i.Total_Fechamento))
end
DBInterface.close!(stmt)
But now i have another problem, look the names in the VsCode print:
unique(filter(x -> x.UNIDADE =="TERMINAL JARDIM ÂNGELA" || x.UNIDADE == "TERMINAL SACOMÃ" || x.UNIDADE =="TERMINAL GRAJAÚ" , df_pronto),:UNIDADE)
DATA UNIDADE total_fechamento_SPTRANS Total_Fechamento
Date String Float64 Float64
1 2021-02-01 TERMINAL GRAJAÚ 38728.6 38728.6
2 2021-02-01 TERMINAL JARDIM ÂNGELA 33710.7 33710.7
3 2021-02-01 TERMINAL SACOMÃ 12543.1 11066.2
and now look them in the SQLServer Database
Unidade
TERMINAL SACOMÃ
TERMINAL JARDIM ÂNGELA
TERMINAL GRAJAÚ - RECEBEDORIA
TERMINAL SACOMÃ - RECEBEDORIA
TERMINAL GRAJAÚ
I used the for loop to insert but the names are strange, why this occurs?
Thx for Help!
I guess you need to set the “;String Types=Unicode” in the Connection String
https://www.devart.com/odbc/sqlserver/docs/connection_options.htm
(I have not tried this, it might be incorrect advice)