View Full Version : erro ao gravar


Alcantara_18
21-01-2008, 09:58
tenho um pequeno problema e o meu programa (tá a ser desenvolvido em VB6) nao grava como deve ser.

rsMyRS.MoveFirst
Dim X As Integer
X = 1

Do While Not X = rsMyRS.RecordCount
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - X, 6) = "þ" Then
rsMyRS.Edit
rsMyRS!conferido = True
rsMyRS.Update
Else
rsMyRS.Edit
rsMyRS!conferido = False
rsMyRS.Update
End If
rsMyRS.MoveNext
X = X + 1
Loop

X = 1
rsMyRS.MoveFirst
Do While Not X = rsMyRS.RecordCount
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - X, 7) = "þ" Then
rsMyRS.Edit
rsMyRS!pago = True
rsMyRS.Update
Else
rsMyRS.Edit
rsMyRS!pago = False
rsMyRS.Update
End If
rsMyRS.MoveNext
X = X + 1
Loop
rsMyRS.MoveFirst
MsgBox ("Guardado")é este o código. o problema que tenho é que mando gravar o 1º registo que está na flex grid e ele grava-me o ultimo.. >(

naoliveira
21-01-2008, 12:05
com o código que meteste parece é que ele grava todos os resgistos da flexgrid e logo 2 vezes!!!

Alcantara_18
21-01-2008, 12:07
com o código que meteste parece é que ele grava todos os resgistos da flexgrid e logo 2 vezes!!!

isso sei eu.. eu quero mesmo que ele grave todos e 2 vezes, porque ha 2 colunas para gravar.. -_-'

naoliveira
21-01-2008, 14:05
Mas podes fazer tudo só de uma vez,

rsMyRS.MoveFirst
Dim X As Integer
X = 1

Do While Not X = rsMyRS.RecordCount
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - X, 6) = "þ" Then
rsMyRS.Edit
rsMyRS!conferido = True
rsMyRS!pago = True ' <--------- Acrescenta isto no 1º loop
rsMyRS.Update
Else
rsMyRS.Edit
rsMyRS!conferido = False
rsMyRS!pago = False ' <--------- Acrescenta isto no 1º loop
rsMyRS.Update
End If
rsMyRS.MoveNext
X = X + 1
Loop
A ver se percebo, se sabes que ele grava tudo, porque dizes que só queres gravar o 1º?!?!? Para gravares só um registo tens procurá-lo na bd e só depois e que fazes o update e sem o Do, porque com o Do percorres todos e gravas sempre todos.

Alcantara_18
21-01-2008, 15:16
Mas podes fazer tudo só de uma vez,

rsMyRS.MoveFirst
Dim X As Integer
X = 1

Do While Not X = rsMyRS.RecordCount
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - X, 6) = "þ" Then
rsMyRS.Edit
rsMyRS!conferido = True
rsMyRS!pago = True ' <--------- Acrescenta isto no 1º loop
rsMyRS.Update
Else
rsMyRS.Edit
rsMyRS!conferido = False
rsMyRS!pago = False ' <--------- Acrescenta isto no 1º loop
rsMyRS.Update
End If
rsMyRS.MoveNext
X = X + 1
Loop
A ver se percebo, se sabes que ele grava tudo, porque dizes que só queres gravar o 1º?!?!? Para gravares só um registo tens procurá-lo na bd e só depois e que fazes o update e sem o Do, porque com o Do percorres todos e gravas sempre todos.

para esse codigo funcionar tenho só que acrescentar mais uma coisinha porque são duas colunas.
ele grava tudo mas grava trocado, do genero estão todos a falso, eu mudo para verdadeiro apenas o primeiro e ele grava-me o ultimo como verdadeiro e nao o primeiro.. :s

naoliveira
21-01-2008, 17:12
Isso acontece porque no DO percorres em sentido ascendente e depois no if percorres no sentido inverso (se alterares a 2ª linha do flexgrid, vais gravar o penultimo registo do recordset) .
O código que te dei também tinha um erro, acho que agora este resolve:


rsMyRS.MoveFirst
Dim X As Integer
X = 1

Do While Not X = rsMyRS.RecordCount
rsMyRS.Edit
' REPARA QUE ALTEREI A MANEIRA COMO FAZIAS A COMPARAÇÃO
If MSFlexGrid1.TextMatrix(X, 6) = "þ" Then
rsMyRS!conferido = True
Else
rsMyRS!conferido = False

End If
' ALTEREI DE 6 PARA 7 NA COMPARAÇÃO
If MSFlexGrid1.TextMatrix(X, 7) = "þ" Then
rsMyRS!pago = True
Else
rsMyRS!pago = False
End If
rsMyRS.Update
rsMyRS.MoveNext
X = X + 1
Loop

Alcantara_18
22-01-2008, 11:56
já tá.. obrigadão meu.. ;)