PDA

Vollständige Version anzeigen : Abfragen ob bestimmter Datensatz in Tabelle ist


nollsen
18.01.2003, 11:45
Hallo !
Ich will ein Kontrollkästchen davon abhängig machen ob ein Datensatz in einer Tabelle auftaucht.
Wie frag ich das ab ?
Is wahrscheinlich ziemlich einfach, aber ich kriegs nicht geregelt :D

SNowack
18.01.2003, 12:14
Hallo,

da gibt es verschiedene Wege. Bsp.


If DCount("[DeinFeld]","[DeineTabelle]","[DeinFeld] = '" & Me!DeinFormularFeld & "'") > 0 then
Me!DeinKontrollkästchen = True
else
Me!DeinKontrollkästchen = False
end if


HTH

nollsen
18.01.2003, 12:36
Klappt leider nicht.
Was ist denn mit DeinFeld gemeint ? Das ist doch das feld in der Tabelle, das als Kriterium dient, oder ? Warum ist das zweimal in dem Code ?
Meine Tabelle heißt Ausleihe. Mein Formularfeld heißt Inventar-Nr und das Feld in der Tabelle ist ebenfalls Inventar-Nr.
Ich hab jetzt statt dem Kontrollkästchen eine andere Idee, die aber diegleiche Bedingung braucht. Wenn Bedingung erfüllt, soll eine Schaltfläche ausgeblendet werden.
Ich hab es folgendermaßen probiert: (ging aber auch schon mit dem kontrollkästchen nicht)

Private Sub Form_Load()
If DCount("[Inventar-Nr]", "[Ausleihe]", "[Inventar-Nr] = '" & Me![Inventar-Nr] & "'") > 0 Then
Me!Befehl8.Visible = False
Else
Me!Befehl8.Visible = True
End If
End Sub

Danke

racoon0506
18.01.2003, 14:30
Moin.
Wenn die Inventar-Nr in der Tabelle ein Feld des Typs Zahl ist, dann:

If DCount("[Inventar-Nr]", "Ausleihe", "[Inventar-Nr] = " & Me![Inventar-Nr] ) > 0 Then

Die Bezeichnung DeinFeld hast du insofern richtig interpretiert, dass es sich hierbei um das Tabellenfeld handelt.
Es ist in dieser Zeile doppelt vorhanden, da:

If DCount("[Inventar-Nr]",.....
hier wird das Feld benötigt, damit die Anzahl der vorhandenen Datensätze mit dieser Inventar-Nr gezählt werden können..

..."[Inventar-Nr] =" & Me!.....
hier wird das Suchkriterium bestimmt, mit dem die vorhandenen Datensätze verglichen werden. Nur übereinstimmende DS werden dann ausgewertet bzw. durch das DCount gezählt.

Das Zeichen " ' " wird bei Vergleichen von Strings (Texten) benötigt, bei Zahlen sind die überflüssig.

uwek
18.01.2003, 15:19
Hallo nollsen

Praktisch wäre eine Function mit der du optional Werte auslesen kannst
und die du auch überall mit den gewünschten Parametern verwenden kannst.

Habe mal so eine Function geschrieben.
Sie erwartet die abzufragende Tabelle oder Abfrage,
das Feld worin gesucht wird,
dem Vergleichswert (z.Bsp.: Anrede nach "Herr")
und wie verglichen werden soll (=, >, <)

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Public Function</span> DS_Suchen(strSource <span class="TOKEN">As</span> String, _
varSuche <span class="TOKEN">As</span> Variant, _
varVergleich <span class="TOKEN">As</span> Variant, _
<span class="TOKEN">Optional</span> varOperator <span class="TOKEN">As</span> Variant = &quot;=&quot;) <span class="TOKEN">As</span> <span class="TOKEN">Boolean</span>
&nbsp;
<span class="REM">' Bsp.: SELECT * From strSource WHERE varSuche varOperator varVergleich</span>
<span class="REM">' SELECT * FROM tblTermin WHERE Datum = &quot;01.01.2003&quot;</span>
&nbsp;
<span class="REM">' *************************************************************</span>
<span class="REM">' Erstellt von : Uwe Knauth / mr.uwe@t-online.de</span>
<span class="REM">' Parameter : strSource : bezeicnet die abzufragende Tabelle oder Abfrage</span>
<span class="REM">' Parameter : varSuche : nach was soll gesucht werden</span>
<span class="REM">' Parameter : varVergleich : mit was soll varSuche verglichen werden</span>
<span class="REM">' Parameter : varOperator : Vergleich / =, &lt; , &gt;</span>
<span class="REM">' R&uuml;ckgabe : Boolean</span>
<span class="REM">' Erstellungsdatum : 18.01.2003</span>
<span class="REM">' Bemerkungen :</span>
<span class="REM">' &Auml;nderungen :</span>
<span class="REM">'</span>
<span class="REM">' *************************************************************</span>
<span class="TOKEN">Dim</span> db <span class="TOKEN">As</span> DAO.Database
<span class="TOKEN">Dim</span> rs <span class="TOKEN">As</span> DAO.Recordset
<span class="TOKEN">Dim</span> strSQL <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> intCount <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
&nbsp;
<span class="TOKEN">Dim</span> strProcName <span class="TOKEN">As</span> <span class="TOKEN">String</span>
strProcName = &quot;Suche nach: &quot; &amp; varSuche
&nbsp;
<span class="TOKEN">On Error GoTo</span> DS_Suche_Err
<span class="REM">' wenn kein Operator angegeben, denn Vergleich &quot;=&quot;</span>
<span class="TOKEN">If</span> IsMissing(varOperator) <span class="TOKEN">Then</span> varOperator = &quot;=&quot;
&nbsp;
&nbsp;
<span class="TOKEN">If</span> IsNumeric(varVergleich) <span class="TOKEN">Then</span> <span class="REM">' pr&uuml;ft ob nach einen Zahlenwert gesucht wird</span>
<span class="TOKEN">If</span> IsDate(varVergleich) <span class="TOKEN">Then</span> <span class="REM">' pr&uuml;ft diesen Wert auf Datums-Ausdruck</span>
varVergleich = Format(<span class="TOKEN">CDate</span>(varVergleich), &quot;\#mm\/dd\/yy#&quot;, vbMonday, vbFirstFourDays)
<span class="TOKEN">Else</span>
varVergleich = varVergleich <span class="REM">' kein Datum - Zahlen-Wert</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Else</span>
varVergleich = &quot;'&quot; &amp; varVergleich &amp; &quot;'&quot; <span class="REM">' ansonsten String-Wert</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
strSQL = &quot;SELECT * FROM &quot; &amp; _
strSource &amp; &quot; WHERE &quot; &amp; _
varSuche &amp; Chr(32) &amp; _
varOperator &amp; Chr(32) &amp; _
varVergleich
&nbsp;
<span class="TOKEN">Set</span> db = CurrentDb()
<span class="TOKEN">Set</span> rs = db.OpenRecordset(strSQL, dbOpenDynaset)
&nbsp;
<span class="TOKEN">Do</span> <span class="TOKEN">While</span> <span class="TOKEN">Not</span> rs.EOF
intCount = rs.RecordCount
rs.MoveNext
<span class="TOKEN">Loop</span>
&nbsp;
<span class="TOKEN">If</span> intCount &lt;&gt; 0 <span class="TOKEN">Then</span>
DS_Suchen = <span class="TOKEN">True</span>
<span class="TOKEN">Else</span>
DS_Suchen = <span class="TOKEN">False</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
rs.Close
<span class="TOKEN">Set</span> rs = <span class="TOKEN">Nothing</span>
db.Close
<span class="TOKEN">Set</span> db = <span class="TOKEN">Nothing</span>
&nbsp;
DS_Suche_Exit:
<span class="TOKEN">Exit Function</span>
&nbsp;
DS_Suche_Err:
DS_Suchen = <span class="TOKEN">False</span>
<span class="TOKEN">Resume</span> DS_Suche_Exit
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>

Nouba
18.01.2003, 16:59
Hallo,

stelle den Kode mal in's Current Ereignis der Form, das bei jedem Datensatzwechsel abgearbeitet wird.