• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PauloR

Comando SQL

10 mensagens neste tópico

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)  :hmm:

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)  :hmm:

Obrigado

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Soulsick

Obrigado, era isso mesmo :D

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Apenas a título de curiosidade.

Qual é o interesse de fazeres isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

...

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora