FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour dbcreate() con campos de nombre largo
Posts: 17
Joined: Fri Apr 18, 2008 02:41 PM
dbcreate() con campos de nombre largo
Posted: Wed Apr 22, 2026 02:03 PM

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:

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

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: dbcreate() con campos de nombre largo
Posted: Wed Apr 22, 2026 05:04 PM

hi Alex, mira se és esto:

// 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. "              + ;
                          "kapiabafwh@gmail.com"

   XBROWSE()

   CLOSE DATABASES

RETURN NIL

// FIN / END - kapiabafwh@gmail.com

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: dbcreate() con campos de nombre largo
Posted: Wed Apr 22, 2026 05:08 PM

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
Posts: 17
Joined: Fri Apr 18, 2008 02:41 PM
Re: dbcreate() con campos de nombre largo
Posted: Wed Apr 22, 2026 05: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.

Alexandre Pereira

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

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: dbcreate() con campos de nombre largo
Posted: Wed Apr 22, 2026 05:25 PM
alex2002 wrote:

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.

#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

Continue the discussion