PDA

Vollständige Version anzeigen : Nur editiertes Feld kopieren


RQ
29.01.2001, 15:22
Hallo,
folgende Prozedur setzte ich für die Kopie eines Datensatzes vor dem Editieren ein:

Dim db As Database
Set db = CurrentDb()
db.Execute " insert into tblTrace select* FROM [queTest] Where intTest = " & Me![intTest]
db.Close

Frage: Wie kann ich bei der select-Abfrage (select*)nur das gerade geänderte Feld eines DS bekommen? (Ich benötige nicht immer den ganzen DS, sondern nur die Änderung.)

Danke !
Gruß
RQ

Nockenwelle
29.01.2001, 20:08
Hallo,

müsste gehen mit einer Prozedur bei nach aktuallisieren.

Dim DB as Database
Dim rst as recordset
set DB=Currentdb
set rst=db.openrecordset("deine Zieltabelle", dbOpendynaset)
with rst
.addnew
!Name=Me!Name
!Strasse=Me!Strasse
...
...
.update
.close
end with


Cu

Nockenwelle
29.01.2001, 20:29
Hallo,
Sorry, ich habe deine Frage falsch gelesen.
Ich hab' das hier über ein Array erreicht.

Option Compare Database
Option Explicit
Option Base 1

Dim txtErzeuger_nrOld As String
Dim txtBefoerderer_NrOld As String
Dim txtEntsorger_NrOld As String
Dim changeArray As Variant
Private Const cs_Erzeuger_nr = 1
Private Const cs_Befoerderer_Nr = 2
Private Const cs_Entsorger_Nr = 3

Das Formular hat die Prozedur Beim Anzeigen

Private Sub Form_Current()
Dim I As Integer
txtErzeuger_nrOld = IIf(IsNull(Erzeuger_nr), "", Erzeuger_nr)
txtBefoerderer_NrOld = IIf(IsNull(Befoerderer_Nr), "", Befoerderer_Nr)
txtEntsorger_NrOld = IIf(IsNull(Entsorger_Nr), "", Entsorger_Nr)
txtabfallschluesselOld = IIf(IsNull changeArray = Array(False, False, False)
End Sub
Jedes Feld beinhaltet Die Procedur nach aktuallisieren für das jeweilige Element:

Private Sub Erzeuger_nr_AfterUpdate()
If txtErzeuger_nrOld <> Erzeuger_nr Then
changeArray(cs_Erzeuger_nr) = True
Else
changeArray(cs_Erzeuger_nr) = False
End If
End Sub

Das Formular enthält ebenfalls eine Prozedur Nach aktuallisieren. Im Case kannst du dir dann jeweils aussuchen, was du machen willst

For I = 1 To 3
If changeArray(I) = True Then
Select Case I
Case cs_Erzeuger_nr
longRolleBGS = 6
txt_vorher = txtErzeuger_nrOld
txt_nachher = Erzeuger_nr
strUpdate = "UPDATE [Bearbeitung atrp_bet] SET behoerdliche_nr = '" + txt_nachher + "' " + " WHERE bgs_uns_id = " + CStr(Me![bgs_uns_id]) + " and [Bearbeitung atrp_bet]![Rolle] = 6"

Case cs_Befoerderer_Nr
longRolleBGS = 1
txt_vorher = txtBefoerderer_NrOld
txt_nachher = Befoerderer_Nr
strUpdate =
End Select
dbs.Execute (strUpdate)

Dann Schreibt das Prgramm halt Daten in Abhängigkeit davon welches Feld geändert wurde

Nockenwelle
29.01.2001, 20:50
Nochmal Hallo,

mir ist beim kopieren wohl ein kleiner Fehler unterlaufen.
Die vorletzte Zeile in Private Sub Form_Current()

muss lauten
changeArray = Array(False, False, False)
Das davor gehört nicht in die Zeile.

Cu