Clipper On Line • Ver Tópico - select omitindo campos da tabela em base de dados MySQL

select omitindo campos da tabela em base de dados MySQL

Discussão sobre SQL

Moderador: Moderadores

 

select omitindo campos da tabela em base de dados MySQL

Mensagempor cjp » 04 Jul 2014 01:58

Meus amigos,

Estou enfrentando um problema estranho na consulta de dados na base de dados MySQL: o select está omitindo alguns campos da tabela.

Estou testando assim:

DBUSEAREA( .T.,, "SELECT * FROM ativ", "ativ")
browse()


Estranhamente, alguns dos campos da tabela não são listados.

Já verifiquei, via HeidiSQL, que os campos existem na tabela.

Por que eles não são listados?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor alxsts » 04 Jul 2014 12:31

Olá!

Quantas colunas tem cada registro nesta tabela?

Pergunto isso pois o velho DBU só mostrava 64 colunas, omitindo as demais, caso existissem. Não sei se a função Browse() tem o mesmo comportamento...
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor cjp » 04 Jul 2014 12:39

Não chega nem perto disso. Está com 18 colunas. Veja o query de criação desta tabela:

cQuery:="CREATE TABLE tarefas ("+;
          "USUARIO char(1),"+;
         "NRTAREFA char(10),"+;
         "DTEXIBE date,"+;
          "HREXIBE char(8),"+;
         "DTMAXIMA date,"+;
          "PRIORIDADE int,"+;
          "INCLUIDOR char(15),"+;
        "SOLUC char(1),"+;
        "EXIB char(1),"+;
        "VINCULO char(20),"+;
        "TEMPOESTIM decimal(7,1),"+;
        "TEMPOUSADO decimal(7,1),"+;
        "TEMPOCOMPU decimal(7,1),"+;
        "CAMPO char(1),"+;
          "ASSUNTO char(30),"+;
        "DATA date,"+;
          "HORA char(8),"+;
          "TAREFA mediumtext)"


Também já testei com dbedit(), dá o mesmo problema.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor cjp » 15 Jul 2014 17:04

Meus amigos, será que alguém teria alguma ideia de como resolver isto?

Estou fazendo vários testes, e em vários casos dá problema.

Exemplo:

DBUSEAREA( .T.,, "SELECT data,hora,acao,nrtarefa,assunto,detalhes,prioridade,tempousado,tempocompu,campo,usuario,programa FROM ativ where usuario='"+usus+"'", "athor")
browse()               
dbedit(,,maxcol()-2)


Veja como aparece o browse():

Imagem

O campo Programa, embora não esteja aparecendo na imagem, também está sendo exibido.

Mas notem que não estão aparecendo os campos nrtarefa, assunto e campo.

Agora vejam como aparece o dbedit():

Imagem

Notem que agora aparece o campo assunto, mas ainda faltam os campos nrtarefa e campo.

E o pior é que isso varia. Não está acontecendo sempre assim. Ora aparece um campo, ora outro; ora falta um, ora outro.

Alguém saberia me dizer como resolver isso?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor Itamar M. Lins Jr. » 16 Jul 2014 17:07

Já testou de um por um ?
DBUSEAREA( .T.,, "SELECT data FROM ativ where usuario='"+usus+"'", "athor")
browse()               
dbedit(,,maxcol()-2)

Depois:
DBUSEAREA( .T.,, "SELECT data,hora FROM ativ where usuario='"+usus+"'", "athor")
browse()               
dbedit(,,maxcol()-2)

Depois:
DBUSEAREA( .T.,, "SELECT data,hora,acao FROM ativ where usuario='"+usus+"'", "athor")
browse()               
dbedit(,,maxcol()-2)

Qual é a versão do Harbour que está usando ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor cjp » 29 Jul 2014 23:22

Tenho feito vários testes, mas ainda não consegui chegar a uma conclusão sobre a causa do problema, pois cada hora o resultado é diferente.

A única causa que consegui supor por ora é que, quando o primeiro registro está vazio em determinado campo, ele omite o campo. É possível isso? E, se for realmente este o problema, como contorná-lo?

Uso o Harbour 3.2.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor Itamar M. Lins Jr. » 30 Jul 2014 09:42

Sim.
Deve ser quando retornar Nil
É só trocar por "" se for caractere se for data ctod(""), numerico = 0.00

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor sygecom » 30 Jul 2014 13:04

No meu ponto de vista o correto é nunca usar * , sempre deve passar os nomes dos campos que deseja que retorne, até por a tabela pode mudar depois e mudar a ordem que vai retornar os campos.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7005
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor cjp » 16 Ago 2014 21:26

Sigo fazendo testes e obtendo diversos resultados.

Já notei que não basta preencher o campo com "", pois ainda assim ele omite. Testei colocar "----", o que parece que resolveu.

Também parei de usar *, colocando os nomes dos campos.

Um problema que ainda persiste é que, frequentemente, ele diminui o tamanho do campo. Mesmo na tabela estando, por exemplo, com char(15), ele mostra o campo com apenas 4 caracteres. Se eu dou enter em cima do campo, ele mostra o restante.

Mas será que não tem como o browse() ou o dbedit() mostrar o campo completo da tabela, como faz com o dbf?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor Itamar M. Lins Jr. » 23 Ago 2014 18:17

Ola!
Veja se é isso que eu estou pensando:
Uma tabela com char(40);
Quando vem no browse a coluna vem com tamanhos diferentes tipo, "JOÃO DA SILVA" ou "CONCEIÇÃO DA SILVA" os dois deveriam vim com space() = 40 e vem com tamanhos diferentes.
Se for isso, verificar se ocorre com letras acentuadas ou ocorre por qualquer motivo o tamanho vem "MARIA DA SILVA", "MARCOS DA SILVA" tipo com alltrim() ou rtrim() sendo executado nos tamanhos dos nomes.
Se esse for o problema avisar e criar um exemplo p/ mandar para o Viktor Szakats ou Midaugas...

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor cjp » 23 Ago 2014 18:36

Pelo que eu percebi até agora, ocorre em qualquer situação. Parece que está mesmo com alltrim(). Se o nome tem 10 caracteres, a tabela limita-se a 10, embora na tabela mesmo tenha 40. Se tiver 20, limita-se a 20. Mas pior: às vezes o nome tem 10, e a tabela se limita a 5, omitindo parte do nome. Se dou enter no nome, aparece o restante.

Vou tentar criar uma imagem disso e já posto.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor Itamar M. Lins Jr. » 23 Set 2014 10:33

Será um possível fix ?
Hi

Because FieldName() truncates name to 10 chars, browse doesn't work with ssdodbc
with tables having columnames longer than 10 chars. (and maybe with odher ssds to),
So in attachment is a quick fix of browse.
A better one should be to fix FieldName ;)

regards


Se for aceito, "comitado" no git, avisaremos.

Saudações,
Itamar M .Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor Itamar M. Lins Jr. » 23 Set 2014 11:30

O fix é esse:
Arquivo browse.diff

--- G:/HRB_SVN/SRC-GIT/src/rtl/browse.prg   Mon Apr 07 19:50:32 2014
+++ D:/Test/Hrb/ODBC/SddOdbc/browse.prg   Tue Sep 23 07:04:04 2014
@@ -51,7 +51,7 @@
#include "setcurs.ch"

FUNCTION Browse( nTop, nLeft, nBottom, nRight )
-
+   LOCAL aDbStr,cName
    LOCAL oBrw
    LOCAL lContinue, lAppend, lKeyPressed, lRefresh
    LOCAL n, nOldCursor, nKey
@@ -84,9 +84,11 @@
    oBrw := TBrowseDB( nTop + 2, nLeft + 1, nBottom - 1, nRight - 1 )
    oBrw:HeadSep := " " + hb_UTF8ToStrBox( "═" )
    oBrw:SkipBlock := {| nRecs | Skipped( nRecs, lAppend ) }
-
+   
+   aDbStr:=DbStruct()
    FOR n := 1 TO FCount()
-      oBrw:AddColumn( TBColumnNew( FieldName( n ), FieldBlock( FieldName( n ) ) ) )
+      cName:=aDbStr[n][1]
+      oBrw:AddColumn( TBColumnNew( cName, FieldBlock( cName ) ) )
    NEXT

    IF Eof()

Outro foi esse, já no GIT do Harbour 3.2/3.4
2014-09-23 10:47 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * contrib/rddsql/sqlbase.c
    ! set maximum field size to HB_SYMBOL_NAME_LEN


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor Jairo Maia » 23 Set 2014 11:41

Olá Itamar,

Quanto ao primeiro exemplo publicado no harbour-devel, acho que não se trata de correção de bug. Ele está fazendo apenas uma sugestão para ao invés de usar a função FieldName() que trunca em 10 caracteres o nome do campo, pegar o nome diretamente da matrix retornada pela função DbStruct(). Este recurso é possivel também de forma manual. Veja:
Exemplo postado:
aDbStr:=DbStruct()
FOR n := 1 TO FCount()
oBrw:AddColumn( TBColumnNew( FieldName( n ), FieldBlock( FieldName( n ) ) ) )
cName:=aDbStr[n][1]
oBrw:AddColumn( TBColumnNew( cName, FieldBlock( cName ) ) )
NEXT

Exemplo manual:
aDbStr:=DbStruct()
FOR n := 1 TO FCount()
cName:="Este é o Campo Número: " + Hb_NToS( n )
oBrw:AddColumn( TBColumnNew( cName, FieldBlock( aDbStr[n,1] ) ) )
NEXT


Veja que ele mesmo diz que melhor seria corrigir a função FieldName(): A better one should be to fix FieldName
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

select omitindo campos da tabela em base de dados MySQL

Mensagempor Itamar M. Lins Jr. » 23 Set 2014 11:54

Então não é fix do Przemek ?
Veja que ele mesmo diz que melhor seria corrigir a função FieldName(): A better one should be to fix FieldName

set maximum field size to HB_SYMBOL_NAME_LEN

Se fosse eu, ainda modificaria isso:
aDbStr:=DbStruct()
nCount := fCount()
FOR n := 1 TO nCount
...


Chamar fcount() toda hora em uma tabela muito grande cai a performance.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Próximo



Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro