Jump to content

Comando SQL


Recommended Posts

Posted

Existe alguma possibilidade de ver a instrucção SQL após a atribuição dos parametros para Inserir dados numa tabela?

strSQL = " INSERT INTO nomedatabela (campo1, campo2, campo3, campo4) VALUES (@campo1, @campo2, @campo3, @campo4)"

Dim Conn As New OleDbConnection(connString)

Dim Cmd As New OleDbCommand(strSQL, Conn)

Cmd.Parameters.AddWithValue("@campo1", valor1)

Cmd.Parameters.AddWithValue("@campo2", valor2)

Cmd.Parameters.AddWithValue("@campo3", valor3)

Cmd.Parameters.AddWithValue("@campo4", valor4)

Conn.Open()

msgbox (strSQL)

Cmd.ExecuteNonQuery()

por exemplo:

msgbox (strSQL) com o seguinte resultado:

INSERT INTO nomedatabela (campo1, campo2, campo3, campo4) VALUES (1, "abc", "xzc",100)  ?

Obrigado

Posted

Não sei se existe uma função ou assim que te faça isso. Mas podes ver os valores que passaste por parâmetros assim

Cmd.Parameters(0).Value

em que 0 é o index da colecção de parâmetros.

ou então podes fazer algo do género:

Dim strSQLAfter As String = strSQL
For i As Integer = 0 To Cmd.Parameters.Count - 1
  strSQLAfter = Replace(strSQLAfter, "@campo" & i + 1, Cmd.Parameters(i).Value)
Next
MsgBox(strSQL)
MsgBox(strSQLAfter)

claro que ainda faltam aí uns pequenos ajustes que é o caso de colocar "" se for string e afins. Mas penso que já te ajuda 😄

Posted

Existe alguma possibilidade de ver a instrucção SQL após a atribuição dos parametros para Inserir dados numa tabela?

por exemplo:

msgbox (strSQL) com o seguinte resultado:

INSERT INTO nomedatabela (campo1, campo2, campo3, campo4) VALUES (1, "abc", "xzc",100)  ?

Obrigado

Tens que pôr essa msgbox antes de abrires a conexão...

Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.

Posted

Tens que pôr essa msgbox antes de abrires a conexão...

A variável strsql é sempre igual, assim não interessa onde é colocada a msgbox.

Os parâmetros são atribuídos dentro do "ExecuteNonQuery" não sendo possível ver o SQL final.

Posted

@Soulsick

Obrigado, era isso mesmo 😄

Dado os campo reais serem 18 e não campo1, campo2 etc ... aqui está o código final


            For i As Integer = 0 To Cmd.Parameters.Count - 1
                strSQLAfter = Replace(strSQLAfter, CStr(Cmd.Parameters(i).ParameterName), CStr(Cmd.Parameters(i).Value))
            Next

Obrigado

Posted

Apenas a título de curiosidade.

Qual é o interesse de fazeres isso?

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Posted

Apenas a título de curiosidade.

Qual é o interesse de fazeres isso?

Tinha um erro na instrução SQL que NÃO conseguia descobrir qual era  :wallbash:

" INSERT INTO ... (campos ...) VALUES (0, #18-04-2009 22:02:04#, 'PT000000', '123456', #01-02-2009 22:02:04#, 125,5, '123456'Type,  '987654 0', #18-11-2008 22:02:04#, 130, 1, 'Motivo 1 Motivo 2 ', '2009/00001', '2009/00001'Date, '2009/00001'Value,  1, 'Accoes 1 Accoes 2', 0)"

Estão a bold os erros, agora só falta descobrir o porquê pois os valores dos campos estão bem.

Posted

se estas a usar o acess.. os campos de data normalmente tem que ter este formato: #data#

Eu sei e podes ver isso no SQL final.

O problema eram as strings "type, Date e Value" que apareciam adicionalmente nos campos 7, 14 e 15 e não apareciam durante o "debug" do código.

Já agora fica a explicação pela qual apareciam estas strings adicionais.

campo7: .Parameters.AddWithValue("@DossierType", intDossierType)

campo14: .Parameters.AddWithValue("@InvoiceDate", String.Empty)

campo 15: .Parameters.AddWithValue("@InvoiceValue", "'" & txtVFacturado.Text & "'")

ou seja, o valor máximo para o "ParameterName" é de 8 caracteres incluindo o "@".

Cumpts

Posted

...

ou seja, o valor máximo para o "ParameterName" é de 8 caracteres incluindo o "@".

...

Penso que esta afirmação está errada e o problema seja por estar a usar palavras reservadas (Type, Date, Value)  ?

De qualquer modo o assunto principal está resolvido 😉

Obrigado a todos.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.