Qual armazenamento você usa?

1 Comment

  • Josue - 13 years ago

    ERRO NO RETORNO DA PESQUISA:
    PROBLEMA: CONSULTAR EM CAMPO NUMÉRICO TIPO TINYINT (1 byte,podendo variar de -128 a 127) RETORNA VALORES LOGICOS .T. OU .F.

    OBSERVAÇÕES QUANTO AO BANCO DE DADOS MYSQL
    =========================================
    Como uma extensão do padrão ANSI/ISO SQL92, MySQL também suporta os tipos integrais TINYINT, MEDIUMINT, e BIGINT como listado nas tabelas abaixo. Para uma portabilidade máxima, códigos que requerem armazenamento de valores de dados numéricos aproximados usam FLOAT ou DOUBLE PRECISION sem especificação de precisão ou de numeros decimais.
    Conversões que ocorrem devido a ajustes são relatados como ``avisos'' para ALTER TABLE, LOAD DATA INFILE, UPDATE, e instruções INSERT multi-registros.

    TABELA DE TIPOS INTEGRAIS SUPORTADOS PELO MySQL
    Tipo, Bytes, De, Até
    TINYINT ,1, -128, 127
    SMALLINT, 2, -32768, 32767
    MEDIUMINT, 3, -8388608, 8388607
    INT, 4, -2147483648, 2147483647
    BIGINT, 8, -9223372036854775808, 9223372036854775807

    PROBLEMA: CONSULTAR EM CAMPO NUMÉRICO TIPO TINYINT (1 byte,podendo variar de -128 a 127) RETORNA VALORES LOGICOS .T. OU .F.
    Ocorre quando tento capturar um valor de um campo TINYINT para uma variável em uma pesquisa, do tipo cCodigo := Str( oRow:fieldGet(1) ). Segue a pesquisa completa abaixo:

    *Pesquisar/Selecionar registro em Determinada Tabela e Preencher as respectivas variaveis
    Local oQuery
    Local cQuery := ""

    * preencher a variavel cQuery com os dados de pesquisa
    cQuery := "Select * From NOMES WHERE CODIGO = " + AllTrim( pCodigo )

    * Realizar a pesquisa: capturar o resultado na variavel oQuery
    oQuery := oServer:Query( cQuery )

    * Verifica se ocorreu algum erro na Conexão
    If oQuery:NetErr()
    MsgInfo("Erro de Pesquisa (Operação) (Select): " + oQuery:Error())
    Return Nil
    Endif

    * Preencher as variaveis
    oRow := oQuery:GetRow(1)
    cCodigo := Str( oRow:fieldGet(1) )
    cNome := AllTrim( oRow:fieldGet(2) )
    cEndereco := AllTrim( oRow:fieldGet(3) )
    cEMail := AllTrim( oRow:fieldGet(4) )

    * Eliminar Objeto Query
    oQuery:Destroy()

    Quando tento ler o conteudo da variável como tipo numérico, então retorna um erro em tempo de execução. Foi necessário utilizar a função valtype() para descobrir que o tipo de variável retornada era do tipo Lógico. Isto inviabiliza os trabalhos, tendo em vista que valores armazenados do tipo TINYINT sever para guardar configurações do tipos 1=alto 2=medio, 3=baixo, 4=baixíssimo, 5=inexistente. Como resposta vem a expressão lógica .t. ou .f., então fica prejudicado totalmente a informação retornada.

    PERGUNTA: 1) Este tipo de erro já foi detectado anteriormente ???
    2) Existe algum processo que devo acrescentar/corrigir para que a pesquisa retorne campo tipo Numérico e não do tipo Lógico.
    3) Falta algum detalhe para que eu possa capturar o valor correto.
    Se esta resposta for possitiva, favor retornar este e-mail, pelo fato de que pode ser útil para toda a comunidade.
    Um grande abraço.

Leave a Comment

0/4000 chars


Submit Comment