ERROR 381

MAFACILITY 09/01/2010 17:11:31
#331467
Tenho um sistema que estava funcionando muito bem, ele em sua execução carrega um msflexgrid, só que agora em sua execução está dando o seguinte erro run time error 381 subscript out of range. Está dando este poque estorou o numero de registro do controle? Ele está carregando dados com 17 colunas e 50 linhas.
MARCELO.TREZE 09/01/2010 18:01:23
#331468
Resposta escolhida
colega posta o código mas o problema pode ser mais simples.
MAFACILITY 09/01/2010 18:50:55
#331469
Este software funciona há quase um ano e nunca deu erro algum, começou dar erro após a inclusão de um novo imóvel, acho eu que algum campo pode está ultrapassando a largura do msflexgrid, vou aumentar alguns valores da propriedade MSFlexGrid2.ColWidth(), pois o último registro teve campos da inclusão que tive que abreviar, pois atingia o valor da propriedade maxlength.


Public Sub carregaimo()
Dim i
Dim pre As Currency

With MSFlexGrid2
.Col = 0
.Row = 0
.Text = [Ô] CÓDIGO [Ô]
.Col = 1
.Row = 0
.Text = [Ô] DATA ENTRADA[Ô]
.Col = 2
.Row = 0
.Text = [Ô] DESCRIÇÃO DO IMÓVEL[Ô]
.Col = 3
.Row = 0
.Text = [Ô] TIPO IMÓVEL[Ô]
.Col = 4
.Row = 0
.Text = [Ô] Nº QUARTOS[Ô]
.Col = 5
.Row = 0
.Text = [Ô] Nº SUITES[Ô]
.Col = 6
.Row = 0
.Text = [Ô] CATEGORIA[Ô]
.Col = 7
.Row = 0
.Text = [Ô] ENDEREÇO IMÓVEL[Ô]
.Col = 8
.Row = 0
.Text = [Ô]CONDOMÍNIO[Ô]
.Col = 9
.Row = 0
.Text = [Ô]PISCINA[Ô]
.Col = 10
.Row = 0
.Text = [Ô] SAUNA[Ô]
.Col = 11
.Row = 0
.Text = [Ô] QUADRA[Ô]
.Col = 12
.Row = 0
.Text = [Ô] JARDIM[Ô]
.Col = 13
.Row = 0
.Text = [Ô] CHURRASQ.[Ô]
.Col = 14
.Row = 0
.Text = [Ô] GARAGEM[Ô]
.Col = 15
.Row = 0
.Text = [Ô] PREÇO[Ô]
.Col = 16
.Row = 0
.Text = [Ô] STATUS[Ô]
.Col = 17
.Row = 0
.Text = [Ô] CHAVES[Ô]
.Col = 18
.Row = 0
.Text = [Ô] HORA VISITA[Ô]
.Col = 19
.Row = 0
.Text = [Ô] TERRENO[Ô]
.Col = 20
.Row = 0
.Text = [Ô] ÁREA CONSTRUÍDA[Ô]
.Col = 21
.Row = 0
.Text = [Ô] PROPRIETÁRIO[Ô]
.Col = 22
.Row = 0
.Text = [Ô] TELEFONES[Ô]
.Col = 23
.Row = 0
.Text = [Ô] CELULAR[Ô]
.Col = 24
.Row = 0
.Text = [Ô] E-MAIL[Ô]
.Col = 25
.Row = 0
.Text = [Ô] RG[Ô]
.Col = 26
.Row = 0
.Text = [Ô] CPF/CNPJ[Ô]
.Col = 27
.Row = 0
.Text = [Ô] ENDEREÇO PROPRIETÁRIO[Ô]
End With
MSFlexGrid2.ColWidth(0) = 1000
MSFlexGrid2.ColWidth(1) = 1500
MSFlexGrid2.ColWidth(2) = 7000
MSFlexGrid2.ColWidth(3) = 1800
MSFlexGrid2.ColWidth(4) = 1300
MSFlexGrid2.ColWidth(5) = 1300
MSFlexGrid2.ColWidth(6) = 1800
MSFlexGrid2.ColWidth(7) = 7000
MSFlexGrid2.ColWidth(8) = 1800
MSFlexGrid2.ColWidth(9) = 1300
MSFlexGrid2.ColWidth(10) = 1300
MSFlexGrid2.ColWidth(11) = 1200
MSFlexGrid2.ColWidth(12) = 1200
MSFlexGrid2.ColWidth(13) = 1200
MSFlexGrid2.ColWidth(14) = 1200
MSFlexGrid2.ColWidth(15) = 1300
MSFlexGrid2.ColWidth(16) = 1500
MSFlexGrid2.ColWidth(17) = 1700
MSFlexGrid2.ColWidth(18) = 1800
MSFlexGrid2.ColWidth(19) = 1800
MSFlexGrid2.ColWidth(20) = 1800
MSFlexGrid2.ColWidth(21) = 5000
MSFlexGrid2.ColWidth(22) = 2500
MSFlexGrid2.ColWidth(23) = 1300
MSFlexGrid2.ColWidth(24) = 4500
MSFlexGrid2.ColWidth(25) = 1500
MSFlexGrid2.ColWidth(26) = 2000
MSFlexGrid2.ColWidth(27) = 7000
MSFlexGrid2.FixedCols = 0
[ô]-----------------------------------------------------------------------
For i = 0 To tb_im.Fields.Count - 1

Next
MSFlexGrid2.Rows = tb_im.RecordCount + 1

i = 1

MSFlexGrid1.Redraw = False
Do While Not tb_im.EOF
pre = tb_im([Ô]precoimo[Ô])
MSFlexGrid2.TextMatrix(i, 0) = tb_im([Ô]codimo[Ô])
MSFlexGrid2.TextMatrix(i, 1) = tb_im([Ô]dtent[Ô])
MSFlexGrid2.TextMatrix(i, 2) = tb_im([Ô]obsimo[Ô])
MSFlexGrid2.TextMatrix(i, 3) = tb_im([Ô]tipoimo[Ô])
MSFlexGrid2.TextMatrix(i, 4) = tb_im([Ô]quartoimo[Ô])
MSFlexGrid2.TextMatrix(i, 5) = tb_im([Ô]suiteimo[Ô])
MSFlexGrid2.TextMatrix(i, 6) = tb_im([Ô]categoriaimo[Ô])
MSFlexGrid2.TextMatrix(i, 7) = tb_im([Ô]endimo[Ô])
MSFlexGrid2.TextMatrix(i, 8) = tb_im([Ô]condominioimo[Ô])
MSFlexGrid2.TextMatrix(i, 9) = tb_im([Ô]piscina[Ô])
MSFlexGrid2.TextMatrix(i, 10) = tb_im([Ô]sauna[Ô])
MSFlexGrid2.TextMatrix(i, 11) = tb_im([Ô]quadra[Ô])
MSFlexGrid2.TextMatrix(i, 12) = tb_im([Ô]jardim[Ô])
MSFlexGrid2.TextMatrix(i, 13) = tb_im([Ô]churrasqueira[Ô])
MSFlexGrid2.TextMatrix(i, 14) = tb_im([Ô]garagem[Ô])
MSFlexGrid2.TextMatrix(i, 15) = Format(pre, [Ô]###,##0.00[Ô])
MSFlexGrid2.TextMatrix(i, 16) = tb_im([Ô]statusimo[Ô])
MSFlexGrid2.TextMatrix(i, 17) = tb_im([Ô]chaves[Ô])
MSFlexGrid2.TextMatrix(i, 18) = tb_im([Ô]horavisita[Ô])
MSFlexGrid2.TextMatrix(i, 19) = tb_im([Ô]terreno[Ô])
MSFlexGrid2.TextMatrix(i, 20) = tb_im([Ô]area[Ô])
MSFlexGrid2.TextMatrix(i, 21) = tb_im([Ô]prop[Ô])
MSFlexGrid2.TextMatrix(i, 22) = tb_im([Ô]telefoneimo[Ô])
MSFlexGrid2.TextMatrix(i, 23) = tb_im([Ô]celularimo[Ô])
MSFlexGrid2.TextMatrix(i, 24) = tb_im([Ô]emailimo[Ô])
MSFlexGrid2.TextMatrix(i, 25) = tb_im([Ô]rgimo[Ô])
MSFlexGrid2.TextMatrix(i, 26) = tb_im([Ô]cpfimo[Ô])
MSFlexGrid2.TextMatrix(i, 27) = tb_im([Ô]endprop[Ô])
i = i + 1
tb_im.MoveNext
Loop
MSFlexGrid1.Redraw = True
ZebraFlex MSFlexGrid2, &HE0E0E0
MARCELO.TREZE 10/01/2010 00:22:35
#331483
Sabe o que acho estranho, será que existe uma quantidade maxima de caracteres que a cellula do flexgrdi aceita, nuca vi isto

vc testou inserindo um campo mais curto

que propriedade maxlenght é esta , que não vi no flexgrid.

mas vamos lá se a informação é muito grande então deveria arrumar uma outra maneira de exibi-la

outra coisa quantos registros existem no banco de dados

mas tente esta pequena modificação em seu código

Dim pre As Currency
Dim Cabecalho As String
With MSFlexGrid2
.Cols = 28
.Rows = 1
.FixedRows = 1
Cabecalho = Cabecalho & [Ô] CÓDIGO| DATA ENTRADA| DESCRIÇÃO DO IMÓVEL| TIPO IMÓVEL| Nº QUARTOS| Nº SUITES|[Ô]
Cabecalho = Cabecalho & [Ô] CATEGORIA| ENDEREÇO IMÓVEL|CONDOMÍNIO|PISCINA| SAUNA| QUADRA| JARDIM|[Ô]
Cabecalho = Cabecalho & [Ô] CHURRASQ.| GARAGEM| PREÇO| STATUS| CHAVES| HORA VISITA| TERRENO|[Ô]
Cabecalho = Cabecalho & [Ô] ÁREA CONSTRUÍDA| PROPRIETÁRIO| TELEFONES| CELULAR| E-MAIL| RG| CPF/CNPJ| ENDEREÇO PROPRIETÁRIO[Ô]
.FormatString = Cabecalho
.ColWidth(0) = 1000
.ColWidth(1) = 1500
.ColWidth(2) = 7000
.ColWidth(3) = 1800
.ColWidth(4) = 1300
.ColWidth(5) = 1300
.ColWidth(6) = 1800
.ColWidth(7) = 7000
.ColWidth(8) = 1800
.ColWidth(9) = 1300
.ColWidth(10) = 1300
.ColWidth(11) = 1200
.ColWidth(12) = 1200
.ColWidth(13) = 1200
.ColWidth(14) = 1200
.ColWidth(15) = 1300
.ColWidth(16) = 1500
.ColWidth(17) = 1700
.ColWidth(18) = 1800
.ColWidth(19) = 1800
.ColWidth(20) = 1800
.ColWidth(21) = 5000
.ColWidth(22) = 2500
.ColWidth(23) = 1300
.ColWidth(24) = 4500
.ColWidth(25) = 1500
.ColWidth(26) = 2000
.ColWidth(27) = 7000
.FixedCols = 0
MSFlexGrid1.Redraw = False
Do While Not tb_im.EOF
.Rows = .Rows + 1
pre = tb_im([Ô]precoimo[Ô])
.TextMatrix(.Rows - 1, 0) = tb_im([Ô]codimo[Ô])
.TextMatrix(.Rows - 1, 1) = tb_im([Ô]dtent[Ô])
.TextMatrix(.Rows - 1, 2) = tb_im([Ô]obsimo[Ô])
.TextMatrix(.Rows - 1, 3) = tb_im([Ô]tipoimo[Ô])
.TextMatrix(.Rows - 1, 4) = tb_im([Ô]quartoimo[Ô])
.TextMatrix(.Rows - 1, 5) = tb_im([Ô]suiteimo[Ô])
.TextMatrix(.Rows - 1, 6) = tb_im([Ô]categoriaimo[Ô])
.TextMatrix(.Rows - 1, 7) = tb_im([Ô]endimo[Ô])
.TextMatrix(.Rows - 1, 8) = tb_im([Ô]condominioimo[Ô])
.TextMatrix(.Rows - 1, 9) = tb_im([Ô]piscina[Ô])
.TextMatrix(.Rows - 1, 10) = tb_im([Ô]sauna[Ô])
.TextMatrix(.Rows - 1, 11) = tb_im([Ô]quadra[Ô])
.TextMatrix(.Rows - 1, 12) = tb_im([Ô]jardim[Ô])
.TextMatrix(.Rows - 1, 13) = tb_im([Ô]churrasqueira[Ô])
.TextMatrix(.Rows - 1, 14) = tb_im([Ô]garagem[Ô])
.TextMatrix(.Rows - 1, 15) = Format(pre, [Ô]###,##0.00[Ô])
.TextMatrix(.Rows - 1, 16) = tb_im([Ô]statusimo[Ô])
.TextMatrix(.Rows - 1, 17) = tb_im([Ô]chaves[Ô])
.TextMatrix(.Rows - 1, 18) = tb_im([Ô]horavisita[Ô])
.TextMatrix(.Rows - 1, 19) = tb_im([Ô]terreno[Ô])
.TextMatrix(.Rows - 1, 20) = tb_im([Ô]area[Ô])
.TextMatrix(.Rows - 1, 21) = tb_im([Ô]prop[Ô])
.TextMatrix(.Rows - 1, 22) = tb_im([Ô]telefoneimo[Ô])
.TextMatrix(.Rows - 1, 23) = tb_im([Ô]celularimo[Ô])
.TextMatrix(.Rows - 1, 24) = tb_im([Ô]emailimo[Ô])
.TextMatrix(.Rows - 1, 25) = tb_im([Ô]rgimo[Ô])
.TextMatrix(.Rows - 1, 26) = tb_im([Ô]cpfimo[Ô])
.TextMatrix(.Rows - 1, 27) = tb_im([Ô]endprop[Ô])
tb_im.MoveNext
Loop
End With
MSFlexGrid1.Redraw = True
ZebraFlex MSFlexGrid2, &HE0E0E0


tente este código acima apenas para que eu tire uma duvida
MAFACILITY 10/01/2010 02:51:42
#331491
O QUE ACHO ESTRANDO é QUE ESSE SISTEMA RODAVA REDONDO, ATé EM MÁQUINAS QUE NÃO TEM O VB INSTALADO.DELETEI NO BD O ÚLTIMO REGISTRO INSERIDO, E CONTINUA DANDO O MESMO ERRO. O ERRO ESTÁ DANDO NESTA LINHA DE PREENCHIMENTO:

[txt-color=#e80000].TextMatrix(.Rows - 1, 0) = tb_im([Ô]codimo[Ô])[/txt-color]
.TextMatrix(.Rows - 1, 1) = tb_im([Ô]dtent[Ô])
.TextMatrix(.Rows - 1, 2) = tb_im([Ô]obsimo[Ô])
.TextMatrix(.Rows - 1, 3) = tb_im([Ô]tipoimo[Ô])
.TextMatrix(.Rows - 1, 4) = tb_im([Ô]quartoimo[Ô])
.TextMatrix(.Rows - 1, 5) = tb_im([Ô]suiteimo[Ô])
.TextMatrix(.Rows - 1, 6) = tb_im([Ô]categoriaimo[Ô])
.TextMatrix(.Rows - 1, 7) = tb_im([Ô]endimo[Ô])
.TextMatrix(.Rows - 1, 8) = tb_im([Ô]condominioimo[Ô])
.TextMatrix(.Rows - 1, 9) = tb_im([Ô]piscina[Ô])
.TextMatrix(.Rows - 1, 10) = tb_im([Ô]sauna[Ô])
.TextMatrix(.Rows - 1, 11) = tb_im([Ô]quadra[Ô])
.TextMatrix(.Rows - 1, 12) = tb_im([Ô]jardim[Ô])
.TextMatrix(.Rows - 1, 13) = tb_im([Ô]churrasqueira[Ô])
.TextMatrix(.Rows - 1, 14) = tb_im([Ô]garagem[Ô])
.TextMatrix(.Rows - 1, 15) = Format(pre, [Ô]###,##0.00[Ô])
.TextMatrix(.Rows - 1, 16) = tb_im([Ô]statusimo[Ô])
.TextMatrix(.Rows - 1, 17) = tb_im([Ô]chaves[Ô])
.TextMatrix(.Rows - 1, 18) = tb_im([Ô]horavisita[Ô])
.TextMatrix(.Rows - 1, 19) = tb_im([Ô]terreno[Ô])
.TextMatrix(.Rows - 1, 20) = tb_im([Ô]area[Ô])
.TextMatrix(.Rows - 1, 21) = tb_im([Ô]prop[Ô])
.TextMatrix(.Rows - 1, 22) = tb_im([Ô]telefoneimo[Ô])
.TextMatrix(.Rows - 1, 23) = tb_im([Ô]celularimo[Ô])
.TextMatrix(.Rows - 1, 24) = tb_im([Ô]emailimo[Ô])
.TextMatrix(.Rows - 1, 25) = tb_im([Ô]rgimo[Ô])
.TextMatrix(.Rows - 1, 26) = tb_im([Ô]cpfimo[Ô])
.TextMatrix(.Rows - 1, 27) = tb_im([Ô]endprop[Ô])
tb_im.MoveNext
ROBIU 10/01/2010 08:15:35
#331492
Se você possui muitos registros, seria bom filtrar os registros por determinados criterios. Os grids são para visualizar dados e não para carregar todos registros da tabela no form. Se ainda assim, você achar necessário carregar todos registros, você pode usar o Mshflexgrid, que tem as mesmas funções da flex grid e é um controle ADO, enquanto o flexgrid é para DAO. (Click aqui). Com o Mshflexgrid, você vai manter todo seu código como está visto que possui todas funcionalidades da flex. é só Trocar a Flexgrid pela Hflexgrid, colocar a propriedade name da mesma forma no hgrid e ajustar alguma outra propriedade.

Mas se você quiser continuar com a flex tenta carregar assim:
Para contornar este problema, caso você queira exibir mais de 2048 linhas, você deverá abrir o seu conjunto de registros e preencher a grade usando o método GetString de ADO e a propriedade clip do MSHFlexGrid. (Conforme exibido no exemplo deste artigo)
MAFACILITY 11/01/2010 12:46:41
#331575
é robiu olhei no site do macoratti que vc colocou abaixo, diz que posso usar 350.000 celulas, não cheguei nem a 2.000 células. Esse msflexgrid só carrega imóveis que tenho em estoque, num cálculo que fiz aqui, para estourar o limite do controle eu teria que ter 15.000 imóveis em estoque.
Por isso que o erro pode estar na inclusão de algum registro no bd, que na hora de carregá-lo ocasionou um erro, por exemplo: um campo text = 100 eu posso ter usado o limite total desse campo pela primeira vez e na hora de carregá-lo ocasionou o erro, pois como disse acima na priemeira postagem, utilizo esse sistema a mais de 1 ano e sempre funcionou muito bem, estou verificando nas horas que tenho tempo se tiver alguma resposta postarei aqui, e se alguem souber a solução por favor poste aqui.
Obrigado
ROBIU 11/01/2010 13:43:43
#331581
Se estiver com problema no tamanho do campo, isso é com o banco de dados e não com a tabela. A propriedade Width da grid é para exibir os dados e não para determinar o tamanho de dados a receber. Se você colocar essa propriedade como 0, os dados estarão lá, só não serão exibidos, portanto, a grid não tem essa de tamanho de campo.

Se você estiver usando alguma variável integer no processo de carregamento, mude para Long - só para garantir.

De qualquer forma, faça o teste com a mshflexgrid. é só trocar os controles. Não vai mudar nada no código.
LEANDRO 11/01/2010 14:25:36
#331586
Cara, eu tenho uma FlexGrid que carrega 120 mil registro, e nao tenho problemas.
deve ser Algum Dado Nulo ou em Branco na Base de Dados que não esta aceitando
MAFACILITY 11/01/2010 18:20:18
#331616
Deletei os três últimos registros incluídos, e os inclui de novo, o sistema voltou a funcionar, vou verificar o que aconteceu, depois posto para esclarecer.
Tópico encerrado , respostas não são mais permitidas