|
|
Postada em 08/02/2006 15:16 hs
tenho uma rotina para verificar o que esta duplicado no sistema e com isso eu elimino da MSHflexgrid. Ateh ai tranquilo soh que quando eu uso RemoveItem pra tirar da grid a linha ateh a contagem de 170 linhas ele elimina normal depois para e a minha grid tem mais de 500 linhas para serem eliminadas. Sera que existe alguma limitacao nesse requisito?? To postando a rotina que faz isso. grR eh a minha MshFlexGrid.
Private Function SemHorarios() Dim valR As Integer Dim nCartao As String Dim Sql As String Dim totalLinhas As Integer Dim rsC As New ADODB.Recordset
On Error Resume Next grR.Refresh
Conecta True totalLinhas = grR.Rows valR = 1
Do While valR <= totalLinhas
Sql = "Select cartao From horario_cad Where cartao = '" & grR.TextMatrix(valR, 0) & "'" Set rsC = CreateObject("ADODB.Recordset") rsC.Source = Sql Set rsC.ActiveConnection = Cn rsC.Open
If Not rsC.EOF Then grR.RemoveItem valR grR.Refresh End If
rsC.Close Set rsC = Nothing
valR = valR + 1 Loop Conecta False
If Err.Number <> 0 Then Call MostraErro(Err.Number, Err.Description, Me, "SemHorarios") Exit Function End If
End Function
|
|
|
|
|
|
Donkey
|
PRESIDENTE PRUDENTE SP - BRASIL
|
|
Postada em 09/02/2006 07:45 hs
Acho que essa sua rotina esta com um bug, por exemplo,quando vc da um removeitem todas as linhas abaixo são elevadas uma linha a cima, seu fonte não trata isso, fazendo com que a proxima linha testada não seja a correta. Ou vc apenas marca a linha para apagar e realmente só apaga ela no fim da operação, ou quando remover vc diminui o contador em duas linhas.... talvez seja ai o seu problema. T+
|
|
|
|
|
|
Postada em 09/02/2006 08:24 hs
E como eu faria esse tratamento de elevar uma linha acima?
Voce disse pra eu marcar e apagar a linha no fim da operacao soh que eu tenho +/- umas 300 linhas pra fazer isso - como eu marco e apago no fim?
|
|
|
|
Donkey
|
PRESIDENTE PRUDENTE SP - BRASIL
|
|
Postada em 09/02/2006 20:34 hs
Vc pode ir apagando, + quando vc remover a linha, o contador que vc utiliza para saber qual linha esta teria que ser decrementado 2 para continuar dando certo. O que eu falei de marcar, seria criar uma coluna, pode deixar ela invisivel com .colwith (coluna) = 0, e se tiver que marvar vc setaria por exemplo, flex.textmatrix(linha, coluna) = * E no fim da verificação, faria um outro for Eliminando todas as linhas com * em tal coluna.... T+
|
|
|
|
|
|
Postada em 10/02/2006 06:17 hs
Consegui resolver o problema. Segue como ficou o codigo para quem interessar.
Private Function SemHorarios() Dim valR As Integer Dim nCartao As String Dim Sql As String Dim totalLinhas As Integer Dim rsC As New ADODB.Recordset
On Error Resume Next
Conecta True valR = grR.Rows
Do While valR >= 1 Sql = "Select cartao From horario_cad Where cartao = '" & grR.TextMatrix(valR, 0) & "'" Set rsC = CreateObject("ADODB.Recordset") rsC.Source = Sql Set rsC.ActiveConnection = Cn rsC.Open If Not rsC.EOF Then grR.RemoveItem valR grR.Refresh End If rsC.Close Set rsC = Nothing valR = valR - 1 Loop Conecta False
If Err.Number <> 0 Then Call MostraErro(Err.Number, Err.Description, Me, "SemHorarios") Exit Function End If
End Function
|
|
|
|