Guest PauloR Posted April 18, 2009 at 03:56 PM Report #257503 Posted April 18, 2009 at 03:56 PM 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
Soulsick Posted April 18, 2009 at 07:19 PM Report #257548 Posted April 18, 2009 at 07:19 PM 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 😄
vbtipo Posted April 18, 2009 at 07:32 PM Report #257551 Posted April 18, 2009 at 07:32 PM 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.
Guest PauloR Posted April 18, 2009 at 08:40 PM Report #257560 Posted April 18, 2009 at 08:40 PM 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.
Guest PauloR Posted April 18, 2009 at 08:42 PM Report #257561 Posted April 18, 2009 at 08:42 PM @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
Betovsky Posted April 18, 2009 at 09:09 PM Report #257568 Posted April 18, 2009 at 09:09 PM 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
Guest PauloR Posted April 18, 2009 at 09:46 PM Report #257576 Posted April 18, 2009 at 09:46 PM 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 " 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.
José Lopes Posted April 19, 2009 at 01:47 AM Report #257589 Posted April 19, 2009 at 01:47 AM se estas a usar o acess.. os campos de data normalmente tem que ter este formato: #data# Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
Guest PauloR Posted April 19, 2009 at 02:02 AM Report #257590 Posted April 19, 2009 at 02:02 AM 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
Guest PauloR Posted April 19, 2009 at 01:23 PM Report #257611 Posted April 19, 2009 at 01:23 PM ... 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now