Jag önskar ta bort alla dubbletter där variablen PNR är lika och använder följande kod Hej Kan det vara så att Delete metoden navigerar till nästa post? Testa isåfall med: Hej Funkar ej. Det blir felmeddelandet "En angiven HROW hänvisar till en borttagen rad" Funkar ej. Det blir felmeddelandet "En angiven HROW hänvisar till en borttagen rad" Jag har gjort ett litet exempel som fungerar: Nu har jag fått det att funka genom att ändra lite i SvenPons kod. Hej igen Jo det stämmer. PNR är orndade så att alla lika PNR kommer i rad i tabellen.En post för lite
rsSokning.MoveFirst
PnrPrev = rsSokning.Fields("PNR").Value
rsSokning.MoveNext
While Not rsSokning.EOF
If rsSokning.Fields("PNR").Value = PnrPrev Then
rsSokning.Delete
Else
PnrPrev = rsSokning.Fields("PNR").Value
End If
rsSokning.MoveNext
Wend
Det som sker nu är att den sista posten ej kommer med. Jag har prövat att flytta MoveNext till andra platser med det blir antingen ytterligare en post för lite eller så MoveNext när det är slut på poster. Kan jag göra på något annat sätt?Sv: En post för lite
Testa det här
rsSokning.MoveFirst
PnrPrev = rsSokning.Fields("PNR").Value
Do Until rsSokning.EOF
If rsSokning.Fields("PNR").Value = PnrPrev Then
rsSokning.Delete
Else
PnrPrev = rsSokning.Fields("PNR").Value
End If
rsSokning.MoveNext
Loop
mvh
SvenSv: En post för lite
Do Until rsSokning.EOF
If rsSokning.Fields("PNR").Value = PnrPrev Then
rsSokning.Delete
Else
PnrPrev = rsSokning.Fields("PNR").Value
rsSokning.MoveNext
End If
LoopSv: En post för lite
Som vanligt blev det snabbt och fel
Förutom Highstream :s svar så bör det se ut så här.
Dim recCount As Long,i As Long
rsSokning.MoveLast
recCount = rsSokning.RecordCount - 1
rsSokning.MoveFirst
PnrPrev = rsSokning.Fields("PNR").Value
rsSokning.MoveNext
For i = 1 To recCount
If rsSokning.Fields("PNR").Value = PnrPrev Then
rsSokning.Delete
Else
PnrPrev = rsSokning.Fields("PNR").Value
rsSokning.MoveNext
End If
Next i
mvh
SvenSv: En post för lite
Sv: En post för lite
Sv: En post för lite
Private Sub Form_Load()
Dim rsTemp As ADODB.Recordset
Dim LastId As Long
Dim fldRecID As ADODB.Field
Dim fldName As ADODB.Field
Set rsTemp = GetRecordset()
Set fldRecID = rsTemp("RecID")
Set fldName = rsTemp("Name")
Do Until rsTemp.EOF
If LastId = fldRecID Then
rsTemp.Delete
Else
LastId = fldRecID
End If
rsTemp.MoveNext
Loop
rsTemp.MoveFirst
Do Until rsTemp.EOF
Debug.Print fldRecID.Value, fldName.Value
rsTemp.MoveNext
Loop
End Sub
Private Function GetRecordset() As ADODB.Recordset
Dim Fields As Variant
Set GetRecordset = New ADODB.Recordset
GetRecordset.Fields.Append "RecID", adInteger
GetRecordset.Fields.Append "Name", adVarChar, 20
GetRecordset.Open
Fields = Array("RecID", "Name")
GetRecordset.AddNew Fields, Array(1, "Andreas")
GetRecordset.AddNew Fields, Array(2, "Bengt")
GetRecordset.AddNew Fields, Array(2, "Bengt")
GetRecordset.AddNew Fields, Array(3, "Carl")
GetRecordset.AddNew Fields, Array(3, "Carl")
GetRecordset.AddNew Fields, Array(3, "Carl")
GetRecordset.AddNew Fields, Array(4, "David")
GetRecordset.AddNew Fields, Array(4, "David")
GetRecordset.AddNew Fields, Array(4, "David")
GetRecordset.AddNew Fields, Array(4, "David")
GetRecordset.AddNew Fields, Array(5, "Erik")
GetRecordset.AddNew Fields, Array(5, "Erik")
GetRecordset.AddNew Fields, Array(5, "Erik")
GetRecordset.AddNew Fields, Array(5, "Erik")
GetRecordset.AddNew Fields, Array(5, "Erik")
GetRecordset.MoveFirst
End FunctionSv: En post för lite
If rsSokning.Fields("PNR").Value = PnrPrev Then
rsSokning.Delete
Else
PnrPrev = rsSokning.Fields("PNR").Value
End If
rsSokning.MoveNext
Next i
i stället för
If rsSokning.Fields("PNR").Value = PnrPrev Then
rsSokning.Delete
Else
PnrPrev = rsSokning.Fields("PNR").Value
rsSokning.MoveNext
End If
Next i
Sv: En post för lite
En fundering , som det nu är så kollar du
bara första posten mot de övriga.
Om record 7 = record 18 hur gör du då ??
undrar
SvenSv: En post för lite