MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


    [Resolvido]Consulta em campos através de um RecordSet

    avatar
    Convidado
    Convidado


    [Resolvido]Consulta em campos através de um RecordSet Empty Consulta em campos através de um RecordSet

    Mensagem  Convidado 10/8/2011, 23:20

    Amigos, tenho este código que carrega um recordSet em uma banco externo...

    Faço a identificação do regisrtro no recordSet coincidente com o controle...
    preciso depois disto.. Checar os campos que não são nulos e me retornar uma String para preencher uma listBox via AddItem com os campos que não são nulos.. Como fazer?


    'On Error GoTo TrataErro

    Parametros_de_Inicializacao "SysPen.par"
    Dim db As DAO.Database
    Dim ws As DAO.Workspace
    Dim rs As DAO.Recordset
    Dim NomeBD As String
    Dim StrPath As String
    Dim StrSqlDetentos As String
    Dim I

    NomeBD = "Bio_be.accdb"

    'String com path para conexão com a base de dados.
    StrPath = DirBancoDados & NomeBD ' Conecta ao banco de dados comum
    Set db = OpenDatabase(StrPath)


    Set ws = DBEngine.Workspaces(0)
    Set db = ws.OpenDatabase(DirBancoDados & "\Bio_Be.accdb", False, False, "MS Access;PWD=senha")

    StrSqlDetentos = ("SELECT * FROM tblDigital")

    Set rs = db.OpenRecordset(StrSqlDetentos)

    rs.FindFirst "ID_Detento = " & Me.CboDetento.Column(0) ' Encontrar primeiro registro com o código do detento.

    .... Apartir daqui preciso desta solução


    Grato
    avatar
    Convidado
    Convidado


    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Convidado 10/8/2011, 23:31

    Pensei em algo assim.. Mas não deu certo..

    Set rs = db.OpenRecordset(StrSqlDigital)

    rs.FindFirst "ID_Detento = " & Me.CboDetento.Column(0) ' Encontrar primeiro registro com o código do detento.
    If IsNull(rs!PolDir) Or rs!PolDir = "" Then
    MsgBox "Não há registro"
    Else
    MsgBox "Registro Encontrado"
    End If
    avatar
    Convidado
    Convidado


    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Convidado 10/8/2011, 23:43

    Consegui algo assim:

    rs.FindFirst "ID_Detento = " & Me.CboDetento.Column(0) ' Encontrar primeiro registro com o código do detento.
    If rs.NoMatch Then ' Se o código ainda não está cadastrado...
    EscreveLog ("Registro não encontrado em Digitais")
    Else ' ... caso contrário...
    EscreveLog (rs!PolDir)
    End If

    Mas A função escreve log inseri na listBox o conteudo do rs!PolDir.. e são apenas dígitos binários

    Quero que ele cheque se o Rs!PolDir é nulo ou não caso não seja, adiciono uma mensagem Dizendo:
    Registro Polegar Direito Existente

    Se puderem me ajudar fico grato
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Alexandre Neves 11/8/2011, 19:04

    hary,

    Não entendi, explique melhor
    avatar
    Convidado
    Convidado


    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Convidado 11/8/2011, 20:50

    Eu abro um recordSet par cadastrar Digitais....
    A tabela contém os campos da seguinte forma:

    ID_Detento | Digital | Dedo | Mao |

    Onde o mesmo ID pode ter no máximo 10 registros:

    Detento ID-1 | Dados Binarios | Polegar | Direita
    Detento ID-1 | Dados Binarios | Indicador | Direita
    Detento ID-1 | Dados Binarios | Médio | Direita
    ....
    Detento ID-2 | Dados Binarios | Polegar | Direita
    Detento ID-2 | Dados Binarios | Indicador | Direita
    Detento ID-2 | Dados Binarios | Médio | Direita


    Na hora do cadastro pretendo csarregar o recordSet, porem antes pesquisá-lo, se encontrar algum registro cujo:

    ID = Campo no Form e Dedo = Campo no Form.... Emitir MsgBox e Exit Sub

    Caso contrário... Cadastrá-lo...


    O Código completo:

    Código:
    Private Sub NovoRegistro()
    'On Error GoTo TrataErro

    Parametros_de_Inicializacao "SysPen.par"
    Dim db As DAO.Database
    Dim ws As DAO.Workspace
    Dim rs As DAO.Recordset
    Dim NomeBD As String
    Dim StrPath As String
    Dim StrSqlDetentos As String
    Dim I
    Dim StrID As Double

    StrID = Me.txtID
    NomeBD = "Bio_be.accdb"
       
        'String com path para conexão com a base de dados.
        StrPath = DirBancoDados & NomeBD    ' Conecta ao banco de dados comum
        Set db = OpenDatabase(StrPath)

       
    Set ws = DBEngine.Workspaces(0)
    Set db = ws.OpenDatabase(DirBancoDados & "\Bio_Be.accdb", False, False, "MS Access;PWD=senha")

                    StrSqlDetentos = ("SELECT * FROM tblDigital")

    Set rs = db.OpenRecordset(StrSqlDetentos)

    MsgBox rs.RecordCount
        I = MsgBox("Voce está adicionando novo registro de digital para este detento, deseja prosseguir ?", vbYesNo, "Confirmação")
            If I = vbYes Then
           
       
    '********DIGITAIS*************************************************************************

      If IsNull(txtBotao) Or txtBotao = "" Then
            MsgBox "Não foi selecionado o dedo a ser digitalizado", vbInformation, "Atenção!"
            Exit Sub
        End If
     
            If Not MoldeValido() Then
                EscreveLog ("Erro na captura da digital")
            Exit Sub
        End If
    'Multi_Find rs, "ID_Detento =' & Str' "And Dedo =' & Me.txtDedo'"  >>>>>>> tentei assim e...(Este utiliza a função que faz o filtro atrves do RecordSet Clone)

    'rs.Filter = "ID_Detento =" & StrID ' And "Dedo = " & Me.txtDedo '>>>>>>> assim


            If Not rs.EOF Then
                MsgBox "Já existe este dedo cadastrado!", vbInformation, "Atenção"

            Else
           
                rs.AddNew ' ... abre a edição de registro...
                rs![ID_Detento] = Me.txtID
                rs!Digital = Serialize(template.tpt)
                rs!Dedo = Me.txtDedo
                rs!Mao = Me.txtMao
                EscreveLog ("Dedo " & Me.txtDedo & " " & Me.txtMao & " Gravado com sucesso")
                rs.Update ' ... adiciona em novo registro...
                            Me("" & Me.txtBotao & "").Caption = "INSERIDO"
                            Me("" & Me.txtBotao & "").Enabled = False
    End If
    End If
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
    Exit Sub

    TrataErro:
        DoCmd.SetWarnings True
        DoCmd.Hourglass False
        MsgBox Error, , "Erro nº" & Err & " ao clicar em Cadastrar"
    End Sub


    Última edição por Harysohn em 11/8/2011, 20:53, editado 1 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Convidado 11/8/2011, 20:52

    Olha só... O código acima é um pouco diferente da origem do tópico pois modifiquei o modelo como gravo na tabela...
    Então o problema agora passou a ser o descriminado acima....
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Alexandre Neves 11/8/2011, 21:26

    Hary,

    para procurar o que pretende, coloque
    rs.FindFirst "ID_Detento = " & Me.CboDetento.Column(0) & " and Dedo='" & Me.CboDedo.Column(0) &"'" ' Encontrar primeiro registro com o código do detento.
    If rs.NoMatch Then ' Se o código ainda não está cadastrado...
    msgbox "Já existe registo para o dedo " & & Me.CboDedo.Column(0) & " do detento " & Me.CboDetento.Column(0)
    exit sub
    Else ' ... caso contrário...
    ...
    End If
    avatar
    Convidado
    Convidado


    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Convidado 11/8/2011, 22:17

    Eu já havia até tentado este código amigão.. eu utilizo semlhante na pesquisa, mas apenas para um campo..

    Creio que estava escrevendo errado quando acrescentei mais um campo e a cláusula And..

    Agroa: Perfect!!!

    Grato e tenha uma ótima noite
    avatar
    Convidado
    Convidado


    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Convidado 11/8/2011, 23:30

    Código completo

    Código:
    'Função para adição de novo registro de digital na tabela
    Private Sub NovoRegistro()
    'On Error GoTo TrataErro

    Parametros_de_Inicializacao "SysPen.par"
    Dim db As DAO.Database
    Dim ws As DAO.Workspace
    Dim rs As DAO.Recordset
    Dim rsDet As DAO.Recordset
    Dim NomeBD As String
    Dim StrPath As String
    Dim StrSQLDetentos As String, StrSQLDigital As String
    Dim I
    Dim DetIdent As String

    NomeBD = "Bio_be.accdb"
       
        'String com path para conexão com a base de dados.
        StrPath = DirBancoDados & NomeBD    ' Conecta ao banco de dados comum
        Set db = OpenDatabase(StrPath)

       
    Set ws = DBEngine.Workspaces(0)
    Set db = ws.OpenDatabase(DirBancoDados & "\Bio_Be.accdb", False, False, "MS Access;PWD=senha")

                    StrSQLDigital = ("SELECT * FROM tblDigital")
                    StrSQLDetentos = ("SELECT * FROM Detentos")
                   
    Set rs = db.OpenRecordset(StrSQLDigital)
    Set rsDet = db.OpenRecordset(StrSQLDetentos)

    MsgBox rs.RecordCount
        I = MsgBox("Voce está adicionando novo registro de digital para este detento, deseja prosseguir ?", vbYesNo, "Confirmação")
            If I = vbYes Then
           
       
    '********DIGITAIS*************************************************************************

      If IsNull(txtBotao) Or txtBotao = "" Then
            MsgBox "Não foi selecionado o dedo a ser digitalizado", vbInformation, "Atenção!"
            Exit Sub
        End If
     
            If Not MoldeValido() Then
                EscreveLog ("Erro na captura da digital")
            Exit Sub
        End If

        rs.FindFirst "ID_Detento = " & Me.txtID & " and Dedo='" & Me.txtDedo & "'" ' Encontrar primeiro registro com o código do detento.

    If rs.NoMatch Then ' Se o código ainda não está cadastrado...
          rs.AddNew ' ... abre a edição de registro...
                rs![ID_Detento] = Me.txtID
                rs!Digital = Serialize(template.tpt)
                rs!Dedo = Me.txtDedo
                rs!Mao = Me.txtMao
                EscreveLog ("Dedo " & Me.txtDedo & " " & Me.txtMao & " Gravado com sucesso")
                rs.Update ' ... adiciona em novo registro...
                Me("" & Me.txtBotao & "").Caption = "INSERIDO"
                Me("" & Me.txtBotao & "").Enabled = False
            Else
                rsDet.FindFirst "ID = " & rs!ID_Detento  ' Encontrar primeiro registro com o código do detento."
                DetIdent = rsDet!Nome & Space(1) & rsDet!Sobrenome
                MsgBox "Já existe registo para o dedo " & rs!Dedo & " do detento " & DetIdent, vbInformation, "Atenção"
               



           
               
    End If
    End If
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
    Exit Sub

    TrataErro:
        DoCmd.SetWarnings True
        DoCmd.Hourglass False
        MsgBox Error, , "Erro nº" & Err & " ao clicar em Cadastrar"
    End Sub

    Saudações e obrigado pela Ajuda

    Conteúdo patrocinado


    [Resolvido]Consulta em campos através de um RecordSet Empty Re: [Resolvido]Consulta em campos através de um RecordSet

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 23/11/2024, 01:23