Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com Spread


Xistyle

Pergunta

Bom dia!

Estou trabalhando com a grid Spread e surgiram alguns problemas. Basicamente o mesmo mas de formas diferentes. Estou fazendo uma consulta, a partir da grid. A idéia é a seguinte: a grid contém um botão, que chamará um outro form (form de consulta normal ou form de consulta com checks para multi-seleção).

A chamada está OK. Seleciono os dados ou digito e retorna os dados normalmente. Porém, ao clicar nos dados que quero, eles deveriam aparecer no form em background, que fez a chamada a esses forms de consulta. O problema é que, ao clicar para que eles apareçam nesse form, a linha em questão (que cliquei para chamar o form de consulta) some.

Estranho que, se eu fizer o processo todo debugando, dá certo.

Alguém tem uma idéia do que possa ser?

Se precisarem de mais informações ou estiver confuso, estou full time aqui.

Abraços!

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

não entendi direito o problema, mas se debugando funciona, 99% de certeza q é problema de foco. talvez algum evento gotfocus ou lostfocus esta ferrando seu projeto, funciona debugando, porque a cada linha o foco volta pra janela de codigo.

agora não entendi essa parte da linha sumir. ela simplesmente desaparece como se tivesse sido excluida??

se você der um control + break depois disso e for checar a quantidade de linhas do grid, ele não considera mesmo essa linha??

e isso acontece depois q você clica pra aparecer la??

poste então o codigo do botao onde você clica.

Link para o comentário
Compartilhar em outros sites

  • 0

O código é bem grande kuroi. Mas é isso mesmo que você disse: eu tenho um form chamado frmParametro. Esse form possui uma spread. A spread pode ser alimentada com parâmetros de vários tipos: datas, textos, números, etc.

Quando trata-se de texto, vem o problema: o texto pode ser uma consulta normal (ex.: cliente = José) ou multi-seleção por checks (ex.: status = Ativos, Suspenso).

Dependendo da consulta, um form é aberto por meio do botão que é clicado na grid da frmParametro: frmConsultaMultiSelecao e frmConsultaNormal.

Todo o código está feito de forma a carregar os dados desses forms de consulta para o frmParametro (porque a frmParametro foi baseada numa tela de mesmo funcionamento).

O problema é que, ao selecionar os dados que quero desses forms de consulta, o form da Unload e esses dados são passados para o frmParametro. Debugando todo o processo, a spread é alimentada normalmente. Se eu apenas deixar em execução, a linha da spread some! Fiz o teste já no Immediate para retornar o total de linhas da spread e ela desconsidera essa linha que foi inserida, como se nunca tivesse existido.

Porém, no form que foi baseado essa tela funciona perfeitamente. A diferença é que no outro form já está definido o número de linhas da spread. No frmParametro é possível adicionar e remover linhas, não tendo então um número exato de parâmetros.

A frmParametro abre em Modal e as Consultas também.

Link para o comentário
Compartilhar em outros sites

  • 0

hum, ta estranho... depois eu do uma pensada melhor com mais calma...

mas uma ideia q tive aqui agora seria: ponha um break point (F9) em todas as linhas onde você manda excluir alguma linha do grid. e va executando o programa normalmente. e veja se ele não vai parar em nenhum desses break. se a linha ta sumindo, é porque ela deve estar sendo excluida no codigo, ne.

Link para o comentário
Compartilhar em outros sites

  • 0

Não parou em nenhum breakpoint.

Existe a possibilidade de haver alguma perda de parâmetro, não sei bem, mas entre o fechamento de um form e foco no outro?

Nunca trabalhei com Collection e, para a Consulta normal é usada uma Collection.

O estranho é que ela não influenciaria de forma alguma na perda da linha... ;s Que estranho viu cara. Ainda mais pelo fato de funcionar debugando :/

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz outro teste agora: forcei (via debug) a inserção de uma linha (parâmetro) e seu respectivo valor (via consulta).

Após isso, tentei alterar o valor deste mesmo parâmetro (ou seja, linha já existente).

Não funcionou. O valor anterior do parâmetro permanece, como se nada tivesse ocorrido.

Não achei nada parecido no Google. De fato não sei nem mais como devo pesquisar hehe ;)

Link para o comentário
Compartilhar em outros sites

  • 0
Existe a possibilidade de haver alguma perda de parâmetro, não sei bem, mas entre o fechamento de um form e foco no outro?

Nunca trabalhei com Collection e, para a Consulta normal é usada uma Collection.

xistyle, como você ta vinculando os dados no grid?? você ta setando os dados tipo na propriedade DataSource a partir de um recordset ou esta colocando os dados na mao pelo codigo??

e como exatamente você ta usando essa collection??

Que estranho viu cara. Ainda mais pelo fato de funcionar debugando :/

é estranho mesmo, mas sempre quando ocorreu isso comigo (funcionar debugando e não funcionar normalmente) foi por causa disso q falei aqui:

se debugando funciona, 99% de certeza q é problema de foco. talvez algum evento gotfocus ou lostfocus esta ferrando seu projeto, funciona debugando, porque a cada linha o foco volta pra janela de codigo.

Fiz outro teste agora: forcei (via debug) a inserção de uma linha (parâmetro) e seu respectivo valor (via consulta).

Após isso, tentei alterar o valor deste mesmo parâmetro (ou seja, linha já existente).

Não funcionou. O valor anterior do parâmetro permanece, como se nada tivesse ocorrido.

xistyle, você ta querendo dizer q fez um insert no banco?? se for isso, ele não vai atualizar imediatamente no grid, ne. e nem num recordset caso você esteja esperando q isso aconteca, já q o recordset esta carregado na memoria e quando você faz o insert ele altera direto no banco.

a não ser, imagino, caso você esteja usando o metodo .AddNew e/ou .Update do recordset, ai imagino q os dados sejam atualizados nele, mas mesmo assim não vai atualizar no grid direto. pra atualizar o grid, é você mesmo q tem q fazer.

Link para o comentário
Compartilhar em outros sites

  • 0

kuroi, percebi onde está ocorrendo a divergência.

Os dados da tela de consulta por multi-seleção são armazenados em matrizes. Após armazenar os valores, a tela chama o Unload do Form.

'#  Pega todos os id's das linhas checadas
    For mlngLinha = 1 To lvwME.ListItems.Count

        '#  Armazena o Id do item selecionado
        If lvwME.ListItems(mlngLinha).Checked = True Then
            ReDim Preserve mlngIdSelecionados(mlngIndiceMatriz)
            ReDim Preserve mstrSelecionados(mlngIndiceMatriz)
            mlngIdSelecionados(mlngIndiceMatriz) = lvwME.ListItems(mlngLinha).SubItems(1)
            mstrSelecionados(mlngIndiceMatriz) = lvwME.ListItems(mlngLinha).Text
            mlngIndiceMatriz = mlngIndiceMatriz + 1
            mcolIDs.Add lvwME.ListItems(mlngLinha).SubItems(1)
            '# Se tem alguma item selecionado
            lblnPassou = True
            mintContador = mintContador + 1
        End If

    Next mlngLinha
   
          lblnAvancar = True
          Unload Me

    End If

Exit Sub
Neste unload é chamada uma função global que remove o form de consulta da coleção de forms do projeto.
Form_Unload

If lblnAvancar = True Then
        Call gsubFecharFormulario(Me)
        Unload Me
        Exit Sub
End If
Procedure de FecharFormulário
Public Sub gsubFecharFormulario(ByVal lfrmForm As Form)
On Error GoTo erro

    Dim llngContador  As Long

    For llngContador = 1 To gcolFormularioGlobal.Count
        If lfrmForm.Name = gcolFormularioGlobal(llngContador) Then
            gcolFormularioGlobal.Remove (llngContador)
            If gcolFormularioGlobal(llngContador) = False Then
                If gcolFormularioGlobal.Count <= 0 Then MDIGsoft.Show vbModal
            End If
            gcolFormularioGlobal.Remove (llngContador)
            Exit Sub
        End If
    Next llngContador

   Exit Sub

Bom, entre o Unload Me do primeiro trecho de código e o End if logo abaixo ocorre a perda dessa linha. Pelo que reparei, a perda da linha no outro formulário acontece nesse form de consulta :blink:

Coloquei um break no lblnAvancar = True. Até aí corre tudo bem. Coloquei um break no Unload Me, ele já remove a linha no form que receberá os valores. Agora, se fizer tudo isso debugando, não haverá problemas :/

Respondendo uma de suas perguntas: a grid não vai receber valores diretamente do banco. A tela de consulta realiza toda a pesquisa e apenas passa o valor final pra esse form que está perdendo a linha.

No mínimo, intrigante :blink: Lembrando que esse processo é realizado igualmente por outro form e não apresenta problemas.

Link para o comentário
Compartilhar em outros sites

  • 0

kuroi, não sei bem explicar o que houve... coloquei um Watch para verificar as mudanças no MaxRows da grid. De alguma forma, é chamada o Form_Activate do form que perdia a linha. Neste Activate, é feito um select para retornar os dados já cadastrados.

Tento em vista que a linha vinda dos forms de consulta ainda não foram gravadas em banco (estão apenas sendo visualizadas pelo usuário) ela some.

Deve ser o problema de foco que tu falou mesmo. Mas não entendi o porque de entrar no Activate quando deu um Unload no form de consulta.

Obrigado pela paciência e colaboração!

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

a so uma dica, tenta tirar esse codigo q ta no activate e por no load do formulario.

acho q o activate é chamado (alem de quando o ele é criado) toda vez q o você vem de um form pro outro.

o load so vai acontecer quando o form é criado.

ou se, por um acaso, você precisa q esse codigo esteja no activate por algum outro motivo, então tente usar um flag (pode ser uma variavel publica, ou um label oculto em qualquer formulario) q avise quando você esta vindo do form de consulta. ai nesse caso você não executaria esse codigo.

veja ai se essa dica ajuda em alguma coisa e poste ai, ai se não resolver, quando eu tiver mais tempo aqui eu do uma lida nos seus dois posts com mais calma e vejo se tenho otra ideia.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...