Pergunta

Estou usando este banco de dados em que a data colomn é um valor numérico em vez de um valor de data.

Sim, eu sei que posso mudar isso com um mouseclick, mas todos os aplicativos usando esse banco de dados foram feitos por um dos meus antecessores (e todos depois que ele simplesmente o ignoraram e construíram). Portanto, se eu o alterar até o momento, muitos aplicativos AF falhariam. :(

Bem, estou fazendo uma visão geral desse banco de dados, variando de uma data especificada a outra. Tentei usar uma lista suspensa, mas como você pode dizer, mil opções em uma lista são terrivelmente inconvenientes, até feias.

Eu prefiro ter pequenos InputFields para o dia - mês - ano, mas vem valer na data numérica no banco de dados. Eu teria que calcular a data de volta ao valor numérico de alguma forma ...

Deve haver uma solução fácil para isso. Certo?



Estou usando ASP (VBScript) para o aplicativo, é para um intraweb e tenho um banco de dados de acesso.

Foi útil?

Solução

O acesso será convertido em um número para você, como foi mencionado, as datas são armazenadas como números.

Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("TestTable")
rs.AddNew
rs!NumberDate = Now()  'Value stored, eg, 39791.4749074074 '
rs.Update

rs.MoveLast

'To show that it converts back to the correct date / time '
Debug.Print Format(rs!NumberDate, "dd/mm/yyyy hh:nn:ss")

Editar Re Comentário: Aqui está um pequeno teste que mostra as datas retornadas:

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

strFile = "C:\Docs\LTD.mdb"

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & strFile & ";" & _
       "Persist Security Info=False"

strSQL = "SELECT NumberDate FROM TestTable WHERE NumberDate= #2008/12/7#"

rs.Open strSQL, cn, 3, 3
rs.MoveLast

MsgBox rs.RecordCount

Outras dicas

Certo .. então foi muito fácil. Aceitarei a resposta de Remou, o Where numberdate = # 2008/12/7 # faz o truque.

Mas, para abordar o assunto, aqui está a solução para minhas próprias funções:

Function DateToNumeric(dayDate)
    DateToNumeric=DateDiff("d","31/12/1899",dayDate) +1 //yup
End Function

    response.Write("9/12/2008, should be 39791.<br /><br />")
    response.write("DateToNumeric('9/12/2008') gives: " &DateToNumeric("9/12/2008")& "<br />")
    response.write("CDate('39791') gives: " &CDate(39791)&"<br /><br />")
    response.write("BECAUSE CDate('1') gives: " &CDate(1))

resultado:

9/12/2008, deve ser 39791.

Datetonumeric ('9/12/2008') dá: 39791
CDATE ('39791') dá: 9-12-2008

Porque o cdate ('1') dá: 31-12-1899

Isso fez isso para que 31/12/1899 não seja o dia zero, mas o primeiro dia. :/

Obrigado rapazes!

As lojas de acesso datam internamente como um número de ponto flutuante (número de dias desde 31.12.1899 ou algo assim), você tentou usar o CDATE () para converter o número em uma data? Você deve poder consultar o uso entre então.

Outra possibilidade é que a data seja armazenada numericamente, mas não convertida (ou seja, 31121899); neste caso, você poderá obter as partes da data apropriada usando formato () ou dia () ou mês () ou ano ().

Espero que isto ajude.

Infelizmente, a data é armazenada como 39791-> 9 de dezembro de 2008. O número do ponto flutuante.

Eu tenho uma função JavaScript (também escrita pelo mesmo antecessor) que converte a data em um formato legível. É o contrário, o caminho de volta para esse valor numérico que me confunde.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top