Ajude o site desativando o bloqueador de anúncio

ASSINE A NEWSLETTER

Cadastrando...
PIX uDesenv pix deposito

dbCreate [AS]

Autor: Eurai Criado: 01/01/2016 Atualizado: 25/04/2025

Descrição

dbCreate [AS] - Define uma nova tabela ou um novo arquivo do tipo tabela e sua estrutura (campos)

 

Sintaxe

dbCreate( <cNome>, <aEstrutura>, <cDriver> )

 

Parâmetros

Par Nome Tipo Descrição Default Obg Ref
01 cNome
Caracter
Indica o nome da tabela que será criada. Dependendo da RDD utilizada é possível informar a pasta onde a tabela será criada que por padrão é a pasta inicial do ambiente configurado (StartPath)[
  X  
02 aEstrutura
Array
Indica o array que contém as informações dos campos que serão utilizados para criar a tabela
  X  
03 cDriver
Caracter
Indica a RDD (Replaceable Database Driver) que será utilizada para criar a tabela
     

 

Retorno

Retorno Tipo Descrição

 

Exemplo

#INCLUDE "TOTVS.CH"
 
User Function dbCreate()
Local cNomArq	:= ''
Local cSeconds 	:= "9"+StrZero(Seconds(),5,0)
Local aCampos	:= {}
 
aAdd( aCampos, { 'ZZ1_USER'		, 'C', TamSX3('ZZ1_USER')[01]	, TamSX3('ZZ1_USER')[02] } )
aAdd( aCampos, { 'ZZ1_NOME'		, 'C', TamSX3('ZZ1_NOME')[01]	, TamSX3('ZZ1_NOME')[02] } )
 
cNomArq := "GeraTMP_SC" + cSeconds //CriaTrab(aCampos)
dbCreate( cNomArq, aCampos, __LocalDriver )
dbUseArea( .T.,, cNomArq, "TRB", .F., .F. )
 
Return( Nil )


Resultado

dbcreate_-_resultado_01                           

 

 

Erros mais Comuns

DBCreate – Database files can only be created on the server

Nome do arquivo não pode conter a unidade de disco, pois, por convenção, o mesmo seria criado na máquina onde o cliente remoto está sendo executado

DBCreate – Invalid empty filename

O nome do arquivo não foi especificado

DBCreate – Fields name cannot be 'DATA'

DATA é uma palavra reservada e seu uso não é suportado por aquela RDD ou por aquele SGBD

DBCreate – The length of fields name must be at most 10

O nome do campo não pode ter mais de 10 caracteres

DBCreate – Fields name must be defined

O nome do campo não foi definido

DBCreate – Fields type is not defined

O tipo do campo não foi definido.

DBCreate – Invalid fileds type

O tipo do campo é diferente de 'C', 'D', 'L', 'M' e 'N'

DBCreate – Invalid numeric field format

O formato para campo numérico utilizado é inválido. Considerando 'len' o tamanho total do campo numérico e 'dec' o número de decimais, esse erro irá ocorrer quando:

(len = 1).and.(dec <> 0), ou seja, se o tamanho total for 1, o campo não pode ter decimais.

(len > 1).and.(len < dec + 2), ou seja, se o tamanho total for maior que 1, o mesmo deve ser maior que o número de decimais mais 2,

para comportar o separador de decimais e ter pelo menos um algarismo na parte inteira

DBCreate – field name will be truncated to 10 characters

O nome do campo possui mais de 10 caracteres e somente os 10 primeiros caracteres serão considerados

DBCreate – Warning – Fields order has changed in file: Memo fields must be in the end of table in Ctree or Btrieve driver

A ordem dos campos foi alterada, os campos do tipo Memo foram movidos para o final da tabela

 

 

Informações adicionais

Para obter mais informações sobre erros decorrentes de permissões e direitos na pasta em que se está tentando criar o arquivo ou por algum problema no banco de dados, consulte as mensagens do servidor de aplicação e do banco de dados.

As mensagens de erro retornadas por esta função podem conter detalhes específicos da RDD em uso, estes detalhes são importantes para um diagnóstico adequado em caso de não-conformidade ao executar a instrução.

Independente da causa, uma falha na criação da tabela gera uma ocorrência crítica de erro AdvPL, que interrompe o programa/aplicação.

RDDs que podem ser utilizados:

CTREECDX: c-tree

DBFCDX: RDD indicada no arquivo de configuração do servidor de aplicação através da chave LocalFiles.

DBFCDXADS: ADS Local

DBFCDXAX: ADS Server

DBFCDXTTS: mantido por compatibilidade e possui o mesmo comportamento do RDD DBFCDX, utilize o RDD DBFCDX.

TOPCONN: RDD para uso com bancos de dados relacionais.

SQLITE_SYS: RDD para uso com banco de dados SQLite, com persistência de tabelas, mesmo depois de fechar a conexão (disponível a partir do Protheus 12).

SQLITE_TMP: RDD para uso com banco de dados SQLite, com tabelas em disco, removidas automaticamente ao final da conexão (disponível a partir do Protheus 12).

SQLITE_MEM: RDD para uso com banco de dados SQLite, com tabelas em memória, liberadas automaticamente ao final da conexão (disponível a partir do Protheus 12).

 

 

 

Limites

Cada RDD tem diferenciados limites com relação:

Quantidade de campos.

Tamanho máximo de header (soma dos tamanhos dos campos na estrutura).

Precisão numérica máxima, onde alguns dos limites estão implícitos na linguagem, outros implícitos na RDD e outros implícitos no SGBD utilizado

 

 

Mensagens de advertência

A tabela criada respeita a ordem dos campos especificado no array de parâmetro contendo a estrutura, exceto quando um ou mais campos do tipo "M" (MEMO) sejam especificados na estrutura, e os campos MEMO não sejam os últimos campos do array de estruturas, e a RDD utilizada for "CTREECDX" ou "DBFCDX" com o ambiente configurado para usar c-tree (Local e/ou Server) para controle de tabelas locais. Neste caso, a função emite uma mensagem de advertência e automaticamente coloca todos os campos do tipo "M" no final da estrutura definida

 

 

Limites convencionados para o desenvolvimento de aplicações portáveis em AdvPL

Uma das características do AdvPL mais importante, e enfatizada no desenvolvimento de aplicações, é a portabilidade da solução para diferentes ambientes, plataformas e SGBDs com alterações mínimas no código-fonte AdvPL. Para procurar manter estas premissas no desenvolvimento de uma solução, é prudente respeitar alguns limites no desenvolvimento de aplicações.

As definições de uma tabela de dados envolvem o número de colunas da tabela, tamanho do registro (a soma do tamanho de todas as colunas), tamanhos máximos para cada campo, bem como as definções de índices da tabela, e para cada uma destas definições, existe um limite. Os limites abaixo convencionados são contemplados por todas as RDDs implementadas

 

Limites convencionados para o desenvolvimento de aplicações portáveis em AdvPL

Número de campos por tabela

<= 256

Tamanho do registro

<= 7000 Bytes

Quantidade de índices por tabela

<= 15

Quantidade de campos por chave de índice

<= 14

Tamanho do registro da expressão de índice

<= 140 Bytes (*)

Tamanho máximo de um campo “C” Caractere

<= 254 Bytes.

Tamanho máximo de um campo “M” Memo

<= 64 KB (**)


Gostou? Compartilhe com seus amigos e deixe um comentário! 😎  

Discussão (0)

Sem comentários ainda

Realize o LOGIN no site para poder comentar