PDA

Vollständige Version anzeigen : Löschabfrage durch Schaltfläche auslösen ??? (Access 2000)


nollsen
17.01.2003, 12:59
Ich möchte in Access 2000 eine Löschabfrage durch eine Befehlsschaltfläche starten, allerdings kann ich in dem Assistenten keine Abfragen vom Typ Löschabfrage auswählen !?
Ist das normal ? Wie kann ich es totzdem umsetzen ?
Für schnelle Antworten, Ideen wäre ich sehr dankbar.

MfG nollsen

Rol
17.01.2003, 13:09
Hallo Nollsen,

Vieleicht hilft die Execute-Methode Dir, Siehe OH.

Gruss Rol

RUK
17.01.2003, 13:16
Hi nollsen,

kannst du hinter deinem Button eine kurze procedure ablaufen lassen ?! :

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>
on error goto err_frm
&nbsp;
<span class="TOKEN">Dim</span> strSQL as <span class="TOKEN">String</span>
strSQL = &quot;DELETE tblTask.strAuftrag FROM tblTask &quot; _
&amp; &quot;WHERE (((tblTask.strAuftrag) Like [Was soll raus]));"
DoCmd.runSQL (strSQL)
Exit_NK:
<span class="TOKEN">Exit Sub</span>
&nbsp;
Err_Frm:
MsgBox &quot; :( Nr.: &quot; &amp; Err.Number &amp; Chr$(13) &amp; _
Err.Description, vbCritical, &quot;prvSetCheck&quot;
<span class="TOKEN">Resume</span> Exit_NK</pre></div>

So hast du noch die Möglichkeit, eine Eingabe vor zu nehmen.

Aber Achtung: Was weg ist, ist weg

Hütti
17.01.2003, 13:20
kurz:

docmd.openquery "Abfrage" (erhälst du auch, wenn du über den assisstenten einen button einfügst und abfrage ausführen auswählst)

musst evtl. die ereignisabfrage abstellen

docmd.setwarnings=false (natürlich vorher).

oder

dim qry as dao.querydef

set qry=currentdb.querydefs("Abfrage")

qry.execute

hat den vorteil, das du keine warnhinweise erhälst und z.b. parameter eingeben kannst.

mit
with qry
.parameters("Parameter")=xx
.execute
end with

nollsen
17.01.2003, 13:39
Vielen Dank schonmal für die Hilfe, aber ich kriegs nicht gebacken :confused:
Am besten ich schilder mal, was ich überhaupt vorhab. Es geht um eine Bücherei. Ich hab in der Tabelle Ausleihe jeweils die "Inventar-Nr" des ausgeliehenen Buchs, die "Ausleiher-Nr" und das Ausleihdatum gespeichert.
Durch Eingabe der Inventar-Nr soll der entsprechende Eintrag in der Tabelle gelöscht werden, wenn ein Buch zurückgegeben wird. Diese Nummer soll vom Formular an die Abfrage übergeben werden.

Als Abfrage hatte ich das ja soweit hingekriegt, dann kam aber das Problem, das ich sie nicht an die Schaltfläche hängen konnte.

Vielen, vielen Dank, wenn Ihr mir nochmal helfen könntet.

MfG nollsen

RUK
17.01.2003, 14:22
Hi nollsen,

vor einem "Schuss ins Blaue" wäre es gut, wenn du noch läuterst, ob es zutrifft, dass
- du in einem frm mit einer Kombobox bei Rückgabe die jeweilige Inventarnummer aussuchst ?!
- die "Inventar-Nr" in deiner tblAusleihe [oder wie heißt diese tbl bei dir] enthalten ist und du darüber die Verknüpfung vornimmst ?

Sollte ich das missverstanden haben, schildere bitte, wie das frm und die tblAusleihe aufgebaut ist sowie wie du den JOIN zur Inventartbl vornimmst.

nollsen
17.01.2003, 14:40
Die Tabelle heißt einfach Ausleihe, sie enthält die Spalten Inventar-Nr, Ausleiher-Nr und Ausleihdatum.
Die Inventar-Nr steht in einem normalen Textfeld namens Inventar-Nr. Sie wird nicht ausgewählt, sondern durch die Auswahl des Ausleihers im Hauptformular erscheint sie automatisch im Unterformular, das auf einer Auswahlabfrage basiert und noch Informationen zum Buch anzeigt, weshalb ich nicht einfach in dem Unterformular Datensatz löschen auswählen kann. Deshalb möchte ich hinter die Ausgabe des ausgeliehenen Buchs den Button setzen, der durch die Inventar-Nr den Eintrag in der Tabelle Ausleihe löscht.

Ich hoffe die Informationen reichen aus.

Vielen Dank schonmal

RUK
17.01.2003, 14:55
... und wenn du dann hinter deinem Textfeld einen Button mit Namen "prmDeleteDS" installierst, der beim Klicken folgenden Code aktiviert:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>
<span class="TOKEN">Private Sub</span> prmDeleteDS_Click()
<span class="TOKEN">On Error GoTo</span> Err_Frm
&nbsp;
<span class="TOKEN">Dim</span> strSQL1 <span class="TOKEN">As</span> <span class="TOKEN">String</span>
strSQL1 = &quot;Delete Ausleihe.Inventarnummer FROM Ausleihe &quot; _
&amp; &quot;WHERE (((Ausleihe.Inventarnummer)= &quot; &amp; Me.Inventarnummer &amp; &quot; ));&quot;
&nbsp;
&nbsp;
DoCmd.RunSQL (strSQL1)
Exit_NK:
<span class="TOKEN">Exit Sub</span>
&nbsp;
Err_Frm:
MsgBox &quot; Nr.: &quot; &amp; Err.Number &amp; Chr$(13) &amp; _
Err.Description, vbCritical, &quot;prvSetCheck&quot;
<span class="TOKEN">Resume</span> Exit_NK
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>

könnte das dein Probi evtl. in die Knie zwingen ?! ;)

nollsen
17.01.2003, 15:26
Ich hab jetzt nur noch ein Problem: bei mir heißt das Feld Inventar-Nr und nicht Inventarnummer.
Ich hab den Code also entsprechend geändert, doch dabei gabs Probleme:
er machte aus Inventar-Nr immer Inventar - Nr oder erkennt nur Ausleihe.Inventar statt Ausleihe.Inventar-Nr
Anscheinend ist es keine gute Idee ein - in einen Bezeichner einzubauen.
(Ich bin unschuldig, die DB stammt von meinem Lehrer)
Ich werde also die Sache mal etwas umbenennen und versuchen es hinzukriegen.
Vielen Dank für deine Hilfe

Aquarii
17.01.2003, 15:28
Hallo Nollsen,

schreibe [Inventar-Nr], dann sollte es funzen.

nollsen
17.01.2003, 17:23
Hallo,
nachdem das Problem mit dem Bindestrich behoben ist, geht es leider trotzdem nicht. :(

Hier ist der Code, der durch die Schaltfläche ausgeführt wird:
Dabei entsteht Fehler Nr. 3464 Datentypen in Kriterienausdruck unverträglich

Private Sub prmDeleteDS_Click()
On Error GoTo Err_Frm

Dim strSQL1 As String
strSQL1 = "Delete Ausleihe.[Inventar-Nr] FROM Ausleihe " _
& "WHERE (((Ausleihe.[Inventar-Nr])= " & Me.[Inventar-Nr] & " ));"


DoCmd.RunSQL (strSQL1)
Exit_NK:
Exit Sub

Err_Frm:
MsgBox " Nr.: " & Err.Number & Chr$(13) & _
Err.Description, vbCritical, "prvSetCheck"
Resume Exit_NK



End Sub

Aquarii
17.01.2003, 17:30
Hallo Nollsen,

in welcher Zeile tritt denn der Fehler auf?

nollsen
17.01.2003, 17:42
Ob ihr's glaubt oder nicht.
Ich bin selber auf das Problem gekommen:
Die Inventarnummer wird als Text gespeichert (wie gesagt: mein Lehrer ist verantwortlich)
Deshalb hat es Probleme mit dem Vergleich gegeben. Ich hab aus dem = ein like gemacht und jetzt funktioniert es wunderbar.
DANKE an alle !!!

Aber da wir schon dabei sind: Das Löschen funktioniert im Hintergrund, aber ich seh das Ergebnis erst, wenn ich auf den nächsten Ausleiher und wieder zurück gehe. Erst dann ist die Zeile weg. Ist ja auch klar, aber bestimmt gibts da was ganz simples um das Formular nach dem Löschen automatisch zu aktualisieren ?

Wenn nicht, halb so wild, bin schon jetzt zufrieden.

MfG nollsen

Aquarii
17.01.2003, 17:55
Hallo Nollsen,

freut mich für dich, daß es nun so gut klappt.

Das Formular aktualisierst du mit Me!Requery