/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Delete record
Fra : Ole J. Hansen


Dato : 12-10-02 10:02

Hej NG

Jeg har et problem jeg ikke rigtigt kan finde ud af.
Når jeg trykker på delete og sletter en post, vil jeg naturligvis gerne have
formen til at stille en anden
post til rådighed for brugeren.
Jeg kunne tænke mig, at hvis ingen record er i tabellen efter delete, skal
intet ske.
Hvis vi når EOF vil jeg gerne have formen til .MovePrevious.
Hvis vi når BOF vil jeg gerne have formen til .MoveNext.
Jeg bruger nedstående i Case cmdDelete, hvor er fejlen ?

Case cmdDelete
Dim iResponse As Integer
Dim sAskUser As String
sAskUser = "Er du sikker på, at du vil slette denne Post?"
iResponse = MsgBox(sAskUser, vbQuestion + vbYesNo + _
vbDefaultButton2, "Medlemsliste")
If (iResponse = vbYes) Then
With Data1.Recordset
lTotalRecords = .RecordCount
.Delete
If lTotalRecords = 0 Then
If lTotalRecords > 1 Then

.MoveNext
ElseIf .BOF Then
.MoveFirst
Else
.MovePrevious
End If
End If
End With
End If


m.v.h.
Ole J. Hansen



 
 
Tomas Christiansen (12-10-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 12-10-02 21:31

Ole J. Hansen skrev:
> Jeg bruger nedstående i Case cmdDelete, hvor er fejlen ?

Et par ting springer i øjnene:

> Case cmdDelete
> Dim iResponse As Integer
> Dim sAskUser As String
> sAskUser = "Er du sikker på, at du vil slette denne
Post?"
> iResponse = MsgBox(sAskUser, vbQuestion + vbYesNo +
_
> vbDefaultButton2, "Medlemsliste")

Ups! Man bør ikke addere bit-masker sammen, men i stedet bruge
binær-eller (dvs. "Or" i stedet for "+").
Du kan risikere overflow ved addition.

> If (iResponse = vbYes) Then
> With Data1.Recordset
> lTotalRecords = .RecordCount
> .Delete
> If lTotalRecords = 0 Then
> If lTotalRecords > 1 Then

Hvordan vil du komme hertil?
Der kræves at lTotalRecords er lig 0 _og_ er større end 1. Hmm?

> .MoveNext
> ElseIf .BOF Then
> .MoveFirst
> Else
> .MovePrevious
> End If
> End If
> End With
> End If

Jeg forstår ikke din indrykning. Den hjælper dig da vist ikke til at
forstå hvordan koden hænger sammen?
Eller er det gået helt galt i forbindelse med at det er blevet
kopieret ind i et nyhedsgruppeindlæg?

-------
Tomas


Ole J. Hansen (12-10-2002)
Kommentar
Fra : Ole J. Hansen


Dato : 12-10-02 23:14

Hej Tomas
Nej det er som jeg har det, du har ret, at det nok ikke letter koden med den
indrykning,
men efter at have rettet 50 gange, ja såååå har det jo flyttet sig.
Du har ret, at lTotalRecords ikke kan være = 0 og > 1 på samme tid, men det
var såmend noget
jeg skrev af efter en bog, men når du nu siger det, kan jeg godt se det
ulogiske.
Jeg kan godt få koden til at virke i den ved EOF, men så vil den ikke i BOF,
hvis jeg vender det
om, så virker det i BOF og ikke i EOF.
Der må da være en smart løsning på dette problem ?
m.v.h.
"Tomas Christiansen" <toc-nospam-01@blikroer.dk> skrev i en meddelelse
news:aoa0pb$2lnb$1@news.cybercity.dk...
> Ole J. Hansen skrev:
> > Jeg bruger nedstående i Case cmdDelete, hvor er fejlen ?
> Ups! Man bør ikke addere bit-masker sammen, men i stedet bruge
> binær-eller (dvs. "Or" i stedet for "+").
> Du kan risikere overflow ved addition.
>
> > If (iResponse = vbYes) Then
> > With Data1.Recordset
> > lTotalRecords = .RecordCount
> > .Delete
> > If lTotalRecords = 0 Then
> > If lTotalRecords > 1 Then
>
> Hvordan vil du komme hertil?
> Der kræves at lTotalRecords er lig 0 _og_ er større end 1. Hmm?
>
> > .MoveNext
> > ElseIf .BOF Then
> > .MoveFirst
> > Else
> > .MovePrevious
> > End If
> > End If
> > End With
> > End If
>
> Jeg forstår ikke din indrykning. Den hjælper dig da vist ikke til at
> forstå hvordan koden hænger sammen?
> Eller er det gået helt galt i forbindelse med at det er blevet
> kopieret ind i et nyhedsgruppeindlæg?
>
> -------
> Tomas
>





Tomas Christiansen (13-10-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 13-10-02 21:27

Ole J. Hansen skrev:
> Nej det er som jeg har det, du har ret, at det nok ikke letter koden
med den
> indrykning,
> men efter at have rettet 50 gange, ja såååå har det jo flyttet sig.

Nej. Du bør altid sørge for at din indrykning er korrekt.
Hvis du laver store programmer, så vil du spare dig selv for mange
stunder med frustrationer, hvis indrykningen af din kode svarer til
dine intentioner med koden!

> Jeg kan godt få koden til at virke i den ved EOF, men så vil den
ikke i BOF,
> hvis jeg vender det om, så virker det i BOF og ikke i EOF.

Jeg forstår ikke helt _hvad_ det er, som du vender om?

Har prøvet at oprette et VB6-projekt, som skal ligne dit, for at
afprøve kode, men jeg får en fejl "Error in loading DLL", når jeg
forsøger at oversætte koden, på det sted hvor Data1.Recordset tilgås.
Der må vist mangle en DAO-DLL på min maskine - så jeg kan ikke afprøve
koden!

Men hvad med følgende kode, vil det virke?

With Data1.Recordset
.Delete
If .BOF Then
.MoveFirst
ElseIf .EOF Then
.MoveLast
ElseIf .RecordCount > 1 Then
.MoveNext
End If
End With

Husk at afprøve følgende situationer:
1. Du har kun én post og sletter den.
2. Du har mere end én post og sletter den første post.
3. Du har mere end én post og sletter en post "midt i".
4. Du har mere end én post og sletter den sidste post.

-------
Tomas


Ole J. Hansen (14-10-2002)
Kommentar
Fra : Ole J. Hansen


Dato : 14-10-02 10:38

Hej Thomas
Jeg har prøvet din kodestump, den giver samme resultat som min eget.
Den flytter kun posten ved BOF, ved EOF efterlader den posten tom.
Det jeg mener med at vende den om er, at jeg også kan få den til at gå en
post frem ved
BOF, men så vil den ikke gå en tilbage ved EOF, hvis jeg vender konstanten,
vil den godt
gå en post tilbage ved EOF, men så vil den ikke gå en post frem ved BOF.
m.v.h.
Ole J. Hansen
"Ole J. Hansen" <ojh@hansen.mail.dk> skrev i en meddelelse
news:3da7e5a4$0$79609$edfadb0f@dspool01.news.tele.dk...
> Hej NG
>
> Jeg har et problem jeg ikke rigtigt kan finde ud af.
> Når jeg trykker på delete og sletter en post, vil jeg naturligvis gerne
have
> formen til at stille en anden
> post til rådighed for brugeren.
> Jeg kunne tænke mig, at hvis ingen record er i tabellen efter delete, skal
> intet ske.
> Hvis vi når EOF vil jeg gerne have formen til .MovePrevious.
> Hvis vi når BOF vil jeg gerne have formen til .MoveNext.
> Jeg bruger nedstående i Case cmdDelete, hvor er fejlen ?
>
> Case cmdDelete
> Dim iResponse As Integer
> Dim sAskUser As String
> sAskUser = "Er du sikker på, at du vil slette denne Post?"
> iResponse = MsgBox(sAskUser, vbQuestion + vbYesNo + _
> vbDefaultButton2, "Medlemsliste")
> If (iResponse = vbYes) Then
> With Data1.Recordset
> lTotalRecords = .RecordCount
> .Delete
> If lTotalRecords = 0 Then
> If lTotalRecords > 1 Then
>
> .MoveNext
> ElseIf .BOF Then
> .MoveFirst
> Else
> .MovePrevious
> End If
> End If
> End With
> End If
>
>
> m.v.h.
> Ole J. Hansen
>
>



Tomas Christiansen (14-10-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 14-10-02 22:00

Ole J. Hansen skrev:
> Jeg har prøvet din kodestump, den giver samme resultat som min eget.
> Den flytter kun posten ved BOF, ved EOF efterlader den posten tom.

Bliver .MoveLast rent faktisk udført?

> Det jeg mener med at vende den om er, at jeg også kan få den til at
gå en
> post frem ved BOF, men så vil den ikke gå en tilbage ved EOF, hvis
jeg
> vender konstanten, vil den godt gå en post tilbage ved EOF, men så
vil
> den ikke gå en post frem ved BOF.

Jamen hvad _er_ det for en konstant du "vender"???

Det virker som om du refererer til noget kode, som vi andre ikke har
set?

Vis mig hvordan koden skal se ud for at det virker ved BOF, og hvordan
det skal se ud for at det virker ved EOF. Så har vi noget helt konkret
at gå ud fra!

-------
Tomas
(Og nej, der er ikke "h" i navnet)


Ole J. Hansen (14-10-2002)
Kommentar
Fra : Ole J. Hansen


Dato : 14-10-02 22:43


"Ole J. Hansen" <ojh@hansen.mail.dk> skrev i en meddelelse
news:3da7e5a4$0$79609$edfadb0f@dspool01.news.tele.dk...
> Hej NG
>
> Jeg har et problem jeg ikke rigtigt kan finde ud af.

Hej igen Tomas og alle andre.

I denne kode går det fint hvis jeg sletter den sidste record i tabellen, da
virker EOF fint, og
den går fint til MovePrevious, men hvis jeg sletter den første record i
tabellen, da virker
BOF ikke og jeg står med alle felterne tomme, idet recorden godt nok er
slettet, men
jeg syndtes, at det ser "dårligt" ud, at felterne bliver efterladt tomme.

Case cmdDelete
navigateButtons ("11111101011")
Dim iResponse As Integer
Dim sAskUser As String
sAskUser = "Er du sikker på, at du vil slette denne Post?"
iResponse = MsgBox(sAskUser, vbQuestion + vbYesNo + _
vbDefaultButton2, "Medlemsliste")
If (iResponse = vbYes) Then

With Data1.Recordset
.Delete
If lTotalRecords = 0 Then
.MoveNext
ElseIf .BOF Then
.MoveFirst
Else
.MovePrevious
End If

End With
End If

Her er det så lige modsat, jeg har ikke taget hele koden med, men jeg er
sikker på, at
i kan forstå forskellen.

If lTotalRecords = 0 Then
.MoveNext
ElseIf .BOF Then
.MovePrevious
Else
.MoveNext
End If

m.v.h.
Ole J. Hansne





Ole J. Hansen (14-10-2002)
Kommentar
Fra : Ole J. Hansen


Dato : 14-10-02 22:45


"Ole J. Hansen" <ojh@hansen.mail.dk> skrev i en meddelelse
news:3da7e5a4$0$79609$edfadb0f@dspool01.news.tele.dk...
> Hej NG
>
> Jeg har et problem jeg ikke rigtigt kan finde ud af.

Hej igen Tomas og alle andre.

I denne kode går det fint hvis jeg sletter den sidste record i tabellen, da
virker EOF fint, og
den går fint til MovePrevious, men hvis jeg sletter den første record i
tabellen, da virker
BOF ikke og jeg står med alle felterne tomme, idet recorden godt nok er
slettet, men
jeg syndtes, at det ser "dårligt" ud, at felterne bliver efterladt tomme.

Case cmdDelete
navigateButtons ("11111101011")
Dim iResponse As Integer
Dim sAskUser As String
sAskUser = "Er du sikker på, at du vil slette denne Post?"
iResponse = MsgBox(sAskUser, vbQuestion + vbYesNo + _
vbDefaultButton2, "Medlemsliste")
If (iResponse = vbYes) Then

With Data1.Recordset
.Delete
If lTotalRecords = 0 Then
.MoveNext
ElseIf .BOF Then
.MoveFirst
Else
.MovePrevious
End If

End With
End If

Her er det så lige modsat, jeg har ikke taget hele koden med, men jeg er
sikker på, at
i kan forstå forskellen.

If lTotalRecords = 0 Then
.MoveNext
ElseIf .BOF Then
.MovePrevious
Else
.MoveNext
End If

m.v.h.
Ole J. Hansne







Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste