PDA

Vollständige Version anzeigen : Aktion mit markierten Datensätzen


HermannL
07.07.2001, 18:07
Hallo

ich möchte aus einem Formular heraus, über eine on click aktion, feld7,9 u. 12 von 15 feldern des Datensatzes auslesen, bzw. verarbeiten.
zur zeit stelle ich mich manuel auf jeden datensatz und führe dann diese auslesen bzw. weiterverarbeiten über eine ander on click aktion durch.

Die markierung steht in einem ja/nein feld der tabelle und wurde über ein anderes formular gesetzt.

Nun dachte ich mir das acces alleine alle markierten datensätze verarbeitet, wozu natürlich die bisherige aktion um dieses durchsuchen ergänzt werden müsste, oder eine neue Aktion mit den alten verarbeitungsbestandteilen erzeugt werden müsste.

Wie gehe ich jetzt vor, auch damit die markierung nach erfolgreichem abschluss der o.angeführten Aktion wieder auf nein steht.

grüsse hermann

Scorefun
07.07.2001, 18:42
Du kannst mit der recordsetclone-Eigenschaft des Formulares arbeiten:

dim r as recordset
set r = me.recordsetclone

r.movefirst

do while not r.eof

if r!DeinJaNeinFeld = true then
'Mach das was Du machen willst
r!DeinJaNeinFeld = false
end if
r.movenext
loop
r.close: set r = nothing

So oder aehnlich...
HTH

HermannL
07.07.2001, 19:45
Hallo,
Danke für die schnelle Antwort!

liest sich eigentlich ganz logisch.
Jedoch, ich bekomme die fehler meldung "typen unverträglich" ohne einen hinweis auf die oder das was er meint!
?????
Ich habe da keine Ahnung!

gruss Hermann

Scorefun
08.07.2001, 14:46
poste mal Deinen kompletten Code,
oder schick mal einen Auszug der DB an meine e-mail

HermannL
08.07.2001, 15:15
Hallo RAlf,
mach ich doch glatt, mail ist schon unterwegs:
Hier nochmals der code für alle:

Private Sub markierte_kopieren_Click()
On Error GoTo Err_markierte_kopieren_Click

Dim fehler
Dim dateipfad
Dim Welche
Dim asFiles() As String '** Array für die zu kopierenden Dateien
Dim sTarget As String '** Variable für das Zielverzeichnis
Dim r As Recordset
Let fehler = 0

Let dateipfad = [Verzeichnisse]![Bildverzeichnis] + [Objektart] + "\" + [unterverzeichnis-bilder] + "\"

MsgBox "bis hier ok"
Set r = Me.RecordsetClone


r.MoveFirst

Do While Not r.EOF

If Kontrollkästchen_trans_bilder = True Then
Let fehler = 0
MsgBox "Objekt Fotos von " + [Objaktname] + " werden jetzt kopiert", 1, "Kopieren der Objekt Bilddateien"

If InStr(1, [Bild klein], "keinbild_") > 0 Or InStr(1, [Bild klein], "kein_grundriss_") > 0 Then
Else
If FileExists([Verzeichnisse]![serverdatenverzeichnis] + [Bild klein]) <> False Then
MsgBox [Bild klein] + " existiert bereits und wird nicht kopiert !", 16, "ZIELDATEI SCHON VORHANDEN "
Let fehler = 1
Else
CopyFile dateipfad + [Bild klein], [Verzeichnisse]![serverdatenverzeichnis] + [Bild klein], 1
End If
End If

If InStr(1, [Bild gross], "keinbild_") > 0 Or InStr(1, [Bild gross], "kein_grundriss_") > 0 Then
Else
If FileExists([Verzeichnisse]![serverdatenverzeichnis] + [Bild gross]) <> False Then
MsgBox [Bild gross] + " existiert bereits und wird nicht kopiert !", 16, "ZIELDATEI SCHON VORHANDEN "
Let fehler = fehler + 1
Else
CopyFile dateipfad + [Bild gross], [Verzeichnisse]![serverdatenverzeichnis] + [Bild gross], 1
End If
End If

If InStr(1, [Bild innen], "keinbild_") > 0 Or InStr(1, [Bild innen], "kein_grundriss_") > 0 Then
Else
If FileExists([Verzeichnisse]![serverdatenverzeichnis] + [Bild innen]) <> False Then
MsgBox [Bild innen] + " existiert bereits und wird nicht kopiert !", 16, "ZIELDATEI SCHON VORHANDEN "
Let fehler = fehler + 1
Else
CopyFile dateipfad + [Bild innen], [Verzeichnisse]![serverdatenverzeichnis] + [Bild innen], 1
End If
End If

If InStr(1, [Grundriss_EG], "keinbild_") > 0 Or InStr(1, [Grundriss_EG], "kein_grundriss_") > 0 Then
Else
If FileExists([Verzeichnisse]![serverdatenverzeichnis] + [Grundriss_EG]) <> False Then
MsgBox [Grundriss_EG] + " existiert bereits und wird nicht kopiert !", 16, "ZIELDATEI SCHON VORHANDEN "
Let fehler = fehler + 1
Else
CopyFile dateipfad + [Grundriss_EG], [Verzeichnisse]![serverdatenverzeichnis] + [Grundriss_EG], 1
End If
End If

If InStr(1, [Grundriss_OG], "keinbild_") > 0 Or InStr(1, [Grundriss_OG], "kein_grundriss_") > 0 Then
Else
If FileExists([Verzeichnisse]![serverdatenverzeichnis] + [Grundriss_OG]) <> False Then
MsgBox [Grundriss_OG] + " existiert bereits und wird nicht kopiert !", 16, "ZIELDATEI SCHON VORHANDEN "
Let fehler = fehler + 1
Else
CopyFile dateipfad + [Grundriss_OG], [Verzeichnisse]![serverdatenverzeichnis] + [Grundriss_OG], 1
End If
End If
If fehler > 0 Then
MsgBox "Objekt Fotos von " + [Objaktname] + " kopieren ist beendet! Es wurden " + Str(fehler) + " Fehler festgestellt.", 48, "Kopieren der Objekt Bilddateien beendet"
'GoTo Exit_markierte_kopieren_Click
Else
Kontrollkästchen_trans_bilder = False
End If

End If 'trans_bilder =true

r.MoveNext
Loop
r.Close: Set r = Nothing

Exit_markierte_kopieren_Click:
Exit Sub

Err_markierte_kopieren_Click:
MsgBox Err.Description + " " + Welche, 16
Resume Exit_markierte_kopieren_Click
End Sub

HermannL
08.07.2001, 16:02
Hallo Ralf,
danke für deine schnelle e-mail antwort!

Habe gemäss deiner empfehlung die Fehler routine ausgeklammert.

Er bleibt mit fehler meldung 13: typen unverträglich an diesem Satz stehen:

Set r = Me.RecordsetClone

Hilft dir das weiter um eine Diagnose zu stellen?
Gruss Hermann

WalterS
08.07.2001, 20:57
Hallo!
Die Fehlermeldung würde bedeuten, dass dein Formualr keine Datensatzherkunft hat. bzw eine ungültige oder willst du auf den Recordsetclone eines U-Forms zurückgreifen !!!

HermannL
08.07.2001, 21:49
Was heist keine Datensatzherkunft?
Ich habe doch alle Daten in dem Formular und bekomme, wenn ich ohne diese recordset geschichte arbeite auch keine Fehlermeldung!
Irgendwas iszt doch jetzt nicht schlüssig! aber was?

gruss Hermann

HermannL
09.07.2001, 09:50
Hallo Access'er,

wie Ihr lesen könnt gibts einige Probleme bei meiner Anwendung mit dem Recordsetclone Befehl!

Gibt es eine andere Möglichkeit vom 1 bis zum letzten DAtensatz einer Datenbank über einen Loop oder Skip Befehl durchzulaufen ohne das man es mit einem Recordsetclone macht?

Es ist eine Kleine Datenbank mir etwa 100-200 Datensätzen, somit dürfte eine langsamere Procedur auch in Frage kommen.

viele Grüsse
Hermann

PS: ich baue auf euch, ich weiss keinen Rat mehr und erst recht nicht mehr weiter!

Morli
09.07.2001, 13:54
Hallo Hermann,

also ich verstehe auch nicht so ganz, warum Du da einen Fehler bekommst, arbeitest Du eventuell mit Access2000? Dann schau dir mal die Verweise bezüglich ADO und DAO an.

Als Alternative könntest Du zuerst mit DCount die Anzahl deiner Datensätze abfragen und dann mit einer kleinen Schleife unter Verwendung von DoCmd.GotoRecord , , acnext
die Datensätze deines Forms durchlaufen. Ist zwar nicht sehr elegant, sollte aber gehen.

Gruß

Rainer ;)

HermannL
09.07.2001, 17:06
Hallo,

habe es mit dem

DoCmd.GotoRecord , , acnext

gemacht und es läuft durch!

Danke euch allen !

Noch eine Frage Wie kann man in access eine Pause einbauen, so das man zb. 2 sec. wartet bis der nächste loop durchgeführt wird?

Gruss Hermann

Morli
09.07.2001, 17:10
Hallo Hermann,

das kannst Du machen indem du dir in eine Variable die aktuelle Zeit schreibst und dann mit z.B. Do While Datediff....
die aktuelle Zeit mit Variable vergleichst und nach 2 Sekunden die Schleife verläßt.

Gruß

Rainer ;)

Scorefun
09.07.2001, 17:43
Hi Hermann,

na dann isses ja gut, dass es auf diesem Wege jetzt funzt.
Wuerd mich trotzdem mal interessieren, warum Deine DB keinen Recordsetclone verträgt
....