GRAVACAO EM BANCO

USUARIO.EXCLUIDOS 25/05/2004 13:46:03
#26585
Pessoal, surgil um problema não sei se é facil resolver, é o seguinte. Tenho dois bancos sendo SaldoInicial e Materiais. Sendo o cadastro de um novo registro gravo todos os seus dados no banco Materiais, más devo pegar o código do material e a quantidade e gravar também no banco SaldoInicial. Com a rotina abaixo gravo normalmente, más quando vou alterar, cancelar ou buscar dados de um determinado material da erro. Alguem pode analizar e mostrar onde estou errando?
Private Sub CmdIncluir_Click()
TxtCod.Text = ""
TxtDesc.Text = ""
TxtLc1.Text = ""
TxtLc2.Text = ""
TxtLc3.Text = ""
TxtLc4.Text = ""
TxtQT.Text = ""
TxtUn.Text = ""
TxtUnit.Text = ""
Desativar
On Error Resume Next
Posição = tbloc.Bookmark
Posição = tbQuant.Bookmark
tbloc.AddNew
tbQuant.AddNew
TxtCod.SetFocus
End Sub

Private Sub CmdConfirmar_Click()
If MsgBox("Você confirma a inclusão ou alteração deste registro?", vbYesNo + vbExclamation) = vbYes Then

tbloc!Código = Trim(TxtCod.Text)
tbloc!Descrição = Trim(TxtDesc.Text)
tbloc!Localização1 = Trim(TxtLc1.Text)
tbloc!Localização2 = Trim(TxtLc2.Text)
tbloc!Localização3 = Trim(TxtLc3.Text)
tbloc!Localização4 = Trim(TxtLc4.Text)
tbloc!Quantidade = Trim(TxtQT.Text)
tbloc!Unidade = Trim(TxtUn.Text)
tbloc!Unitario = Trim(TxtUnit.Text) --- campo do SaldoInicial
tbQuant!codigo = Trim(TxtCod.Text)--- campo do SaldoInicial
tbQuant!qt = Trim(TxtQT.Text)
tbloc.Update
tbQuant.Update

Ativar
Else
CmdCancelar_Click 'Executa os comandos do botão cancelar.
End If
End Sub

Private Sub UserForm_Initialize()
Set bdMat = OpenDatabase("C:\Estoque\Materiais.mdb")
Set bdQuant = OpenDatabase("C:\Estoque\SaldoInicial.mdb")
Set tbloc = bdMat.OpenRecordset("Localizacao", dbOpenTable)
Set tbQuant = bdQuant.OpenRecordset("Saldo", dbOpenTable)
FrmLoca.Lb_Contar1.Caption = tbloc.RecordCount
tbloc.Index = "iCod"
tbloc.Index = "iDesc"
On Error Resume Next
tbloc.MoveFirst
tbQuant.MoveFirst
Atualizar
End Sub
USUARIO.EXCLUIDOS 25/05/2004 15:48:52
#26615
Resposta escolhida
Primeiramente, devo lhe dizer que naum concordo com a forma como esta gravando os dados de suas Tabelas.
Naum pelo fato de ter separado a tabela de Materiais e a de Saldo, mas pq vc colocou-as em Bancos de Dados diferentes.

Quando ha 2 tabelas com dados que se relacionam, a maneira mais segura de fazer com que fucione eh Relaciona-las() no Menu Ferramentas/Relacionamento do ACCESS, onde vc ira definir o tipo de Integridade Referencial do Relacionamento.
Feito isso Cria-se rotinas de Salvar/Alterar/Excluir no VB de Acordo com os relacionamentos.
Por Exemplo:
Quando vc Inserir Um Material na Tabela de Materiais ira inserir Tambem o Saldo desse Material na Tabela de Saldo, mas quando vc Excluir um Material ira fazer o que? Exlcuir o Saldo Tambem ou avisar que nao eh possivel excluir pq existe uma tabela 'depentente dessa informacao'?

Existem outras coisas tb para se pensar ao estruturar um Banco de Dados, e um banco bem estruturado evita muita dor de cabeca.

Agora, vamos ao seu problema.
Quando tenho 2 tabelas relacionadas Gravo a 'Tabela Mestre' Normalmente e depois abro a 'Tabela Dependente', gravo e fecho a 'Tabela Dependente'.
Nao abro 2 recordsets juntos, prefiro localizar o registro da 2Âê tabela apenas quando necessario.
Tente usar comandos SQL para abrir seus recordsets que facilita muito.

Nesse erro q vc comentou, c vc usasse uma SQL +/- assim acho que funcionaria.

"SELECT * FROM Saldo WHERE codigo = '" & TxtCod.Text & """
em segiuida fazendo a conexao e:
If tbQuant.EOF Then
tbQuant.AddNew
else
tbQuant.Edit 'se estivesse usando ADO nao precisaria desta linha
End If

Qualquer coisa Post

Te +[S56]
Tópico encerrado , respostas não são mais permitidas