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

(Resolvido) Dúvida sobre Recordset.Status


Luan Garcia

Pergunta

Bom dia, estou me deparando com um problema:

Tenho um campo único no meu banco Firebird. Obviamente não quero que o usuário insira dois campos com o mesmo conteúdo, o problema é que não estou conseguindo utilizar a propriedade Status do Recordset.

Eis o código:

<%
set strConn = CreateObject("ADODB.Connection")
strConn.ConnectionString = "DRIVER=Firebird/InterBase(r) driver; UID=SYSDBA; PWD=masterkey; DBNAME=D:\WebSites\ClicMercado\Banco\BDCOTACAO.fdb;"

Nome_Prod = Request.Form("txtNome")
Unidade_Prod = Request.Form("txtUnidade")

strConn.Open
set Produtos = CreateObject("ADODB.Recordset")

Produtos.Open "Produtos", strConn, 2, 3, 2 'Configurações para poder dar um update

'Adiciona o produto
Produtos.AddNew
Produtos("Nome") = Nome_Prod
Produtos("Unidade") = Unidade_Prod
Produtos.UpDate
If Produtos.Status = adRecIntegrityViolation then
    Response.Write("Erro")
end if

'Destruindo as conexões
Produtos.Close
strConn.Close
set Produtos = nothing
set strConn = nothing
%>
O campo Nome é único e do jeito que está se eu entro com um nome já existente eu recebo o seguinte erro: Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [ODBC Firebird Driver][Firebird]violation of PRIMARY or UNIQUE KEY constraint "UQ_PRODUTOS" on table "PRODUTOS" Já tentei comparar com o hexadecimal do erro também:
If Produtos.Status =      0x1000 then
    Response.Write("Erro")
end if

Mas dái o erro gerado é outro:

Erro de compilação do Microsoft VBScript (0x800A03F9)

'Then' esperado

If Produtos.Status = 0x1000 then

Já até tentei testar se era diferente de 0 ou adRecOK e nada deu resultado. Por favor se alguém souber me ajudar, ficaria muito grato.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Não é bem isso, mas obrigado por ter tentado ajudar bareta.

Estou conseguindo inserir dados e tudo mais normalmente. É que meu campo é único, não quero que tenha dois nomes iguais. Obviamente quando o recordset tenta inserir um registro com um nome já existente o banco retorna um erro, e esse erro é o que quero tratar. Poderia dar um select e comparar o nome inserido com todos os nomes do banco, mas essa é uma resolução muito simplista. Eu sei que existe a propriedade Status e sei que o código de erro 0x1000 seria exatamente para isso, violação de campos. Porém, não estou conseguindo fazer funcionar essa propriedade e, por isso, estou pedindo a ajuda de vocês.

Link para o comentário
Compartilhar em outros sites

  • 0

mais ai então seria o caso de usar

on error resume next

...
...
...
If Produtos.Status ="0x1000" then
    Response.Write("Erro")
end if
ou ate mesmo
If Err.Number <> 0 Then
    Response.Write("Erro")
end if

Link para o comentário
Compartilhar em outros sites

  • 0

Só voltando aqui pra falar:

Usando

on error resume next
.
.
.
If Err.Number <> 0 Then
    Response.Write("Erro")
end if
Funcionou perfeitamente Já:
on error resume next
If Produtos.Status = "0x1000" Then
    Response.Write("Erro")
end if

Não funcionou.

Muito obrigado à todos que me ajudaram e se alguém souber explicar o porquê do segundo código não ter funcionado ficarei grato.

Edit: Acabei me dando conta que Produtos.Status retronava 4096, número que não constava na documentação.

Obrigado à todos de novo.

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

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...