terça-feira, 4 de novembro de 2008

VB6 & Oracle - Inserindo Dados

O Modelo Cliente/Servidor caracteriza-se por centralizar grande parte dos processos de um sistema de informação no SGBD. Esses processos são programados em forma de UDFs, Procedures e Triggers.
Neste artigo veremos como criar um procedure no Oracle, para em seguida desenvolvermos um aplicativo em VB6 o qual ira chamar a execução da mesma.

Iniciaremos então pelo banco de dados, veja abaixo o código da procedure:



Back-End Script de Banco de Dados
-- Criando a tabela para testar insert apartir de um front-end vb6
CREATE TABLE TESTEGM (
  COD VARCHAR(3),
  DESCRICAO VARCHAR(10)

);

-- Procedimento para insert - exemplo de arquitetura cliente/servidor
CREATE OR REPLACE PROCEDURE PROC_TESTE_GM (
                                   PCOD IN VARCHAR,
                                   PDESCRICAO IN VARCHAR,
                                   PAUX_RETORNO OUT VARCHAR)
AS
 BEGIN
   INSERT INTO TESTEGM
    (COD, DESCRICAO) VALUES    (PCOD, PDESCRICAO);
    COMMIT;
    PAUX_retorno := 'OPERAÇÃO REALIZADA COM SUCESSO!';
 EXCEPTION
   WHEN OTHERS THEN
     PAUX_retorno := SQLERRM || ' INSERT DISTRATO ERRO.' ; -- RETORNA A MENSAGEM COM CÓDIGO E DESCRIÇÃO DO ERRO ORACLE
     ROLLBACK;

END;


Front-end Código do lado Cliente

Neste exemplo, aproveito para demostrar um pouco de modularização. Criei duas funcionalidades, uma que se preocupa com a conexão com o banco, "GetConnectionCRUD". Essa "Sub" retorna um "ADO Command" conectado e configurado como "procedure". Uma segunda rotina, "BuildParams", monta os parâmetros do "ADO Command" (o qual recebe como parâmetro) dinamicamente e atribui valor para os mesmos.

Private Sub BuildParams(ByRef obj As ADODB.Command)
 'Cria o parâmetro de saida no commad
 objInsertCommandAux.Parameters.Append objInsertCommandAux.CreateParameter("PAUX_RETORNO", adBSTR, adParamOutput)
 'Cria os parâmetros de entrada nos commads já passando o valor para eles
 obj.Parameters.Append objInsertCommandAux.CreateParameter("PCOD", adBSTR, adParamInput, , Text1.Text)
 obj.Parameters.Append objInsertCommandAux.CreateParameter("PDESCRICAO", adBSTR, adParamInput, , Text2.Text)

End Sub

Private Function GetConnectionCRUD() As ADODB.Command
 ' Retorna um objeto (um activeX) ja conectado ao banco
 ' Dessa forma podemos de forma coesa, isolada definir uma conexão com o banco
 Dim objCommandAux As New ADODB.Command
 Dim MyConn  As New ADODB.Connection

 MyConn.Open "Provider=MSDAORA;Data Source=desvbancoteste;User ID=sistema;Password=landjah;"
 objCommandAux.ActiveConnection = MyConn
 objCommandAux.CommandType = adCmdStoredProc
 Set GetConnectionCRUD = objCommandAux

End Function


Em seguinda codificaremos no evento OnClick de um botão a execução dos procedimentos, "Caixa Preta", descritos acima.

Dim objInsertCommandAux As New ADODB.Command
Dim AuxRetorno As String
' Para trabalar desconectado do banco ...
Dim rsZN As New ADODB.Recordset

Private Sub Command1_Click()

 Set objInsertCommandAux = GetConnectionCRUD()
 ' Define que o command criado executará proc de Insert
 objInsertCommandAux.CommandText = "PROC_TESTE_GM"

  
 BuildParams objInsertCommandAux

 '*** Executando a stored procedure
 objInsertCommandAux.Execute

 MsgBox (objInsertCommandAux("PAUX_RETORNO"))

 'Destroi o objeto
 Set objInsertCommandAux = Nothing

End Sub


3 comentários:

  1. A parte do código em VB está sem quebra de linha.

    ResponderExcluir
  2. Tivemos um problema no css!!!

    ResponderExcluir
  3. Prezado leitor anônimo do Estação ZN,
    Grato pela sua participação!
    O problema não é a quebra da linha, o syntax highlight do VB não funcionou. Ainda não tivemos tempo para esse probl...
    []'s

    ResponderExcluir

 
BlogBlogs.Com.Br