select omitindo campos da tabela em base de dados MySQL

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

select omitindo campos da tabela em base de dados MySQL

Mensagem por Jairo Maia »

Olá Itamar,
Itamar M. Lins Jr. escreveu:Então não é fix do Przemek ?
Na minha opinião não. É apenas uma sugestão do Franček Prijatelj pedindo uma correção na função FieldName(). Porém, acho que a função FieldName() reconhece a constante: #define HB_SYMBOL_NAME_LEN <n>, veja o fonte da função FieldName():

Código: Selecionar todos

HB_FUNC( FIELDNAME )
{
   char * szName;
   AREAP pArea = ( AREAP ) hb_rddGetCurrentWorkAreaPointer();
   USHORT uiFields, uiIndex = hb_parni( 1 );

   if( pArea && uiIndex )
   {
      if( SELF_FIELDCOUNT( pArea, &uiFields ) == SUCCESS &&
          uiIndex <= uiFields )
      {
         szName = ( char * ) hb_xgrab( pArea->uiMaxFieldNameLength + 1 );
         szName[ 0 ] = '\0';
         SELF_FIELDNAME( pArea, uiIndex, szName );
         hb_retc_buffer( szName );
         return;
      }
      /* This is not Clipper compatible! - David G. Holm 
       *
      hb_errRT_DBCMD( EG_ARG, EDBCMD_FIELDNAME_BADPARAMETER, NULL, HB_ERR_FUNCNAME );
       */
   }
   hb_retc( NULL );
}
Observe a linha 12: szName = ( char * ) hb_xgrab( pArea->uiMaxFieldNameLength + 1 )
Itamar M. Lins Jr. escreveu:Chamar fcount() toda hora em uma tabela muito grande cai a performance.
Sim! Sempre que uma função a usar num laço pode retornar um valor fixo, também coloco numa variável.
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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

select omitindo campos da tabela em base de dados MySQL

Mensagem por Itamar M. Lins Jr. »

Pois é, nos meus parcos conhecimentos "C"sistico!
Ele viu que o erro era na tal, contrib/rddsql/sqlbase.c. Não um problema da função fieldname.
Tanto é que ele(Franček Prijatelj) agradece em outro post.

Código: Selecionar todos

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

  * ChangeLog.txt
    * removed TABs and format some of recent entries

best regards
Przemek
********************************************************************************************************
HI Przemek

Thanks.

There is another problem with Sql -  null values.

While rddInfo( RDDI_CONNECT, { "ODBC",cConnStr} ) works fine, browse() just drops off columns with some null values.
rddInfo( RDDI_CONNECT, { "SQLITE3",  "test.db" } )  just throws an error.
Error SDDSQLITE3/1902  Invalid field type: select * from OrderAddress  (DOS Error 5)

IMHO null values should be converted to default DBF values.

Thanks you again
T+
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

select omitindo campos da tabela em base de dados MySQL

Mensagem por dbsh »

Resolvi meu problema de campo com mais de 10 caracteres assim
Não sei qual RDD você esta usando, se for com ADO, pode usar assim

Troque as chamadas de FiledName() para FieldNameExt()

Código: Selecionar todos


#define WA_RECORDSET   1

FUNCTION FieldNameExt( nField, nAlias )
LOCAL sRet

DEFA nAlias TO Select()

IF RddName() == "ADORDD" //coloque o RDD que você esta usando
    sRet := ADO_FIELDNAME( nField, nAlias )
ELSE
    sRet := FieldName( nField )
ENDIF

RETURN sRet

STATIC FUNCTION ADO_FIELDNAME( nField, nAlias )
LOCAL cFieldName
LOCAL oRecordSet

DEFA nAlias TO Select()

oRecordSet := USRRDD_AREADATA( nAlias )[ WA_RECORDSET ]

BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
    cFieldName := oRecordSet:Fields( nField - 1 ):Name
RECOVER
    cFieldName := ''
END SEQUENCE

RETURN cFieldName
Esta parte foi retirada da minha biblioteca se der erro avise, não testei.
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

select omitindo campos da tabela em base de dados MySQL

Mensagem por cjp »

Meus caros amigos,

Estou acompanhando as discussões de vocês sobre este tema, mas estou tentando muito pouco (ou quase nada), pois elas são de altíssimo nível.

Não é ADO que eu uso, mas o RDDI.

Gostaria de saber o que eu preciso fazer, especificamente, pra resolver o meu problema.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

select omitindo campos da tabela em base de dados MySQL

Mensagem por Jairo Maia »

Olá Inácio,

Tenho muito pouco a opinar sobre MySQL, mas já tentou usar a cláusula AS para saber como a função Browse() se comporta?

Exemplo:

Código: Selecionar todos

DBUSEAREA( .T.,, "SELECT data AS Data,hora AS Horário,acao AS Ação FROM ativ WHERE usuario='"+usus+"'", "athor")
Browse()
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)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

select omitindo campos da tabela em base de dados MySQL

Mensagem por cjp »

Testei agora a AS, mas não alterou em nada. Pelo que pesquisei, ela apenas muda o nome da coluna, não é? Mas continua não aparecendo o campo inteiro.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

select omitindo campos da tabela em base de dados MySQL

Mensagem por Jairo Maia »

Olá Inácio,
cjp escreveu:Testei agora a AS, mas não alterou em nada.
Pois é... Apenas achei que isso poderia mudar algum comportamento do TBrowseDB() usada pela função Browse(). Mas vamos aguardar então outras dicas de algum colega.
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)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

select omitindo campos da tabela em base de dados MySQL

Mensagem por cjp »

Alguém teria alguma solução para me ajudar com isto?

De todos os testes que já fiz até agora, percebi que ele fixa o tamanho da coluna de acordo com o número de caracteres do primeiro item consultado. Então, por exemplo, se o tamanho da coluna na tabela é chr(40), ao dar um select, se o primeiro retornado for "JOÃO DA SILVA" (13 caracteres), todos os demais itens desta coluna ficarão com 13 caracteres.

Existe alguma solução para isto?
Inacio de Carvalho Neto
Responder