Ir para conteúdo

Arquivado

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

Irenko

Msg

Recommended Posts

Só falta um pouco para encerrar esse codigo e o problema esta nesse primeiro bloco. Esse codigo só deve entrar em ação se o campo Dados.FlagReq para todos os itens do documento for igual a (Requisitado), tentei ContaReq > 1 e ContaReq >= 1 e nada. Não estou sabendo como percorrer o campo. Agradeço se alguem puder ajudar.

Set BuscaReq = New ADODB.Recordset
If BuscaReq.State = 1 Then BuscaReq.Close
BuscaReq.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq FROM LMnr, Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "')and Dados.FlagReq = 'Requisitado'", ConexaoLM, adOpenKeyset, adLockPessimistic
ContaReq = 0
Do While Not BuscaReq.EOF
  ContaReq = ContaReq + 1
  BuscaReq.MoveNext
Loop
If ContaReq > 1 Then
   MsgBox "Todo material de estoque dessa LM já foi requisitado.", vbCritical, "Erro de pesquisa"
   Exit Sub
End If
BuscaReq.Close
Set BuscaReq = Nothing

Aqui o código completo:

Private Sub CmdBuscar_Click()
LimpaTudo
Dim Conta As Integer
Dim ContaReq As Integer
Dim Procura As String
Dim LM_BuscaGerados As Recordset
Dim BuscaInexistente As Recordset
Dim BuscaReq As Recordset
Procura = TxtBuscaLM.text
NR_Copia = TxtBuscaLM.text
  
Set BuscaReq = New ADODB.Recordset
If BuscaReq.State = 1 Then BuscaReq.Close
BuscaReq.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq FROM LMnr, Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "')and Dados.FlagReq = 'Requisitado'", ConexaoLM, adOpenKeyset, adLockPessimistic
ContaReq = 0
Do While Not BuscaReq.EOF
  ContaReq = ContaReq + 1
  BuscaReq.MoveNext
Loop
If ContaReq > 1 Then
   MsgBox "Todo material de estoque dessa LM já foi requisitado.", vbCritical, "Erro de pesquisa"
   Exit Sub
End If
BuscaReq.Close
Set BuscaReq = Nothing

Set BuscaInexistente = New ADODB.Recordset
  If BuscaInexistente.State = 1 Then BuscaInexistente.Close
     BuscaInexistente.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq AS Flag FROM LMnr,Dados WHERE LMnr.LM_1 = Dados.LM_1 And Dados.LM_1 = '" & Procura & "'", ConexaoLM, adOpenKeyset, adLockPessimistic
      If BuscaInexistente.RecordCount = 0 Then
         MsgBox "Lista de Material não cadastrada!", vbCritical, "Erro de pesquisa"
         Exit Sub
      Else
        Do While Not BuscaInexistente.EOF
          If BuscaInexistente!Dispositivo = "" Or BuscaInexistente!Dispositivo = "103" Or BuscaInexistente!Dispositivo = "203" Or BuscaInexistente!Dispositivo = "000" Then
             MsgBox "Não existe nesta Lista de Material item de estoque!", vbCritical, "Erro de pesquisa"
             Exit Sub
          ElseIf IsNull(BuscaInexistente!Flag) Then
             MsgBox "Lista de Material ainda não foi baixada. É necessário efetuar a baixa dos itens para gerar a requisição!", vbCritical, "Erro de pesquisa"
             Exit Sub
          End If
          BuscaInexistente.MoveNext
        Loop
      End If
      BuscaInexistente.Close
      Set BuscaInexistente = Nothing
  
            
Set LM_Busca = New ADODB.Recordset
If LM_Busca.State = 1 Then LM_Busca.Close
   LM_Busca.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq FROM LMnr, Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "') and Dados.Codigo = '' and Dados.FlagReq = 'Pendente'", ConexaoLM, adOpenKeyset, adLockPessimistic
    
Conta = 0
Do While Not LM_Busca.EOF
Conta = Conta + 1
LM_Busca.MoveNext
Loop

If Conta >= 1 Then
MsgBox "Atenção!! Exitem ainda" & " " & Conta & " items pendentes para baixa nesta Lista de Material.", vbInformation, "Informação da Lista"
End If
LM_Busca.Close
Set LM_Busca = Nothing

Set LM_BuscaGerados = New ADODB.Recordset
If LM_BuscaGerados.State = 1 Then LM_BuscaGerados.Close
   LM_BuscaGerados.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq FROM LMnr,Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "') and Dados.Codigo <> null and Dados.FlagReq = 'Gerado'", ConexaoLM, adOpenKeyset, adLockPessimistic

  Do While Not LM_BuscaGerados.EOF
    CarregaCabecalho
    CarregaDados
    LM_BuscaGerados.MoveNext
  Loop
  LM_BuscaGerados.Close
  Set LM_BuscaGerados = Nothing
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só falta um pouco para encerrar esse codigo e o problema esta nesse primeiro bloco. Esse codigo só deve entrar em ação se o campo Dados.FlagReq para todos os itens do documento for igual a (Requisitado), tentei ContaReq > 1 e ContaReq >= 1 e nada. Não estou sabendo como percorrer o campo. Agradeço se alguem puder ajudar.

Set BuscaReq = New ADODB.Recordset
If BuscaReq.State = 1 Then BuscaReq.Close
BuscaReq.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq FROM LMnr, Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "')and Dados.FlagReq = 'Requisitado'", ConexaoLM, adOpenKeyset, adLockPessimistic
ContaReq = 0
Do While Not BuscaReq.EOF
  ContaReq = ContaReq + 1
  BuscaReq.MoveNext
Loop
If ContaReq > 1 Then
   MsgBox "Todo material de estoque dessa LM já foi requisitado.", vbCritical, "Erro de pesquisa"
   Exit Sub
End If
BuscaReq.Close
Set BuscaReq = Nothing

Para ser bem sincero, não entendi o que você precisa aqui não.

Você disse que só pode entrar em ação se todos os dados.flagreq for igual a 'requisitado'. Mas lógico que sempre serão todos igual a 'requisitado', já que na sua query mandou pegar somente os dados cujo dados.flagreq = 'requisitado'.

Quanto ao seu loop, você o fez para contar a quantidade de registros e isso não é necessário. O recordset tem uma propriedade chamada recordcount que te dá essa quantidade.

E depois você compara o resultado do loop pra ver se é maior que 1. Não estou entendendo onde você quer chegar.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio praticamente esta resolvido, mas fui colocar para rodar e pintou outro problema. Veja o primeiro bloco é o seguinte: a query pede se o campo Dados.FlagReq <> 'Requisitado', mas se for assim ele vai pegar vazio tambem ai não carrega a msg em negrito. Alguem tem uma ideia de como resolver isso? O campo e texto e o codigo é para tratar esse campo, se você quizer tenho um projeto exemplo é so informar para onde devo manda-lo. Grato.

 

 

Private Sub CmdBuscar_Click()
LimpaTudo
Dim Conta As Integer
Dim ContaReq As Integer
Dim Procura As String
Dim LM_BuscaGerados As Recordset
Dim BuscaInexistente As Recordset
Dim BuscaReq As Recordset
Procura = TxtBuscaLM.text
NR_Copia = TxtBuscaLM.text
Dim X
Set BuscaReq = New ADODB.Recordset
BuscaReq.Open "SELECT count(LMnr.LM_1) as ENCONTRADOS FROM LMnr, Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "') and (Dados.Dispositivo='003' and Dados.FlagReq <> 'Requisitado')", ConexaoLM, adOpenKeyset, adLockPessimistic
If BuscaReq!ENCONTRADOS = 0 Then
   MsgBox "Todo material de estoque dessa LM já foi requisitado.", vbCritical, "Erro de pesquisa"
   Exit Sub
End If
BuscaReq.Close
Set BuscaReq = Nothing

Set BuscaInexistente = New ADODB.Recordset
  If BuscaInexistente.State = 1 Then BuscaInexistente.Close
     BuscaInexistente.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq AS Flag FROM LMnr,Dados WHERE LMnr.LM_1 = Dados.LM_1 And Dados.LM_1 = '" & Procura & "'", ConexaoLM, adOpenKeyset, adLockPessimistic
      If BuscaInexistente.RecordCount = 0 Then
         MsgBox "Lista de Material não cadastrada!", vbCritical, "Erro de pesquisa"
         Exit Sub
      Else
        Do While Not BuscaInexistente.EOF
          If BuscaInexistente!Dispositivo = "" Or BuscaInexistente!Dispositivo = "103" Or BuscaInexistente!Dispositivo = "203" Or BuscaInexistente!Dispositivo = "000" Then
             MsgBox "Não existe nesta Lista de Material item de estoque!", vbCritical, "Erro de pesquisa"
             Exit Sub
          [b]If IsNull(BuscaInexistente!Flag) Then
             MsgBox "Lista de Material ainda não foi baixada. É necessário efetuar a baixa dos itens para gerar a requisição!", vbCritical, "Erro de pesquisa"
             Exit Sub[/b]
          End If
          BuscaInexistente.MoveNext
        Loop
      End If
      BuscaInexistente.Close
      Set BuscaInexistente = Nothing
  
            
Set LM_Busca = New ADODB.Recordset
If LM_Busca.State = 1 Then LM_Busca.Close
   LM_Busca.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq FROM LMnr, Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "') and Dados.Codigo = '' and Dados.FlagReq = 'Pendente'", ConexaoLM, adOpenKeyset, adLockPessimistic
    
Conta = 0
Do While Not LM_Busca.EOF
Conta = Conta + 1
LM_Busca.MoveNext
Loop

If Conta >= 1 Then
MsgBox "Atenção!! Exitem ainda" & " " & Conta & " items pendentes para baixa nesta Lista de Material.", vbInformation, "Informação da Lista"
End If
LM_Busca.Close
Set LM_Busca = Nothing

Set LM_BuscaGerados = New ADODB.Recordset
If LM_BuscaGerados.State = 1 Then LM_BuscaGerados.Close
   LM_BuscaGerados.Open "SELECT LMnr.LM_1,Dados.Dispositivo,Dados.Codigo,Dados.LM_1,Dados.FlagReq FROM LMnr,Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "') and Dados.Codigo <> null and Dados.FlagReq = 'Gerado'", ConexaoLM, adOpenKeyset, adLockPessimistic

  Do While Not LM_BuscaGerados.EOF
    CarregaCabecalho
    CarregaDados
    LM_BuscaGerados.MoveNext
  Loop
  LM_BuscaGerados.Close
  Set LM_BuscaGerados = Nothing

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Irenko, vamos lá, primeiro de tudo que sua comparação está errada nessa parte:

 

BuscaReq.Open "SELECT count(LMnr.LM_1) as ENCONTRADOS FROM LMnr, Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "') and (Dados.Dispositivo='003' and Dados.FlagReq <> 'Requisitado')", ConexaoLM, adOpenKeyset, adLockPessimistic
If BuscaReq!ENCONTRADOS = 0 Then
   MsgBox "Todo material de estoque dessa LM já foi requisitado.", vbCritical, "Erro de pesquisa"
   Exit Sub
End If
Está errada porque quando você fez isso "If BuscaReq!ENCONTRADOS = 0 Then" você está comparando se o valor contido no campo "ENCONTRADOS" é igual a zero, e não se a quantidade de dados retornados é zero.

Para dar certo faça assim:

BuscaReq.Open "SELECT count(LMnr.LM_1) as ENCONTRADOS FROM LMnr, Dados WHERE (LMnr.LM_1 = '" & Procura & "' And Dados.LM_1 = '" & Procura & "') and (Dados.Dispositivo='003' and Dados.FlagReq <> 'Requisitado')", ConexaoLM, adOpenKeyset, adLockPessimistic
If BuscaReq.eof Then
   MsgBox "Todo material de estoque dessa LM já foi requisitado.", vbCritical, "Erro de pesquisa"
   Exit Sub
End If
Assim ele fará a consulta por tudo que é diferente de "requisitado". Se for EOF (end o file) quer dizer que não retornou nenhum dado, e nesse caso tudo está como requisitado.

 

Quanto a não querer que pegue os dados vazios, basta incluir essa condição em sua query, exemplo:

...(Dados.Dispositivo='003' and Dados.FlagReq <> 'Requisitado' and Dados.FlagReq <> '' and Dados.FlagReq not is null)", ConexaoLM, adOpenKeyset, adLockPessimistic

Teste e veja se dá certo.

 

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.