dbcreate() con campos de nombre largo

Post Reply
User avatar
alex2002
Posts: 23
Joined: Fri Apr 18, 2008 2:41 pm
Location: Belo Horizonte / MG - Brasil

dbcreate() con campos de nombre largo

Post by alex2002 »

Buenos días a todos.

Tengo problemas al usar dbcreate() con campos de más de 10 caracteres.

Recuerdo que ya lo había usado sin problemas, pero ahora no puedo crear las tablas y esto me ha estado dando problemas.

Necesito crear urgentemente alias con nombres de campos más grandes debido a que los estoy creando a partir de declaraciones SQL.

Ya probé los drivers a ver si los crean con nombres largos, pero no los crean correctamente, ni siquiera en archivos DBF.

¿Alguien podría darme algo de ayuda?

Este es un ejemplo:

Code: Select all | Expand


FUNCTION TesteDbCreate()

   LOCAL oConn     := ovs:oConLeitura
   LOCAL aDbStruct := {}
   LOCAL cAlias    := 'tmp'

   // 2. Estrutura com nome de campo bem longo (25 caracteres)
   // No DBF clássico, isso seria truncado para "NOME_DO_CA"
   AAdd( aDbStruct, { "NOME_DO_CAMPO_MUITO_LONGO_TESTE", "C", 50, 0 } )
   AAdd( aDbStruct, { "VALOR_TESTE",                     "N", 12, 2 } )

   MsgRun( "Tentando criar tabela com nomes longos...", "Aguarde", { || ;
      dbCreate( 'mem:' + cAlias, aDbStruct,, .t., cAlias ) ;
   } )


   // 3. Verificação
   IF select( cAlias ) > 0
      (cAlias)->( xbrowse() )
      (cAlias)->( dbclosearea() )
   ELSE
       MsgStop( "Erro: A tabela não foi criada ou o RDD falhou.", "Erro de Versão" )
   ENDIF

return nil

Alexandre Pereira
Harbour 3.2 - FWH - 25.12 - MSVC - VsCODE - Win11

User avatar
karinha
Posts: 8720
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: dbcreate() con campos de nombre largo

Post by karinha »

hi Alex, mira se és esto:

Code: Select all | Expand

// c:\fwh2603\samples\DBCGRAND.PRG -> CAMPO MEMO.

#Include "Fivewin.Ch"

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

FUNCTION Main()

   // 1. Definir a estrutura da tabela
   // Estrutura: { NomeCampo, Tipo, Tamanho, Decimais }
   LOCAL aEstrut := {}
   AADD(aEstrut, { "ID",        "N", 05, 00 })
   AADD(aEstrut, { "NOME",      "C", 30, 00 })
   AADD(aEstrut, { "HISTORICO", "M", 10, 00 }) // 'M' para Campo Memo (Longo)

   // 2. Criar a tabela física
   IF .NOT. FILE( "ALEX2002.DBF" )

  DBCREATE( "ALEX2002.DBF", aEstrut )

   ENDIF

   // 3. Abrir e testar
   USE ALEX2002 NEW SHARED

   APPEND BLANK

   REPLACE ID WITH 1
   REPLACE NOME WITH "Alexandre Pereira da Silva"
   // O campo longo pode receber muito texto
   REPLACE HISTORICO WITH "Este é um texto muito longo que excederia " + ;
                          "os 254 caracteres de um campo character "   + ;
                          "comum. Usando Memo, podemos colocar "       + ;
                          "milhares de caracteres aqui. "              + ;
                          "[email protected]"

   XBROWSE()

   CLOSE DATABASES

RETURN NIL

// FIN / END - [email protected]

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
Posts: 8720
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: dbcreate() con campos de nombre largo

Post by karinha »

Em tempo:

Talvez o LETODB, faça isso: "NOME_DO_CAMPO_MUITO_LONGO_TESTE" - CLIPPER/HARBOUR, nunca vi nada parecido.

abs.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
alex2002
Posts: 23
Joined: Fri Apr 18, 2008 2:41 pm
Location: Belo Horizonte / MG - Brasil

Re: dbcreate() con campos de nombre largo

Post by alex2002 »

Gracias "Kapiaba"

El error no estaba en los datos largos sino en el nombre del campo.

Pero logré resolverlo usando ARRAYRDD, acepta nombres de campos largos. Pero hay un error en xBrowse() al usar ARRAYRDD porque no completa el alias (como si el alias no se hubiera completado). Pero al recorrer Alias ​​vi que era popular, entonces lo acepté y me funciona de esa manera.

Alexandre Pereira
Harbour 3.2 - FWH - 25.12 - MSVC - VsCODE - Win11

User avatar
karinha
Posts: 8720
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: dbcreate() con campos de nombre largo

Post by karinha »

alex2002 wrote: Wed Apr 22, 2026 5:18 pm

Gracias "Kapiaba"

El error no estaba en los datos largos sino en el nombre del campo.

Pero logré resolverlo usando ARRAYRDD, acepta nombres de campos largos. Pero hay un error en xBrowse() al usar ARRAYRDD porque no completa el alias (como si el alias no se hubiera completado). Pero al recorrer Alias ​​vi que era popular, entonces lo acepté y me funciona de esa manera.

Nunca vi em minha vida. hahahahaha.

Code: Select all | Expand

#include "FiveWin.ch"
#include "rdd.ch"

REQUEST ARRAYRDD // Solicita o RDD de Array

PROCEDURE Main()
    LOCAL aData := { {"Produto 1", 10.00}, {"Produto 2", 20.00} }
    
// Cria uma tabela virtual baseada no array // O ARRAYRDD usa a estrutura: ARRAYRDD_Create( <cAlias>, <aArray>, <aStructure> ) // A estrutura é necessária para definir os campos (Nome, Tipo, Tamanho, Decimal) // ... operações rdd (DBSEEK, etc) em cima do aData ... RETURN

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Post Reply