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

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Deletar um registro do Acess?
Mateus
AMADORA
PT - PORTUGAL
Postada em 15/07/2004 09:20 hs            
Vamos lá a ver se nos entendemos:
-Você já tentou executar o seu comando? Se já o que foi que aconteceu? Quase de certeza ele deu um erro ou, pura e simplesmente não aconteceu nada.
Porque, resumindo as coisas são assim:
- As recordsets são conjuntos de registos guardados na memória, provenientes ou não de tabelas de bases de dados;
- Se os registos constantes das recordsets são provenientes de tabelas, o que fazemos sobre as mesmas(as recordsets) depende da forma como trabalhamos com elas. Se trabalhamos com elas vinculadas as alterações que fizermos na recordset ir-se-ão reflectir na base de dados, se trabalharmos com elas desconectadas pura e simplesmente não acontece nada na base de dados e não fizermos as alterações, simultâneamente na recordset e na base de dados.
Assim, e dado que você não pretende manter guardados dados na memória(recordset) mas sim deletar da Tabela Turnos os dados que não constam da Tabela Histórico, seria muito mais lógico deletar os registos directamente na mesma. Daí dever usar o SQL que já foi indicado acima para o fazer.
Se quizesse guardá-los em memória e deletá-los ao mesmo tempo da recordset(Rs) e da tabela respectiva, então devia adoptar algo do género:
 
 Set db = New Connection
                db.CursorLocation = adUseClient
                db.Open "PROVIDER=MSDataShape;Data PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "mvdoctab.mdb" & " ;"
                Set adomovRS = New Recordset
                adomovRS.Open "SELECT * from tMOVIMENTOS" & _
                " WHERE codigo = " & cod & " " & _
                " and id_movimento = '" & id & "'", db, adOpenStatic, adLockOptimistic
        adomovRS.Delete
        adomovRS.MoveNext
       
            If adomovRS.RecordCount = 0 Then
            MsgBox "Registos Apagados"
            adomovRS.Close
 
E pronto, espero, pelo menos, ter contribuído para esclarecer alguma da confusão que me pareceu ir por aí.
 
João Mateus
     
tamanini
não registrado
Postada em 15/07/2004 15:05 hs   
É deu erro mesmo!
Mas utilizando o db.execute "DELETE..." tb gerou!
E Mateus, eu preciso deletar um registro que consta na tblCaldeira e mais os registros relacionados deste na tblturnos! Mas para excluir estes registros, preciso verificar em uma 3º tabela se está utilizando o registro que irei apagar.
O que eu posso fazer é utilizar então o command em vez do connection?
[]'s
 
Marcelo Tamanini
 
     
WaldirJr
POÇOS DE CALDAS
MG - BRASIL
Postada em 15/07/2004 16:23 hs            
Vamos ver se eu consigo explicar:

Vc possui 4 tabelas que se relacionam:

TblCaldeira - - - - - - > TblHistorico - - - - - - - > TblDados
                |- - - - - - > TblTurnos

Então sua "Tabela Principal" é TblCaldeira.

- Se vc for excluir Registros da TblTurnos, vc poderá excluir Normalmente com Command.Execute
- Se vc For excluir registros da TblHistorico, Primeiro terá de Excluir os Registros Relacionados na TblDados, Depois Excluir os Registros de TblHistorico
- Se vc for excluir Registros da TblCaldeira, Primeiro terá de Excluir os Registros Relacionados na TblDados, Depois Excluir os Registros de TblHistorico, Depois os Registros da TblTurnos e Por Ultimo a TblCaldeira.

Qualquer coisa me mande um e-mail



________________________

Té +

Que NIMB role bons Dados! Emoções

     
Mateus
AMADORA
PT - PORTUGAL
Postada em 16/07/2004 07:38 hs            
Dado que você ainda não fechou o tópico, vou mandar para você um exemplo de como trabalho:
 

ADO - Exemplo de como trabalhar com Dados

 

Public Function ConexaoDados() As Connection

 

base = PstrCamDados & "mvdoctab.mdb"

Set dbDados = New ADODB.Connection

With dbDados

    .Provider = "Microsoft.Jet.OLEDB.4.0"

    .Properties("Data Source") = base

    .Properties("Jet OLEDB:Database Password") = "password"

    .Open

End With

 

End Function

 

Public Function MostrarTodos() As ADODB.Recordset

 

Set rstMovimentos = New ADODB.Recordset

 

strSql = "SELECT * FROM tMovimentos"

rstMovimentos.CursorLocation = adUseClient

rstMovimentos.Open strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

 

Set MostrarTodos = rstMovimentos

 

Set rstMovimentos = Nothing

 

End Function

 

 

Public Sub Inserir()

 

On Error Resume Next

   

strSql = "INSERT INTO tMovimentos (id_movimento,"

strSql = strSql & " codigo,mov_tipo,mov_tipo2,mov_data,ent_num_contr,"

strSql = strSql & " ent_num_ei,ent_num,mov_docref,tipo_pag,not_venda,"

strSql = strSql & " data,cod_util,transfer)VALUES('" & id & "',"

strSql = strSql & " " & cod & " ,'" & movt & "','" & movd & "','" & dat & "'," & entidnc & ","

strSql = strSql & " " & entidne & ", " & entid & ",'" & ref & "','" & tp & "','" & nv & "',"

strSql = strSql & " '" & dat & "','" & ut & "', '" & transf & "')"

 

dbDados.Execute strSql

 

   Select Case Err.Number

   Case 0:

     

      MsgBox "Registo incluído.", vbInformation, "Atenção"

   Case -2147217864

      MsgBox "Registo excluído por outro utilizador. As alterações feitas não serão salvas.", vbInformation, "Atenção"

   Case -2147467259

      MsgBox "Registo bloqueado por outro utilizador. O Registo não pode ser incluído. Tente mais tarde." & vbCr, vbExclamation, "Atenção"

   Case Else

      MsgBox "O Registo não pode ser incluído." + vbCrLf + Err.Description

   End Select

 

 

End Sub

 

 

 

 

Public Function ObterCodigo() As String

 

Dim strCod As String, intMaxCod As Integer

 

Set rstMovimentos = New ADODB.Recordset

 

rstMovimentos.CursorLocation = adUseServer

rstMovimentos.Open "SELECT max(id_movimento)from tMovimentos where mid(tmovimentos.id_movimento,1,4)= '" & inicio & "'", dbDados, adOpenKeyset, adLockReadOnly, adCmdText

 

If IsNull(rstMovimentos.Fields(0)) Then

   ant = inicio & "000000"

   ObterCodigo = ant + 1

Else

ant = rstMovimentos.Fields(0).Value

ObterCodigo = ant + 1

 

End If

 

Set rstMovimentos = Nothing

 

End Function

 

 

 

Public Sub Alterar()

 

 

On Error Resume Next

 

strSql = "UPDATE tMovimentos SET tMovimentos.mov_tipo='" & movt & "',"

strSql = strSql & "tMovimentos.mov_tipo2='" & movd & "',"

strSql = strSql & "tMovimentos.mov_data = '" & CVDate(dat) & "',"

strSql = strSql & "tMovimentos.ent_num_contr=" & entidnc & ",tMovimentos.ent_num_ei=" & entidne & ","

strSql = strSql & "tMovimentos.ent_num=" & entid & ",tMovimentos.mov_docref ='" & ref & "',"

strSql = strSql & "tMovimentos.tipo_pag='" & tp & "',tMovimentos.not_venda=" & nv & ","

strSql = strSql & "tMovimentos.data= '" & CVDate(datr) & "',"

strSql = strSql & "tMovimentos.cod_util='" & ut & "',"

strSql = strSql & "tMovimentos.transfer='" & transf & "' "

strSql = strSql & "WHERE tMovimentos.id_movimento= '" & id & "' and tMovimentos.codigo=" & cod & " "

 

dbDados.Execute strSql

 

   Select Case Err.Number

   Case 0

      MsgBox "Alteração concluída.", vbInformation, "Atenção"

   Case -2147217864

      MsgBox "Registo excluído por outro utilizador. As alterações feitas não serão salvas.", vbInformation, "Atenção"

   Case -2147467259

      MsgBox "Registo bloqueado por outro utilizador. As alterações não foram salvas. Tente mais tarde." & vbCr, vbExclamation, "Atenção"

   Case Else

      MsgBox "O Registo não pode ser alterado." + vbCrLf + Err.Description

   End Select

 

 

End Sub

 

 

Public Function Excluir()

 

strSql = "DELETE FROM tMovimentos "

strSql = strSql & "WHERE tMOVIMENTOS.id_movimento= '" & id & "' and tMovimentos.codigo=" & cod & ""

 

On Error Resume Next

dbDados.Execute strSql

Select Case Err.Number

  Case 0:

     MsgBox "Registo Excluído.", vbInformation, "Atenção"

  Case -2147217864

     MsgBox "Registo já excluído por outro utilizador.", vbInformation, "Atenção"

  Case -2147467259

     MsgBox "Registo bloqueado por outro utilizador. Exclusão não permitida. Tente mais tarde." & vbCr, vbExclamation, "Atenção"

  Case Else

     MsgBox "O Registo não pode ser excluído." + vbCrLf + Err.Description, "Atenção"

  End Select

 

End Function

 

 

Public Function ConfirmarRegisto(ByVal strIdentificativo As String, ByVal strCodigo As Long) As Boolean

 

 

Set rstMovimentos = New ADODB.Recordset

 

strSql = "SELECT id_movimento, Codigo FROM tMovimentos"

strSql = strSql & " WHERE tMOVIMENTOS.id_movimento ='" & strIdentificativo & "'"

strSql = strSql & " and tMOVIMENTOS.Codigo = " & strCodigo & ""

rstMovimentos.CursorLocation = adUseClient

rstMovimentos.Open strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

 

If Not rstMovimentos.EOF Then

 ConfirmarRegisto = True

Else

 ConfirmarRegisto = False

End If

 

rstMovimentos.Close

 

Set rstMovimentos = Nothing

 

End Function

 

 

Public Function Consultar(ByVal strSql As String) As ADODB.Recordset

 

Set rstMovimentos = New ADODB.Recordset

   

If strSql = Null Then

   strSql = ""

End If

   

rstMovimentos.CursorLocation = adUseClient

rstMovimentos.Open strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

 

Set Consultar = rstMovimentos

 

Set rstMovimentos = Nothing

 

End Function

 

 

Public Function MostrarTodosDetalhe() As Recordset

 

Set rstMovimentos = New ADODB.Recordset

 

strSqlD = "SELECT * FROM tMovimentosdet"

rstMovimentos.CursorLocation = adUseClient

rstMovimentos.Open strSqlD, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

 

Set MostrarTodosDetalhe = rstMovimentos

 

Set rstMovimentos = Nothing

 

End Function

 

 

 

 

 

Public Sub ExcluirTodosDetalhe()

 

strSqlD = "DELETE FROM tMovimentosdet "

strSqlD = strSqlD & "WHERE tMOVIMENTOSdet.id_movimento= '" & id & "' and tMovimentosdet.codigo=" & cod & ""

 

On Error Resume Next

dbDados.Execute strSqlD

Select Case Err.Number

  Case 0:

     MsgBox "Registo Excluído.", vbInformation, "Atenção"

  Case -2147217864

     MsgBox "Registo já excluído por outro utilizador.", vbInformation, "Atenção"

  Case -2147467259

     MsgBox "Registo bloqueado por outro utilizador. Exclusão não permitstrIdentificativoa. Tente mais tarde." & vbCr, vbExclamation, "Atenção"

  Case Else

     MsgBox "O Registo não pode ser excluído." + vbCrLf + Err.Description, "Atenção"

  End Select

 

 

End Sub

 

 

Public Sub ExcluirRegistoDetalhe()

 

 

On Error Resume Next

   

strSqlD = "DELETE FROM TMovimentosDet WHERE codigo = " & cod & " AND id_movimento = '" & id & "'"

 

dbDados.Execute strSqlD

 

     Select Case Err.Number

     Case 0:

       

     Case -2147217864

        MsgBox "Registo já excluído por outro utilizador.", vbInformation, "Atenção"

     Case -2147467259

        MsgBox "Registo bloqueado por outro utilizador. Exclusão não permitida. Tente mais tarde." & vbCr, vbExclamation, "Atenção"

     Case Else

        MsgBox "O registo não pode ser excluído." + vbCrLf + Err.Description, "Atenção"

     End Select

 

 

End Sub

 

 

 

Public Sub InserirDetalhe()

 

On Error Resume Next

   

strSqlD = "INSERT INTO TMovimentosDet (mov_tipo, art_codig, serie_id, serie_ini, serie_fim, codigo, id_movimento, serie_contad,"

strSqlD = strSqlD & "art_quant, art_valunit, valor ) VALUES ("

strSqlD = strSqlD & "'" & movt & "', '" & art & "','" & ser

strSqlD = strSqlD & "', " & ini & ", " & fim & ", " & cod

strSqlD = strSqlD & " , '" & id & "', " & contad

strSqlD = strSqlD & ", " & quant & ", " & valunit & ", " & val & ")"

dbDados.Execute strSqlD

 

   Select Case Err.Number

  

   Case 0

      Exit Sub

   Case -2147217864

      MsgBox "Registo excluído por outro utilizador. As alterações feitas não serão salvas.", vbInformation, "Atenção"

   Case -2147467259

      MsgBox "Registo bloqueado por outro utilizador. O registo não pode ser incluído. Tente mais tarde." & vbCr, vbExclamation, "Atenção"

   Case Else

      MsgBox "O registo não pode ser incluído." + vbCrLf + Err.Description

   End Select

 

 

End Sub

 

 

 

Public Function ConsultarDetalhe(ByVal strSqlD As String) As Recordset

 

Set rstMovimentos = New ADODB.Recordset

   

If strSql = Null Then

   strSql = ""

End If

   

 

rstMovimentos.CursorLocation = adUseClient

rstMovimentos.Open strSql & strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

 

Set ConsultarDetalhe = rstMovimentos

 

Set rstMovimentos = Nothing

 

End Function

 

 

 Pode ser que perceba melhor aquilo que disse antes.

 

Como pode ver a conexão está sempre aberta, eu só fecho quando fecho o programa.

Em todos os comandos eu utilizo ela(Dbdados).

As recordsets é que estão desconectadas.

 

Agora quqndo se trata de eliminar dados de tabelas relacionadas, há quem trabalhe com tabelas independentes (isto é sem hierarquia entre as mesmas) e fazendo apenas a verificação ao nível do programa. Eu trabalho de forma diferente, isto é, estabeleço as relações e as hierarquias ao nível do proprio access.

Se se trabalha com tabelas efectivamente relacionadas, temos que começar os "deletes" ao contrário, isto é deletendo primeiro as tabelas mais baixas da hierarquia e só no fim a mais alta, senão causaremos erros no programa e ele não actuará.

Se se trabalha com tabelas não relacionadas ao nível do banco de dados então os deletes podem ser feitos por qualquer ordem, é preciso é que ao deletar-mos os registos da tabela "mãe", deletemos todos os que com ela se relacionam porque, senão os mesmos ficarão "orfãos".

 

Não sei se me fiz entender, pelo menos, esforcei-me, pombas!

 

João Mateus

     
tamanini
não registrado
Postada em 16/07/2004 08:50 hs   
Já consegui aqui!
Eu fiz com recordset e funcionou, o problema é que eu estava colocando adOpenStatic!
Coloquei adOpenKeySet funcionou!
Podem fechar o tópico, eu não posso fechar, entrei sem me logar!
[]'s
 
Marcelo Tamanini
     
Página(s): 2/2     « ANTERIOR  


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

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

HTML DESLIGADO

     
 VOLTAR

  



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