Avatar billede monmike Nybegynder
12. november 2004 - 13:02 Der er 20 kommentarer og
1 løsning

hente en værdi og gemme igen

På en form har jeg en delete knap. Når man trykker på den vil jeg gerne have at værdien fra et Notat feltet fra kundens kort bliver hentet og der bliver tilføjet en linie øverst og så gemt igen.
Kundes kort er ikke det aktuelle i formen, så jeg forestiller mig noget med dlookup hvor jeg henter indholdet af feltet og så skal jeg bare lige vide hvordan jeg gemmer det igen.
Avatar billede supertekst Ekspert
12. november 2004 - 14:05 #1
Er der et felt på formen, der identificere kunden?

Hvis dette er tilfældet kan du åbne tabellen som objekt i CurrentDB - læse alle poster igennem til du finder kunden - eller søger direkte hvis feltet = primary key.

opdater feltet:

  with recordVar
    .edit
    .fields(nr) = nylinie + chr(13) + .fields(nr)
    .update
  end with

MVH
Avatar billede monmike Nybegynder
12. november 2004 - 14:17 #2
hvordan åbner jeg en tabel som objekt.
Kan godt se ideen i det du skriver og det er rigtigt, men kan ikke helt se mig ud af resten af koden.
Jeg har et felt i formen som hedder kunde id. Det er lig med primær nøglen i kundetabellen. og feltet som jeg vil opdatere hedder Notat.
Avatar billede supertekst Ekspert
12. november 2004 - 14:43 #3
D.v.s at du indtaster kundenr i din form - idet du skriver, at det ikke er den aktuelle kunde du ser i formen.

Du skal generere en hændelse i din form (kodegenerator)når du klikker på Delete-knappen.

dim db,ktab,kundenr

sub knapNr_click        'den sub kommer når du genererer hændelsen på knappen
  kundenr = [kundenr]    'kundenr er feltet i din form, hvor du har indtastet kundenr

  if findekunde(kundenr) = true then
    with ktab
      .edit
      .fields(Nr) = "tekstlinie" + chr(13) + .fields(Nr) 'notatfeltet
      .update
    end with
  end if
lukdb
end sub

public sub openDB
    Set db = currentDB
    Set kTab = db.openrecordset("kunder")
End Sub

Public Sub lukDB()
    kTab.Close
    db.Close
End Sub

Public Function findesKunde(knr)
    openDB
    ktab.Index = "primarykey"
    ktab.Seek "=", knr
   
    If Not kTab.NoMatch Then
        findesKunde = True
        Exit Function
    End If
    findeskunde = False
End Function
Avatar billede monmike Nybegynder
12. november 2004 - 15:00 #4
hmm. Jeg får en object required tilbage i hovedet.

Private Sub cancelbtn_Click()
On Error GoTo Err_cancelbtn_Click
Dim Besked As String

Svar = MsgBox(Prompt:="            " & "Cancel Inquiry", Title:="Cancel Inquiry", Buttons:=vbYesNo)
If Svar = 7 Then
Exit Sub
Else

Besked = "ændringer"

Dim db, ktab, Kundenr
openDB
Kundenr = Me.kundeid    'kundenr er feltet i din form, hvor du har indtastet kundenr

  If findesKunde(Kundenr) = True Then
    With ktab
      .Edit
      .Fields(Notat) = Besked + Chr(13) + .Fields(Notat) 'notatfeltet
      .Update
    End With
  End If
LukDB
End If
Exit_cancelbtn_Click:
    Exit Sub

Err_cancelbtn_Click:
    MsgBox Err.Description
    Resume Exit_cancelbtn_Click

End Sub
Public Sub openDB()
    Set db = CurrentDb
    Set ktab = db.OpenRecordset("Firmadata")
End Sub
Public Sub LukDB()
    ktab.Close
    db.Close
End Sub
Public Function findesKunde(knr)
    openDB
    ktab.Index = "primarykey"
    ktab.Seek "=", knr
   
    If Not ktab.NoMatch Then
        findesKunde = True
        Exit Function
    End If
    findesKunde = False
End Function
Avatar billede monmike Nybegynder
12. november 2004 - 15:03 #5
vers. 2  hmm. Jeg får en object required tilbage i hovedet.

Private Sub cancelbtn_Click()
On Error GoTo Err_cancelbtn_Click
Dim Besked As String

Svar = MsgBox(Prompt:="            " & "Cancel Inquiry", Title:="Cancel Inquiry", Buttons:=vbYesNo)
If Svar = 7 Then
Exit Sub
Else

Besked = "ændringer"

Dim db, ktab, Kundenr

Kundenr = Me.kundeid    'kundenr er feltet i din form, hvor du har indtastet kundenr

  If findesKunde(Kundenr) = True Then
    With ktab
      .Edit
      .Fields(Notat) = Besked + Chr(13) + .Fields(Notat) 'notatfeltet
      .Update
    End With
  End If
LukDB
End If
Exit_cancelbtn_Click:
    Exit Sub

Err_cancelbtn_Click:
    MsgBox Err.Description
    Resume Exit_cancelbtn_Click

End Sub
Public Sub openDB()
    Set db = CurrentDb
    Set ktab = db.OpenRecordset("Firmadata")
End Sub
Public Sub LukDB()
    ktab.Close
    db.Close
End Sub
Public Function findesKunde(knr)
    openDB
    ktab.Index = "primarykey"
    ktab.Seek "=", knr
   
    If Not ktab.NoMatch Then
        findesKunde = True
        Exit Function
    End If
    findesKunde = False
End Function
Avatar billede supertekst Ekspert
12. november 2004 - 15:32 #6
Prøv at flytte denne linie :

Dim db, ktab, Kundenr

så den står foran Private Sub cancelbtn_Click()

skal anvendes i flere sub's - derfor udenfor...

MVH
Avatar billede monmike Nybegynder
12. november 2004 - 15:55 #7
næ, det gør ingen forskel
Avatar billede monmike Nybegynder
12. november 2004 - 16:13 #8
Hvis jeg følger koden kan jeg se at den ikke finder noget i db og ktab. (toggle)

Public Sub openDB()
    Set db = CurrentDb
    Set ktab = db.OpenRecordset("Firmadata")
End Sub
Avatar billede supertekst Ekspert
13. november 2004 - 09:46 #9
Har taget en kopi af din kode - undersøger - og vender tilbage.

MVH
Avatar billede supertekst Ekspert
13. november 2004 - 10:31 #10
Hej - her er din kode - mine tilføjelser/kommentarer er anført med <<< - det fungerer hos mig...

Option Compare Database
Option Explicit
Dim db, ktab, Kundenr
Private Sub Kommandoknap3_Click()                                      '<<< mit knapnavn
Dim svar
Dim Besked As String

On Error GoTo Err_cancelbtn_Click

svar = MsgBox(Prompt:="            " & "Cancel Inquiry", Title:="Cancel Inquiry", Buttons:=vbYesNo)
If svar = 7 Then
Exit Sub
Else

Besked = "ændringer"


Kundenr = Me.kundeid    'kundenr er feltet i din form, hvor du har indtastet kundenr

  If findesKunde(Kundenr) = True Then
    With ktab
      .Edit
      .Fields("Notat") = Besked + Chr(13) + Chr(10) + .Fields("Notat") '<<< ""'er omkring fetnavn samt tilføjelse af +chr(10)
      [Tekst4] = .Fields("notat")                                      '<<< Visning af rettet notatfelt i form
      .Update
    End With
  End If
LukDB
End If
Exit_cancelbtn_Click:
    Exit Sub

Err_cancelbtn_Click:
    MsgBox Err.Description
    Resume Exit_cancelbtn_Click

End Sub
Public Sub openDB()
    Set db = CurrentDb
    Set ktab = db.OpenRecordset("Firmadata")
End Sub
Public Sub LukDB()
    ktab.Close
    db.Close
End Sub
Public Function findesKunde(knr)
    openDB
    ktab.Index = "primarykey"
    ktab.Seek "=", knr
   
    If Not ktab.NoMatch Then
        findesKunde = True
        Exit Function
    End If
    findesKunde = False
End Function

MVH
Avatar billede monmike Nybegynder
15. november 2004 - 10:22 #11
Hejsa - har lige prøvet din kode. Men får nu en ny fejl. "Handlingen understøttes ikke af denne objekttype." Kan det være nogle referencer jeg ikke har som jeg burde.
Avatar billede monmike Nybegynder
15. november 2004 - 10:23 #12
Handlingen understøttes ikke for denne objekttype står der i fejlen.
Avatar billede supertekst Ekspert
15. november 2004 - 10:27 #13
I hvilken linie i VBA koden opstår fejlen.

Debug - når fejlen opstår.



- du ved godt at du kan "steppe" igenem koden med [F8]!

MVH
Avatar billede monmike Nybegynder
15. november 2004 - 10:31 #14
ktab.Index = "primarykey"

efter denne linie springer den til fejl behandlingen
Avatar billede monmike Nybegynder
15. november 2004 - 10:33 #15
har det evt. noget at sige at det er sammenkædede tabeller.
Avatar billede supertekst Ekspert
15. november 2004 - 11:05 #16
JA - så kan opslag via PrimaryKey ikke anvendes (så vidt jeg ved) - anvend seriel søgning - altså læs alle poster igennem indtil du finder det rigtige.
Avatar billede monmike Nybegynder
15. november 2004 - 11:08 #17
ja nemlig ja. Men hvordan gør man det. Det er ikke lige mit stærke område det her.
Avatar billede supertekst Ekspert
15. november 2004 - 11:26 #18
Funktionen FindesKunder ser herefter således ud:


Public Function findesKunde(knr)
dim f
    openDB

    for f = 1 to ktab.recordcount
    with ktab
      if .fields(0) = knr then 
            findesKunde = true
            exit function
      end if
      .movenext
    end with

    findesKunde = False
End Function
Avatar billede monmike Nybegynder
15. november 2004 - 11:45 #19
Public Function findesKunde(knr)
Dim f
    openDB

    For f = 1 To ktab.RecordCount
    With ktab
      If .Fields(0) = knr Then
            findesKunde = True
            Exit Function
      End If
      .MoveNext
    End With
    Next f
    findesKunde = False
End Function

indsatte lige en next kommando, da den kom med fejl om at den manglede. Men den køre kun en gang. Altså ikke til den finder den rigtige rekord.
Avatar billede monmike Nybegynder
15. november 2004 - 12:26 #20
Jeg har lavet den på en anden måde, hvor jeg åbner en ny form som indeholder notat feltet og ID feltet. Det finder den rigtige post udfra openargs og så lavede jeg besked om til en global variable. På den måde kan jeg så indsætte besked i notat feltet. Den nye for lukker af sig selv igen efter opdateringen, så man kommer aldrig til at se den.

Men takker for hjælpen og ideerne og håber du lige smider et svar, for du har i hvert fald fortjent point, for dit arbejde.
Avatar billede supertekst Ekspert
15. november 2004 - 13:07 #21
Selv tak og god vind med DB...

MVH
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