Avatar billede celal Nybegynder
28. februar 2002 - 13:47 Der er 27 kommentarer og
1 løsning

Compilerings fejl

Når jeg kompilere får jeg en fejl. Jeg har lavet en funktion som skal finde noget data, og det som er blevet fundet skal slettes.
Er der nogen som kan se hvad jeg skal gøre?

Function SletDebitor() As Integer
Dim Dbs As Database
Dim Rst1 As Recordset
Dim Rst2 As Recordset
Dim strSQL1 As String
Dim DebitorNr As String
Dim svar As Integer
svar = MsgBox("Er du sikker på at slette?", vbYesNo + vbCritical + vbDefaultButton2, "Slet Debitor")

 
  Set Dbs = CurrentDb
  strSQL1 = "SELECT SL01001 FROM SL01 WHERE SL01050 BETWEEN  #01/01/1901# AND #31/12/96#"
  Set Rst1 = Dbs.OpenRecordset(strSQL1)
 
   
    Set Rst2 = Dbs.OpenRecordset("SL01")
If Not Rst1.EOF Then
    Rst2.Index = "SL01001"
    Rst2.Seek "=", "'& DebitorNr&'"
    Rst2.Delete
    Rst1.MoveNext
 
  End If
 
  Rst1.Close
  Rst2.Close
 
End Function
Avatar billede terry Ekspert
28. februar 2002 - 13:49 #1
which line?
Avatar billede celal Nybegynder
28. februar 2002 - 13:50 #2
eg får en fejl der hedder "Der er for få parameter. Der var ventet 1"
Avatar billede celal Nybegynder
28. februar 2002 - 13:50 #3
det er linien : Set Rst1 = Dbs.OpenRecordset(strSQL1)
28. februar 2002 - 13:51 #4
Sætningen
Rst2.Seek "=", "'& DebitorNr&'" bør nok se således ud:
Rst2.Seek "=", "'" & DebitorNr & "'"
28. februar 2002 - 13:52 #5
Har du en reference til Microsoft DAO?
Avatar billede celal Nybegynder
28. februar 2002 - 13:53 #6
Hvad er Microsoft DAO ? Jeg er ikke så kendt med Access VB
28. februar 2002 - 13:54 #7
Tools->References

Så skal der være et kryds ud for "Microsoft DAO 3.x Object Library"
Avatar billede celal Nybegynder
28. februar 2002 - 13:55 #8
thomasjepsen: er du sikker på at det skal stå som du siger? Rst2.Seek "=", "'" & DebitorNr & "'"
Jeg får en anden fejl når jeg skriver dette, men det er heler ikke det der er problemmet
Avatar billede celal Nybegynder
28. februar 2002 - 13:58 #9
thomasjepsen: ikke helt med, Jeg har en dansk version. Kan ikke finde noget der hedder Værktøjer=Tools
28. februar 2002 - 14:00 #10
Hvilken version af Access bruger du?
Hvis det er Access 97, er det ikke noget problem. Det er kun hvis det er Access 2000 eller XP
Avatar billede celal Nybegynder
28. februar 2002 - 14:01 #11
Dansk 97
Avatar billede jesperthomsen Nybegynder
28. februar 2002 - 14:02 #12
Er dit debitornummer virkelig en string? Også i databasen? Hvis det er, skal du bruge metoden Thomasjepsen skriver - eller alternativt
Rst2.Seek "=", """ & DebitorNr & """
Det skulle nu ikke gøre nogen forskel. Men er det i den linie du får fejlen? Og er det under afviklingen eller ved compilering?
I øvrigt, vil du slette alle poster med det debitornummer? Så ville det være lettere at gøre det med et enkelt delete-statement.
Hvis du vil slette flere og vil bruge seek og movenext, så ville jeg begynde fra den sidste post og bevæge mig baglæns. Jeg har været ude for at få problemer med positionering på den anden måde.
Avatar billede nih Novice
28. februar 2002 - 14:04 #13
Set Rst1 = Dbs.OpenRecordset(strSQL1, dbOpenDynaset)

Prøv den her

Niels
Avatar billede nih Novice
28. februar 2002 - 14:11 #14
do while Not Rst1.EOF
    Rst2.Index = "SL01001"
    Rst2.Seek "=", "'& DebitorNr&'"
    Rst2.Delete
    Rst1.MoveNext
loop

Din if skal nok laves om til et loop, hvis altså det er meningen du skal igennem hele recordsettet.

Niels
Avatar billede jesperthomsen Nybegynder
28. februar 2002 - 14:15 #15
Man behøver ikke sætte indeks og lave .seek efter hver. Når index er sat bevæger man sig frem efter det i recordsettet og med .seek bevæger man sig til en bestemt position. Herfra kan man så .movenext'e sig frem til den den sidste post eller til nøglefeltet/felterne ikke længere matcher kriterierne.

Men du har nu stadig ret i pointen; det skal være et loop. Men det ville bare være væsentligt nemmere og sikkert også langt hurtigere, med en delete-sql.
Avatar billede celal Nybegynder
28. februar 2002 - 14:21 #16
Kan jeg nøjes med kun at bruge en sql delete-sætning?
Avatar billede celal Nybegynder
28. februar 2002 - 14:23 #17
Niels: Har prøvet med: Set Rst1 = Dbs.OpenRecordset(strSQL1, dbOpenDynaset)
Avatar billede celal Nybegynder
28. februar 2002 - 14:24 #18
men det virker ikke
Avatar billede celal Nybegynder
28. februar 2002 - 14:25 #19
Kan jeg næjes med at bruge dette? strSQL1 = "DELETE FROM SL01 WHERE SL01050 BETWEEN  #01/01/1901# AND #31/12/96#"
Avatar billede jesperthomsen Nybegynder
28. februar 2002 - 14:27 #20
Celal: Det vil være den nemmeste løsning. Gør sådan her

SQL = "Delete * From SL01 WHERE SL01050 BETWEEN  #01/01/1901# AND #31/12/96# AND DebitorNr = " & """ & Debitornr & """

currentdb.execute SQL

Jeg har ikke afprøvet sql'en her; blot skrevet den ind i hånden, men princippet er godt nok og den burde virke.
Avatar billede jesperthomsen Nybegynder
28. februar 2002 - 14:28 #21
Jeg ville nok ikke nøjes med det du skriver; du skal jo lige have Debitornummeret med også; ellers får du slettet lidt for meget.
Avatar billede celal Nybegynder
28. februar 2002 - 14:30 #22
Jepser: hvis kun skal bruge delete, så skal jeg vel ikke have : DebitorNr = " & """ & Debitornr & """ Med?
Avatar billede celal Nybegynder
28. februar 2002 - 14:31 #23
Jo, men SL01050 er en dato, og jeg skal have slettet alt det hvor dato < 1997
Avatar billede celal Nybegynder
28. februar 2002 - 14:32 #24
Når den finder en post hvor feltet SL01050 macher, så sletter den da hele posten? eller hvad?
Avatar billede jesperthomsen Nybegynder
28. februar 2002 - 14:34 #25
Jo, med mindre du vil slette ALLE poster mellem 1. jan 01 og 31. dec 96 og ikke kun dem for den ene debitor. Vær for resten opmærksom på at du efterlader de poster som er lavet efter midnat 31. dec 96.
Avatar billede celal Nybegynder
28. februar 2002 - 14:35 #26
Nej nej , jeg skal slette alt, som er imellem den periode
Avatar billede jesperthomsen Nybegynder
28. februar 2002 - 14:46 #27
Så behøver du ikke debitornummeret. Og den sletter selvfølgelig hele posten.
Avatar billede celal Nybegynder
28. februar 2002 - 15:46 #28
Tak for hjælpen. nettet gik ned, men er tilbage. :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester