ERRO NO MSFLEXGRID

DELETETHIS 05/05/2011 07:02:19
#373247
Tenho um pequeno problema. Basicamente quando o programa vai executar a query (cor vermelha) da-me sempre o erro de Invalid row value. Ja com as outras nao :/ So tenho este problema a ir buscar as strings. Alguem me pode ajudar? Está aqui o codigo. (A verde esta a linha onde me é dado o erro):

Private Sub cmdPesquisar_Click()

If texto.Text = [Ô][Ô] Then
MsgBox ([Ô]Por favor, preencha a caixa de texto![Ô])
Exit Sub
End If

[ô]define os objetos para o acesso aos dados no Microsoft Access
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset

[ô]cmdLimpar_Click
MSFlexGrid1.Refresh
MSFlexGrid1.Visible = False

If Option1.Value = True Then [ô]sigo

[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_sigo,nome,vias_conclusao FROM FORMANDOS WHERE numero_sigo=[Ô] & texto.Text, db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando com o sigo [Ô] & texto.Text)
Exit Sub
End If
rs.MoveFirst
ElseIf Option2.Value = True Then
[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
[txt-color=#e80000]rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome = [ô][Ô] & texto.Text & [Ô][ô][Ô], db, adOpenForwardOnly, adLockReadOnly [ô] adOpenStatic, adLockReadOnly[/txt-color]

rs.MoveFirst
ElseIf Option3.Value = True Then

If (Check1.Value = 1) And (Check2.Value = 1) Then
[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_grupo,nome,numero_sigo,vias_conclusao FROM FORMANDOS WHERE numero_grupo=[Ô] & texto.Text, db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando que pertença ao grupo [Ô] & texto.Text)
Exit Sub
End If
ElseIf (Check1.Value = 0) And (Check2.Value = 0) Then
MsgBox ([Ô]Tem que assinalar uma ou ambas as caixas para fazer a pesquisa.[Ô])
Exit Sub
ElseIf (Check1.Value = 0) And (Check2.Value = 1) Then
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_grupo,nome,numero_sigo,vias_conclusao FROM FORMANDOS WHERE numero_grupo=[Ô] & texto.Text & [Ô] AND vias_conclusao=[ô][Ô] & lblsecundario.Caption & [Ô][ô][Ô], db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando que pertença ao grupo [Ô] & texto.Text)
Exit Sub
End If
ElseIf (Check1.Value = 1) And (Check2.Value = 0) Then
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_grupo,nome,numero_sigo,vias_conclusao FROM FORMANDOS WHERE numero_grupo=[Ô] & texto.Text & [Ô] AND vias_conclusao=[ô][Ô] & lblbasico.Caption & [Ô][ô][Ô], db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando que pertença ao grupo [Ô] & texto.Text)
Exit Sub
End If
End If
rs.MoveFirst
End If

[ô]define o numero de linhas e colunas e configura o grid
MSFlexGrid1.Rows = rs.RecordCount + 1
MSFlexGrid1.Cols = rs.Fields.Count [ô]- 1
[txt-color=#007100]MSFlexGrid1.Row = 0[/txt-color]
MSFlexGrid1.Col = 0
MSFlexGrid1.RowSel = MSFlexGrid1.Rows - 1
MSFlexGrid1.ColSel = MSFlexGrid1.Cols - 1

[ô]estamos usando a propriedade Clip e o método GetString para selecionar uma região do grid
MSFlexGrid1.Clip = rs.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
MSFlexGrid1.Row = 1
MSFlexGrid1.Visible = True

[ô]libera os objetos
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

End Sub
ROBIU 05/05/2011 08:20:25
#373251
Faz um teste nesta parte do seu código e vê se não retorna -1
...
End If

MsgBox Rs.RecordCount

[ô]define o numero de linhas e colunas e configura o grid
MSFlexGrid1.Rows = rs.RecordCount + 1 [ô] -1+1=0
MSFlexGrid1.Cols = rs.Fields.Count [ô]- 1[ô] -1-1=2
MSFlexGrid1.Row = 0
....


porque você mudou a forma de abrir o Rs:
Citação:

rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome = [ô][Ô] & texto.Text & [Ô][ô][Ô], db, adOpenForwardOnly, adLockReadOnly



Assim não funcionou?
rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome = [ô][Ô] & texto.Text & [Ô][ô][Ô], db, adOpenStatic, adLockReadOnly


Eu prefiro assim:
rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome = [ô][Ô] & texto.Text & [Ô][ô][Ô], db, adOpenKeyset, adLockPessimistic




DELETETHIS 05/05/2011 10:12:39
#373260
Retorna 0 na query:
[txt-color=#e80000] rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome = [ô][Ô] & texto.Text & [Ô][ô][Ô], db, adOpenForwardOnly, adLockReadOnly [/txt-color]

E -1 na :

[txt-color=#e80000] rs.Open [Ô]SELECT numero_sigo_pessoal,nome_pessoal FROM PESSOAL WHERE numero_identificaçao_pessoal like[ô][Ô] & texto.Text, db, adOpenStatic, adLockReadOnly
[/txt-color]


So estou a ter este problema nas queries que buscam strings.. :/ Neste projecto que estou a fazer tenho vários deste genero e os outros funfam :/ So pode ser algo errado com a query ne? Alguma [Ô] a + ou a -
ROBIU 05/05/2011 10:39:36
#373263
e assim, não funcionou:
rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome = [ô][Ô] & texto.Text & [Ô][ô][Ô], db, adOpenKeyset, adLockPessimistic


Solução: antes de abrir o rs coloca isso

[txt-color=#e80000]Rs.CursorLocation = adUseClient[/txt-color]

Exemplo:

Rs.CursorLocation = adUseClient
rs.Open [Ô]SELECT numero_sigo_pessoal,nome_pessoal FROM PESSOAL WHERE numero_identificaçao_pessoal like[ô][Ô] & texto.Text, db, adOpenStatic, adLockReadOnly



MARCELO.TREZE 05/05/2011 10:46:06
#373264
vamos ver se o problema é no flexgrid entào aquela query em vermelho não tem nada a ver com a situação, principalmente porque nela não existe nenhuma referência a flexgrid, o erro está mais abaixo, então faça a alteração sugerida no código abaixo e pronto.

[ô]define o numero de linhas e colunas e configura o grid
MSFlexGrid1.Rows = rs.RecordCount + 1
MSFlexGrid1.Cols = rs.Fields.Count [ô]- 1
MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 [ô]posiciona na ultima linha
MSFlexGrid1.Col = MSFlexGrid1.Cols - 1[ô]na ultima cellula

[ô]estamos usando a propriedade Clip e o método GetString para selecionar uma região do grid
MSFlexGrid1.Clip = rs.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
MSFlexGrid1.Row = 1
MSFlexGrid1.Visible = True


DELETETHIS 05/05/2011 13:09:56
#373275
Citação:

:
e assim, não funcionou:

rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome = [ô][Ô] & texto.Text & [Ô][ô][Ô], db, adOpenKeyset, adLockPessimistic


Solução: antes de abrir o rs coloca isso

[txt-color=#e80000]Rs.CursorLocation = adUseClient[/txt-color]

Exemplo:

Rs.CursorLocation = adUseClient
rs.Open [Ô]SELECT numero_sigo_pessoal,nome_pessoal FROM PESSOAL WHERE numero_identificaçao_pessoal like[ô][Ô] & texto.Text, db, adOpenStatic, adLockReadOnly





Continuo com o erro EOF/BOF

Citação:

:
vamos ver se o problema é no flexgrid entào aquela query em vermelho não tem nada a ver com a situação, principalmente porque nela não existe nenhuma referência a flexgrid, o erro está mais abaixo, então faça a alteração sugerida no código abaixo e pronto.

[ô]define o numero de linhas e colunas e configura o grid
MSFlexGrid1.Rows = rs.RecordCount + 1
MSFlexGrid1.Cols = rs.Fields.Count [ô]- 1
MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 [ô]posiciona na ultima linha
MSFlexGrid1.Col = MSFlexGrid1.Cols - 1[ô]na ultima cellula

[ô]estamos usando a propriedade Clip e o método GetString para selecionar uma região do grid
MSFlexGrid1.Clip = rs.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
MSFlexGrid1.Row = 1
MSFlexGrid1.Visible = True




Obrigado pela resposta pelo que percebi so tinha que comentar estas 2 linhas

Citação:

[ô]MSFlexGrid1.Row = 0
[ô]MSFlexGrid1.Col = 0



ficando:

Citação:

[ô]define o numero de linhas e colunas e configura o grid
MSFlexGrid1.Rows = rs.RecordCount + 1
MSFlexGrid1.Cols = rs.Fields.Count
MSFlexGrid1.RowSel = MSFlexGrid1.Rows - 1 [ô]posiciona na ultima linha
MSFlexGrid1.ColSel = MSFlexGrid1.Cols - 1 [ô]na ultima cellula

[ô]estamos usando a propriedade Clip e o método GetString para selecionar uma região do grid
MSFlexGrid1.Clip = rs.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
MSFlexGrid1.Row = 1
MSFlexGrid1.Visible = True



Mas continua dando erro na query nao estou mesmo a conseguir fazer com que retorne algum valor ao procurar pela tal string. Veja como era apresentado o resultado antes de comentar akelas 2 linhas e depois

Antes: http://img708.imageshack.us/img708/7943/antesdealterar.png
Depois:http://img28.imageshack.us/img28/4703/depoisdealterar.png
MARCELO.TREZE 05/05/2011 14:21:33
#373290
faz o seguinte poste pelo duas linhas do conteudo do banco, e qual vc queria consultar,

DELETETHIS 09/05/2011 08:44:02
#373483
Boas, marcelo-treze nao percebi bem o que pedis-te Mas tenho aqui uma print screen do banco(em anexo).

Citação:

Private Sub cmdPesquisar_Click()

If texto.Text = [Ô][Ô] Then
MsgBox ([Ô]Por favor, preencha a caixa de texto![Ô])
Exit Sub
End If

[ô]define os objetos para o acesso aos dados no Microsoft Access
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset

[ô]cmdLimpar_Click
MSFlexGrid1.Refresh
MSFlexGrid1.Visible = False

If Option1.Value = True Then [ô]sigo

[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_sigo,nome,vias_conclusao FROM FORMANDOS WHERE numero_sigo=[Ô] & texto.Text, db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando com o sigo [Ô] & texto.Text)
Exit Sub
End If
rs.MoveFirst
ElseIf Option2.Value = True Then
[ô]abre o banco de dados e define o recordset a ser usado
[txt-color=#e80000] db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome like= [ô] & texto.Text[ô][Ô], db, adOpenForwardOnly, adLockReadOnly [ô] adOpenStatic, adLockReadOnly[Ô] [ô] DA-me erro nesta linha.. :/
rs.MoveFirst[/txt-color]

ElseIf Option3.Value = True Then

If (Check1.Value = 1) And (Check2.Value = 1) Then
[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_grupo,nome,numero_sigo,vias_conclusao FROM FORMANDOS WHERE numero_grupo=[Ô] & texto.Text, db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando que pertença ao grupo [Ô] & texto.Text)
Exit Sub
End If
ElseIf (Check1.Value = 0) And (Check2.Value = 0) Then
MsgBox ([Ô]Tem que assinalar uma ou ambas as caixas para fazer a pesquisa.[Ô])
Exit Sub
ElseIf (Check1.Value = 0) And (Check2.Value = 1) Then
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_grupo,nome,numero_sigo,vias_conclusao FROM FORMANDOS WHERE numero_grupo=[Ô] & texto.Text & [Ô] AND vias_conclusao=[ô][Ô] & lblsecundario.Caption & [Ô][ô][Ô], db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando que pertença ao grupo [Ô] & texto.Text)
Exit Sub
End If
ElseIf (Check1.Value = 1) And (Check2.Value = 0) Then
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_grupo,nome,numero_sigo,vias_conclusao FROM FORMANDOS WHERE numero_grupo=[Ô] & texto.Text & [Ô] AND vias_conclusao=[ô][Ô] & lblbasico.Caption & [Ô][ô][Ô], db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando que pertença ao grupo [Ô] & texto.Text)
Exit Sub
End If
End If
ElseIf Option4.Value = True Then
[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT numero_sigo,nome,vias_conclusao FROM FORMANDOS WHERE numero_identificaçao=[Ô] & texto.Text, db, adOpenStatic, adLockReadOnly
If (rs.EOF = True) And (rs.BOF = True) Then
MsgBox ([Ô]Nao ha nenhum formando com o numero de identificação: [Ô] & texto.Text)
Exit Sub
End If
End If
rs.MoveFirst
[ô]End If

[ô]define o numero de linhas e colunas e configura o grid
MSFlexGrid1.Rows = rs.RecordCount + 1
MSFlexGrid1.Cols = rs.Fields.Count [ô]- 1 -1-1=2
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.RowSel = MSFlexGrid1.Rows - 1
MSFlexGrid1.ColSel = MSFlexGrid1.Cols - 1

[ô]estamos usando a propriedade Clip e o método GetString para selecionar uma região do grid
MSFlexGrid1.Clip = rs.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
MSFlexGrid1.Row = 1
MSFlexGrid1.Visible = True

[ô]libera os objetos
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

End Sub

MARCELO.TREZE 09/05/2011 10:35:13
#373497
db.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CNO.mdb;Persist Security Info=False[Ô]
rs.Open [Ô]SELECT nome,numero_sigo,vias_conclusao FROM FORMANDOS where nome like=[ô][Ô] & texto.Text & [Ô]%[ô][Ô], db, adOpenForwardOnly, adLockReadOnly


tenta ai
DELETETHIS 09/05/2011 11:20:05
#373499
Oh reparei num erro na sintax [Ô]where nome [txt-color=#e80000]like=[/txt-color][ô][Ô] mas se a usar da-me o err dizendo que ha um operador em falta.

Tentei apagar o = e deixar so o like dessa maneira da-me aquele erro [Ô]invalid row value[Ô] na linha [txt-color=#0000f0] MSFlexGrid1.Row = 0 [/txt-color]

Se apagar o like e deixar so o = da-me o erro BOF/EOF
Página 1 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas