Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carioka

[Resolvido] criar tabela em access

Recommended Posts

gente, tenho uma rotina que cria uma tabela no banco ACCESS sem problemas, mas preciso criar um campo de valor (currency) com 4 casas decimais e não estou conseguindo..

segue abaixo um exemplo do meu código:

 

Dim laco As Integer
Dim CriaTab As TableDef
Dim fldMudou As Field

    With bd
     For laco = 0 To .TableDefs.Count - 1
         If UCase(.TableDefs(laco).Name) = UCase("ReciboVenda") Then
             Exit Sub
         End If
     Next laco
   End With
    
   Set CriaTab = bd.CreateTableDef("ReciboVenda")
   With CriaTab
      Set fldMudou = .CreateField("Ordem", dbText, 5)
      fldMudou.Required = False
      .Fields.Append fldMudou
      .Fields.Refresh
      
      Set fldMudou = .CreateField("DataVenda", dbDate)
      fldMudou.Required = False
      .Fields.Append fldMudou
      .Fields.Refresh
      
      Set fldMudou = .CreateField("Viagem", dbText, 3)
      fldMudou.Required = False
      .Fields.Append fldMudou
      .Fields.Refresh
      
      
      Set fldMudou = .CreateField("Valunit", dbCurrency)
      fldMudou.Required = False
      .Fields.Append fldMudou
      .Fields.Refresh
     
      Set fldMudou = .CreateField("CodEmpresa", dbLong)
      fldMudou.DefaultValue = "1"
      fldMudou.Required = False
      .Fields.Append fldMudou
      .Fields.Refresh
      
      .Properties.Refresh
   End With
    bd.TableDefs.Append CriaTab
End Sub

velu !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você obriga a ser currency, ele por padrão põe duas casas.

Se quiser trabalhar com mais, use decimal.

 

E sinceramente, odeio construir tabela por esse método, dá muito erro e tem banco que aceita alguns termos e uns que não aceitam.

Prefiro construir tabela passando a query pela variável de conexão, por exemplo:

 

cn.execute "create table tabela (cod int identity, valor decimal(6,4))"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você obriga a ser currency, ele por padrão põe duas casas.

Se quiser trabalhar com mais, use decimal.

 

E sinceramente, odeio construir tabela por esse método, dá muito erro e tem banco que aceita alguns termos e uns que não aceitam.

Prefiro construir tabela passando a query pela variável de conexão, por exemplo:

 

cn.execute "create table tabela (cod int identity, valor decimal(6,4))"

 

ok, mas como sou novo na arte de programação, teria como me dar uma ajuda dentro da lógica que eu passei ?

 

vlw !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu tentei reproduzir seu código aqui mas acredito que por minha versão do office ser superior a 2000, não consegui fazer dar certo.

Nenhuma das formas que coloco para o campo (dbLong, dbCurrency, etc) ele aceita.

 

Veja se consegue usar o decimal. É o tipo de campo que vai resolver seu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu tentei reproduzir seu código aqui mas acredito que por minha versão do office ser superior a 2000, não consegui fazer dar certo.

Nenhuma das formas que coloco para o campo (dbLong, dbCurrency, etc) ele aceita.

 

Veja se consegue usar o decimal. É o tipo de campo que vai resolver seu problema.

 

 

Não sei se é o caso (versão) pois tenho a versão 2007 e o código que te passei roda certinho.... mas não aceita dbdecimal.... tive que no final jogar para dbsingle que aceita uma quantidade maior de casas decimais, e bola para frente...

 

de qq forma, obrigado !

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, pode ser a versão. Foi o que te disse, não gosto de usar esse método, pois cada banco de dados tem suas limitações quanto ao que pode usar, e nunca achei em lugar nenhum dizendo qual serve para cada um.

 

Mas que bom que resolveu.

Precisando poste ai.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.