USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Não consigo gravar dados
Labroskas
VISEU
PT - PORTUGAL
ENUNCIADA !
Postada em 07/05/2007 12:37 hs            
Oipessoal!!
Eu tenho uma aplicação feita em visual basic, com bases de dados em access e uso Data environement e tenho um problema de gravação de dados.
O meu problema é que a tabela que estou a utilizar tem muitos campos(alias, tem o maximo de campos possivel numa tabela de access), e aquando da gravação dá um erro que diz que foram definidos muitos campos e que é impossivel gravar os dados!
Eu para tentar fugir a esse erro criei dois "Command" no data envirenement, nos quais tenho a tabela dividida em dois.
no inicio eu tenho este código:
Form Load()
   Set DETabA = Nothing
   Set DETabA = New ADODB.Recordset
   Set DETabA = DEGeral.rsTblA
   Set DETabB = Nothing
   Set DETabB = New ADODB.Recordset
   Set DETabB = DEGeral.rsTblB
end sub
*******************************************
Depois quando faço novo:
   DETabA.AddNew
   DETabA("Ano").Value = Year(Now)
   DETabA("Nipc").Value = "123456789"
mas nesta situação ele não faz o addnew aos campos da segunda tabela e ao fazer o guardar ele não guarda na linha correcta, pq não sei como fazer para o relacionar com a primeira tabela sem fazer o addnew à segunda tabela, pq caso eu faça o Addnew à segunda tabela ele vai criar dois registos do mesmo ano!!
No guardar faço:
DETabA.Update
DETabB.Update
Se alguem me puder ajudar agradeço imenso!!
Obrigado!
   
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
ENUNCIADA !
Postada em 07/05/2007 17:41 hs            
Olha, se não me engano o access suporta 255 campos estou correto? Eu já vi tabelas com mais de 300 campos mas não em access! Deve estar tendo um erro de estruturação aí... se não tiver erro, com o relacionamento entre os dados de maneira unívoca (1-1) , então o correto seria dividir a tabela em outras tabelas que é o acontece no caso de ter muitos campos. Tendo 1 chave para identificar os registros nas tabela que se relacionam. Se vc puder fazer isso ótimo, ganhará em desempenho, estruturação e futuras dores-de-cabeça. :)
 
Se eu entendi são 2 commands (DEtabA e DETabB respectivamente) certo? Os 2 representam 1 tabela, blz? Bom tenta não usar 2 commands...não sei se dará certo mas grave metade dos campos primeiro depois vc não usa o AddNew e sim o EDIT.
 
Vc ainda pode usar SQL, mas não sei se vc terá problemas. Um exemplo simples:
 
Dim BD as DataBase, SQL as String
....
SQL = "INSERT INTO TABELA (campo_numerico,campo_texto) VALUES (123,'joao')"
BD.Execut SQL
 
espero q ajude
 
at+
 
   
Labroskas
VISEU
PT - PORTUGAL
Postada em 08/05/2007 08:25 hs            
O problema é que eu tenho dois comands no data environement, criei atraves de dois selects, assim posso dividir a tabela em dois e já me permite gravar os dados, mas existe um problema, eu quando faço "NOVO" não posso fazer o AddNew para os dois comandos, senão vai criar dois registos iguais na tabela!
Quando faço novo so posso fazer:
DeTabA.AddNew
Depois quando Guardo e se tiver mais registos na tabela ele não sabe em que registo alterar os dados e grava tudo errado:
DeTabA.UPDATE
***se executar a mensagem ele retorna por ex. o ano 2006
MsgBox DETabA.Fields("Ano").Value
'****Mas nesta parte de baixo eu não como indicar ou redireccionar o caminho para o registo certo:
***Se executar a mensagem ele retorna outro ano (talvez o primeiro que tiver inserido na tabela) Ex. 2004, e vai guardar os campos do DETabB no ano de 2004 em vez de gravar no ano de 2006
MsgBox DETabB.Fields("Ano").Value
DeTabB.UPDATE
*****************************************************
Já tentei fazer isto, mas nem assim...
DETabB.Find "Ano = " & DETabA.Fields("Ano").Value, , adSearchForward, 1
se alguém souber o que fazer, agradeço ajuda!
     
Labroskas
VISEU
PT - PORTUGAL
Postada em 08/05/2007 08:26 hs            
Falas-te no EDIT, como faço utilizando o data environment???
     
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
Postada em 08/05/2007 12:01 hs            
Olha, que me lembro o DataEnvironment era DAO mas é parecido com o ADO... se for DAO vc vai ter uma função chamada EDIT que editará o registro:
 
DETabB.Edit
DETabB.("Ano").Value = "2006"
DETabB.UpDate
 
Agora se for ADO então não usa-se o EDIT, apenas grava:
 
DETabB.("Ano").Value = "2006"
DETabB.UpDate
 
Ambos têm que localizar o registro antes de editar. Procure pelo campo chave:
 
DETabB.Find "CAMPO_CHAVE = 1"
DETabB.Edit
DETabB.("Ano").Value = "2006"
DETabB.UpDate
 
Entendeu?
 
Pode-se fazer via SQL também só que não lembro onde ficava a função Execute. Acho que era no objeto Connection. Posso estar enganado mas tu podes tentar:
 
Conexao.Execute "INSERT INTO TABELA (campo_numerico,campo_texto) VALUES (123,'joao')"
 
Citando como exemplo.
 
Qualquer problema é só postar.
 
até +
     
Labroskas
VISEU
PT - PORTUGAL
Postada em 08/05/2007 12:34 hs            
Eu já tentei fazer isso, mas se ele tiver dois registos ou mais (2005, 2006...) ele não consegue relacionar os registos e se tiver a editar o registo de 2006 ele grava a primeira parte da tabela (1º comando) correctamente, mas a segunda parte (2º comando) vai guardar noutro ano diferente!!!
     
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página