12. november 2004 - 13:02Der 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.
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
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.
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
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
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
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
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
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
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
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.
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.
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.
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.
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.