Bug - Sql Server - Campo Datetime como PK

Descrição do problema: Não consigo editar um registro cuja PK seja um campo datetime no sql server.

Passo a passo do problema:
Utilizando SQL Server:
Crie uma tabela com um campo Datetime como PK e outro campo qlq ( pode ser um text por exemplo )

create table teste_bug_datetime (
data datetime primary key,
nome varchar(50)  );

Em cima dessa tabela crie um form/cons padrão do SC.

Você conseguirá inserir registros, e caso você faça uma inserção manual ( sem os milisegundos ) você consegue editar, agora se você inserir uma data com getdate() por exemplo, vai gravar os milisegundos no campo e o SC não consegue mais encontrar esse registro, quando tenta editar aparece o erro: Erro ao alterar a base de dados - Registro Inexistente.

Fui informado que esse bug já tem mais de 9 anos :roll_eyes:

Anexos relacionados ao problema:
Segue print do erro

Não é um bug é uma chave primária que foi feita na Tabela do seu Banco de Dados.

Pelo SC a chave primária não pode ser alterada, só manualmente pelo seu SGDB ou criando um método controle no SC específico para isso usando SQL.

Post antigo sobre isso:
Permitir alteração em campos de chave primária - Formulários - Scriptcase

Desculpe @Jailton acho que não ficou muito claro minha explicação…

Em nenhum momento tentei atualizar a PK, mas sim o outro campo (seja ele qual for) !

Caso a PK não tenha os milisegundos ( esteja dessa forma => .000 ) não tem problema nenhum =)

O problema ocorre apenas quando a PK em questão TEM os milisegundos! Ficou claro agora o Bug?

se fizer um update manualmente numa chave existente, consegue sem problemas?

em modo debug o que mostrar ao tentar alterar?

@InfinitusWeb por “update manual” você quer dizer via banco!? Se sim, atualizo normal, tanto a PK quanto o outro campo!!!

Em modo debug ele mostra que ele tenta atualizar o campo DESCONSIDERANDO os milisegundos…

Em um exemplo seria algo do tipo

você tendo um registro assim => ‘1999-11-11 12:34:00.123’ ‘teste 1’
no update ele vai fazer mais ou menos isso => update… where data = ‘1999-11-11 12:34:00.000

Ficou claro dessa forma!?

daria para copiar aqui o update que o SC está tentando realizar?

Ai estão os dois exemplos, o que não da erro, e o que da erro. Claramente o problema está nos milisegundos que o scritpcase está desconsiderando.

esse convert é o SC quem coloca automáticamente?

Exato!

Veja Haroldo, nós temos uma solução alternativa aqui para esse problema, acontece que é BUG do SC, criei um tabela de teste só pra isso… reproduzi o erro todas as vezes, por isso achei por bem reportar nos canais indicados pela NetMake.

1 Curtida

Prezado @RobertoSanches , favor realizar uma configuração que precisa ser habilitada nas configurações do campo campo “Data e hora”.

Favor realizar o seguinte procedimento:

  1. Acesse o campo data na interface.
  2. Desmarque a opção “Usar configurações regionais”.
  3. Com essa opção desmarcada, a interface exibirá o campo “Decimais dos segundos”, logo abaixo da opção “Mostrar Combo ano e mês”.
  4. O default será 0, só alterar para 3.

Salve e execute.

1 Curtida