Ir para conteúdo
Fórum Script Brasil
  • 0

Insert com Stored Procedure


Alex Mauricio

Pergunta

Boa tarde grupo.

Estou com uma nova aplicação e como o volume pode ser grande eu gostaria de fazer com Stored Procedure.

Estou fazendo um teste apenas...

Criei a seguinte Stored Procedure (que está funcionando) no MySQL conforme abaixo (se tiver como melhorar ela pode falar também):

CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_Inserir_Usuario_01`(V_COD_USUARIO INT(11), V_NOME_USUARIO VARCHAR(40), V_NOME_LOGIN VARCHAR(10), V_SENHA_LOGIN VARCHAR(10))
BEGIN
INSERT INTO tbl_usuario (COD_USUARIO, NOME_USUARIO, NOME_LOGIN, SENHA_LOGIN) values (V_COD_USUARIO, V_NOME_USUARIO, V_NOME_LOGIN, V_SENHA_LOGIN);
END;
Agora preciso que a aplicação VB 6.0 dispare a Stored com os valores desejados (estou usando ADO). Segue abaixo o códgio:
Private Sub cmdGravar_Click()
    Dim ssql            As String
    
    cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdStoredProc

    
    'stored procedure inserindo usuario
    ssql = "{call SP_Inserir_Usuario_01(?,?,?,?)}"
    
    'validação dos campos e montagem da query
    executar(0) = Trim(txtCodigo.Text)
    
    If txtNomeLogin = Empty Then
        MsgBox "erro nome do login"
    Else
        executar(1) = Trim(txtNomeLogin.Text)
    End If
    
    If Trim(txtNomeUsuario.Text) = Empty And Trim(Len(txtNomeUsuario.Text)) < 30 Then
        MsgBox "nome de usuario vazio ou menor que 30 caracteres"
    Else
        executar(2) = Trim(txtNomeUsuario.Text)
    End If
    
    If Trim(txtSenhaUsuario.Text) = Empty Or Trim(txtConfirmaSenhaUsuario.Text) = Empty Then
        MsgBox "senha de usuario ou confirmação de senha de usuario vazio"
    End If
    
    If Trim(txtSenhaUsuario.Text) <> Trim(txtConfirmaSenhaUsuario.Text) Then
        MsgBox "Senhas diferentes"
    Else
        executar(3) = Trim(txtSenhaUsuario.Text)
    End If
    
End Sub
Minhas variáveis de conexão estão em um módulo, e vou postar abaixo:
Option Explicit

Public cnn              As ADODB.Connection
Public cmd              As ADODB.Command
Public rs               As ADODB.Recordset
Public executar         As ADODB.Parameter

Public Function ConectaBanco()
    Set cnn = New ADODB.Connection
    cnn.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=bdnprecibo;USER=root;PASSWORD=root;"
    cnn.CursorLocation = adUseClient
    cnn.Open
End Function

Estou com dificuldades em disparar a Stored. Alguém poderia me ajudar?

Obrigado

Link para o comentário
Compartilhar em outros sites

20 respostass a esta questão

Posts Recomendados

  • 0

porque você abre e fecha chave na hora de chamar a procedure?? é alugma sintaxe do mysql??

pelo menos quando eu chamava procedure do sql, eu fazia simplesmente assim:

ssql = "SP_Inserir_Usuario_01(" & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "')"

Link para o comentário
Compartilhar em outros sites

  • 0
porque você abre e fecha chave na hora de chamar a procedure?? é alugma sintaxe do mysql??

pelo menos quando eu chamava procedure do sql, eu fazia simplesmente assim:

ssql = "SP_Inserir_Usuario_01(" & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "')"
não sei porque da chave... peguei um modelo e to tentando aplicar pode ser assim também... neste caso agora... como executo ela no final
Private Sub cmdGravar_Click()
    Dim ssql            As String
    
    cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdStoredProc

    
    'stored procedure inserindo usuario
    'ssql = "{call SP_Inserir_Usuario_01(?,?,?,?)}"
    ssql = "SP_Inserir_Usuario_01(" & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "')"
    
    'validação dos campos e montagem da query
    executar(0) = Trim(txtCodigo.Text)
    
    If txtNomeLogin = Empty Then
        MsgBox "erro nome do login"
    Else
        executar(1) = Trim(txtNomeLogin.Text)
    End If
    
    If Trim(txtNomeUsuario.Text) = Empty And Trim(Len(txtNomeUsuario.Text)) < 30 Then
        MsgBox "nome de usuario vazio ou menor que 30 caracteres"
    Else
        executar(2) = Trim(txtNomeUsuario.Text)
    End If
    
    If Trim(txtSenhaUsuario.Text) = Empty Or Trim(txtConfirmaSenhaUsuario.Text) = Empty Then
        MsgBox "senha de usuario ou confirmação de senha de usuario vazio"
    End If
    
    If Trim(txtSenhaUsuario.Text) <> Trim(txtConfirmaSenhaUsuario.Text) Then
        MsgBox "Senhas diferentes"
    Else
        executar(3) = Trim(txtSenhaUsuario.Text)
    End If
    

    
    Set ssql = cmd.Execute
    
End Sub

O erro passa a ser:

Compile error:

Object required

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

mas você tem q por esse codiog q eu passei depois de preencher os executar() ne.

senao você vai tentar inserir valroes em branco. e vai dar erro naquele q é numerico.

mas pra executar, acho q é so isso:

cmd.Execute ssql

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0
mas você tem q por esse codiog q eu passei depois de preencher os executar() ne.

senao você vai tentar inserir valroes em branco. e vai dar erro naquele q é numerico.

mas pra executar, acho q é so isso:

cmd.Execute ssql

é mestre kuroi...

não consegui captar sua mensgem...

passei o código para depos que preenchi todos os executar acertei o cmd.execute ssql porém continua dando errado.

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

mas qual a mensagem do erro??

tente essa opcoes:

- tire o parenteses da query, faca assim:

ssql = "SP_Inserir_Usuario_01 " & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "'"
- para executar, faca assim:
cnn.Execute ssql

se der algum erro, poste ai a mensagem q ele da.

de qualquer modo, aqui nesse link: http://authors.aspalliance.com/stevesmith/...cles/sprocs.asp tem varios exemplos de como executar procedures (é pra asp mas vai servir no visual basic).

so fico pensando se pode ter alguma diferenca com o mysql, mas não acho q seja o caso.

Link para o comentário
Compartilhar em outros sites

  • 0
mas qual a mensagem do erro??

tente essa opcoes:

- tire o parenteses da query, faca assim:

ssql = "SP_Inserir_Usuario_01 " & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "'"
- para executar, faca assim:
cnn.Execute ssql

se der algum erro, poste ai a mensagem q ele da.

de qualquer modo, aqui nesse link: http://authors.aspalliance.com/stevesmith/...cles/sprocs.asp tem varios exemplos de como executar procedures (é pra asp mas vai servir no visual basic).

so fico pensando se pode ter alguma diferenca com o mysql, mas não acho q seja o caso.

tirei os parenteses...

e da a mensagem run-time error '91':

Object variable or with block variable not set

mas sempre aponta o erro para o executar(0)

é isso que não estou entendendo.

Link para o comentário
Compartilhar em outros sites

  • 0
o array executar esta declarado??

tava declarado o executar mas não como array... agora já acertei...

porém agora está dando outro erro de conexão (embora já passou por login e pegou ultimo código e pra isso usou a conexão e funcionou) conforme abaixo.

run-time error '-2147217900 (80040e14)':

[mysql][odbc 5.1 driver] etc etc

Link para o comentário
Compartilhar em outros sites

  • 0

etc etc??

alex, isso é sempre importante, nunca esqueca. sem a mensagem do erro exata q aparece na tela, fica dificil pra gente saber aqui do q se trata.

de qualquer modo a conexao ainda ta aberta e td?? você não fecha ela em nenhum lugar??

mas posta ai a mensagem do erro e tb o codigo como ficou depois das alteracoes q você fez.

Link para o comentário
Compartilhar em outros sites

  • 0
etc etc??

alex, isso é sempre importante, nunca esqueca. sem a mensagem do erro exata q aparece na tela, fica dificil pra gente saber aqui do q se trata.

de qualquer modo a conexao ainda ta aberta e td?? você não fecha ela em nenhum lugar??

mas posta ai a mensagem do erro e tb o codigo como ficou depois das alteracoes q você fez.

ok

a conexão continua aberta...

segue o erro completo:

Run-time error '-2147217900 (80040e14)':

[Mysql][ODBC 5.1 driver][mysqld-5.1.41-community]You have an error in your sql syntax; check the manoual that corresponds to your mysql server version for the right syntax to user near "at line 1

agora...

já testei a stored procedure direto no mysql e funcionou

call procedure(valores) e funcionou

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

a então. é erro de sintaxe, não erro de conexao.

alex, tenta o seguinte. poe o cursor la na sua linha do execute e aperte F9. a linha deve ficar vermelha.

então rode o programa normalmente e rode a parte do codigo onde você ta tentando executar essa procedure.

quando chegar na linha do execute, ele deve pausar a execucao.

então, aperte Ctrl + G pra abrir a janela do Immediate. nela, digite:

? ssql

e aperte Enter.

ele vai te mostrar o valor q vai estar dentro de ssql.

então poste aqui o valor q ele mostrar pra gente ver se agora consegue resolver.

Link para o comentário
Compartilhar em outros sites

  • 0
a então. é erro de sintaxe, não erro de conexao.

alex, tenta o seguinte. poe o cursor la na sua linha do execute e aperte F9. a linha deve ficar vermelha.

então rode o programa normalmente e rode a parte do codigo onde você ta tentando executar essa procedure.

quando chegar na linha do execute, ele deve pausar a execucao.

então, aperte Ctrl + G pra abrir a janela do Immediate. nela, digite:

? ssql

e aperte Enter.

ele vai te mostrar o valor q vai estar dentro de ssql.

então poste aqui o valor q ele mostrar pra gente ver se agora consegue resolver.

ai que está o problema... a variavel ssql está vazia...

Link para o comentário
Compartilhar em outros sites

  • 0
serio?? então poste o codigo todo da sua sub como ela esta atualmente.

Private Sub cmdGravar_Click()
    Dim ssql            As String
    Dim executar(0 To 3)         As String
    Set cmd = New ADODB.Command
    Set rs = New ADODB.Recordset
    
    cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdStoredProc

'    cmd.Execute "SP_Inserir_Usuario_01"
    'cmd.CommandText = "SP_Inserir_Usuario_01 " & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "'"
    
    'stored procedure inserindo usuario
    'ssql = "{call SP_Inserir_Usuario_01(?,?,?,?)}"
   
    
    'validação dos campos e montagem da query
    executar(0) = Trim(txtCodigo.Text)
    
    If txtNomeLogin = Empty Then
        MsgBox "erro nome do login"
    Else
        executar(1) = Trim(txtNomeLogin.Text)
    End If
    
    If Trim(txtNomeUsuario.Text) = Empty And Trim(Len(txtNomeUsuario.Text)) < 30 Then
        MsgBox "nome de usuario vazio ou menor que 30 caracteres"
    Else
        executar(2) = Trim(txtNomeUsuario.Text)
    End If
    
    If Trim(txtSenhaUsuario.Text) = Empty Or Trim(txtConfirmaSenhaUsuario.Text) = Empty Then
        MsgBox "senha de usuario ou confirmação de senha de usuario vazio"
    End If
    
    If Trim(txtSenhaUsuario.Text) <> Trim(txtConfirmaSenhaUsuario.Text) Then
        MsgBox "Senhas diferentes"
    Else
        executar(3) = Trim(txtSenhaUsuario.Text)
    End If
    
    'ssql = "SP_Inserir_Usuario_01(" & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "')"
    ssql = "SP_Inserir_Usuario_01 " & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "'"
    
    Set rs = cmd.Execute(ssql)
    
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

alex, isso é impossivel. como q em uma linha você adiciona um texto numa variavel e na linha debaxo ela ta vazia??

acho q você ta fazendo alguma coisa diferente daquilo q eu falei, olha la. a linha onde você deve apertar F9 é onde diz Set rs = cmd.Execute(ssql), la no final da sub:

alex, tenta o seguinte. poe o cursor la na sua linha do execute e aperte F9. a linha deve ficar vermelha.

então rode o programa normalmente (F5) e rode a parte do codigo onde você ta tentando executar essa procedure.

quando chegar na linha do execute, ele deve pausar a execucao.

então, aperte Ctrl + G pra abrir a janela do Immediate. nela, digite:

? ssql

e aperte Enter.

Link para o comentário
Compartilhar em outros sites

  • 0
alex, isso é impossivel. como q em uma linha você adiciona um texto numa variavel e na linha debaxo ela ta vazia??

acho q você ta fazendo alguma coisa diferente daquilo q eu falei, olha la. a linha onde você deve apertar F9 é onde diz Set rs = cmd.Execute(ssql), la no final da sub:

alex, tenta o seguinte. poe o cursor la na sua linha do execute e aperte F9. a linha deve ficar vermelha.

então rode o programa normalmente (F5) e rode a parte do codigo onde você ta tentando executar essa procedure.

quando chegar na linha do execute, ele deve pausar a execucao.

então, aperte Ctrl + G pra abrir a janela do Immediate. nela, digite:

? ssql

e aperte Enter.

pois é kuroi... é isso mesmo (e o q fiz foi conforme você pediu)

inclusive fiz mais....

coloquei breakepont em cada executar, e fui vendo se estava armazenando no array... e está tudo ok...

mas na hora que chega na execução da variável ssql está em branco.

tem alguma outra forma de contato com você para eu mandar o prj completo para testar?

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

descobri aqui, alex.

a sintaxe pra chamada de procedure no mysql tem q ter o call na frente e os parametros tem q ir entre parenteses. faca assim:

ssql = "call SP_Inserir_Usuario_01 (" & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "')"

q deve funcionar.

e era o execute q limpava o ssql, isso não deve acontecer se o comando for executado com sucesso.

veja ai se não funciona agora.

Link para o comentário
Compartilhar em outros sites

  • 0
descobri aqui, alex.

a sintaxe pra chamada de procedure no mysql tem q ter o call na frente e os parametros tem q ir entre parenteses. faca assim:

ssql = "call SP_Inserir_Usuario_01 (" & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "')"
q deve funcionar. e era o execute q limpava o ssql, isso não deve acontecer se o comando for executado com sucesso. veja ai se não funciona agora.
Bom dia Kuroi. Por incrível que pareça ainda está dando o erro. Segue o código abaixo.
Private Sub cmdGravar_Click()
    Dim ssql            As String
    Dim executar(0 To 3)         As String
    Set cmd = New ADODB.Command
    Set rs = New ADODB.Recordset
    
    cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdStoredProc

    executar(0) = Trim(txtCodigo.Text)
    
    If txtNomeLogin = Empty Then
        MsgBox "erro nome do login"
    Else
        executar(1) = Trim(txtNomeLogin.Text)
    End If
    
    If Trim(txtNomeUsuario.Text) = Empty And Trim(Len(txtNomeUsuario.Text)) < 30 Then
        MsgBox "nome de usuario vazio ou menor que 30 caracteres"
    Else
        executar(2) = Trim(txtNomeUsuario.Text)
    End If
    
    If Trim(txtSenhaUsuario.Text) = Empty Or Trim(txtConfirmaSenhaUsuario.Text) = Empty Then
        MsgBox "senha de usuario ou confirmação de senha de usuario vazio"
    End If
    
    If Trim(txtSenhaUsuario.Text) <> Trim(txtConfirmaSenhaUsuario.Text) Then
        MsgBox "Senhas diferentes"
    Else
        executar(3) = Trim(txtSenhaUsuario.Text)
    End If
    
    'ssql = "SP_Inserir_Usuario_01(" & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "')"
    ssql = "call SP_Inserir_Usuario_01 (" & executar(0) & ", '" & executar(1) & "', '" & executar(2) & "', '" & executar(3) & "')"
    
    Set rs = cmd.Execute(ssql)
    
End Sub

E o erro é:

Run-time error '-2147217900 (80040e14)':

[MySQL][ODBC 5.1 Driver][mysqld-5.1.41-community] You have an error in your SQL Syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near" at line 1

Obrigado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...