Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Ereignis "Bei Änderung" für Suchtextfeld

Begonnen von Paule, September 22, 2016, 21:16:27

⏪ vorheriges - nächstes ⏩

DF6GL

Hallo,

ich verstehe nach wie vor nicht, wie man  nach der nichts sagenden ID (ich vermute mal einen Autowert)  mit "like" suchen wollte.  Warum nimmst Du nicht den Customer-Namen?

in der Change-Ereignisprocedur des Suchfeldes:

Me!listDefectID.RowSource = _
  "SELECT SA_Defect.DefectID, SA_Defect.CustomerID, SA_Customer.CustomerName " & _
  " FROM SA_Options_OpenSupportTicketsQ " & _
  "INNER JOIN SA_Defect ON SA_Customer.CustomerID = SA_Defect.CustomerID " & _
  "WHERE SA_Customer.CustomerName Like '*" & Me!txtCustomerID.Text & "*'"
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

@Franz
Weil wir im afrikanischen Kontext nicht mit Namen arbeiten können. Diese doppeln sich häufig und sind nicht selten falsch. Auf den entsprechenden Formularen (also physisch) arbeiten wir immer mit den Kunden-Nummern.

@Beaker

Option Compare Database

Private Sub Befehl47_Click()
    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.GoToRecord , , acNewRec
    Me!txtSearchPart = ""
    Me!txtCustomerID = ""
    Me!listDefectID.RowSource = "SELECT SA_Defect.DefectID,   SA_Defect.CustomerID, SA_Customer.CustomerName FROM SA_Options_OpenSupportTicketsQ"
    Me!RepairedReplacedItem1.RowSource = "SELECT WH_ItemsT.ItemID, WH_ItemsT.ItemName FROM WH_ItemsT"
End Sub


Private Sub txtCustomerID_Change()
Me!listDefectID.RowSource = _
  "SELECT SA_Defect.DefectID, SA_Defect.CustomerID, SA_Customer.CustomerName " & _
  " FROM SA_Options_OpenSupportTicketsQ " & _
  "INNER JOIN SA_Defect ON SA_Customer.CustomerID = SA_Defect.CustomerID " & _
  "WHERE SA_Defect.CustomerID Like '*" & Me!txtCustomerID.Text & "*'"
End Sub

Private Sub txtSearchPart_Change()
    Me!RepairedReplacedItem1.RowSource = "SELECT WH_ItemsT.ItemID, WH_ItemsT.ItemName FROM WH_ItemsT WHERE ItemName Like '*" & Me!txtSearchPart.Text & "*'"
End Sub


Das sind alle Codes zu diesem Formular. Oder was genau meintest du? Falsch das das falsche ist, dann einfach bescheid geben und ich suche das raus, was du benötigst.

Beaker s.a.

Hallo Paul,
Versuch's mal ohne die einfachen Quotes und wandel den Suchbegriff in eine Zahl.
Private Sub txtCustomerID_Change()
   
    If (txtCustomerID.Text & vbNullString) = vbNullString Then
        Me!listDefectID.RowSource = SA_Options_OpenSupportTicketsQ
'siehe #2 <Da hast du dann ohne Suchkriterium immer nur alle unerledigten.>
    Else
        Me!listDefectID.RowSource = _
            "SELECT SA_Defect.DefectID, SA_Defect.CustomerID, SA_Customer.CustomerName " _
          & "FROM SA_Options_OpenSupportTicketsQ " _
                & "INNER JOIN SA_Defect " _
                & "ON SA_Customer.CustomerID = SA_Defect.CustomerID " _
          & "WHERE SA_Defect.CustomerID Like *" & Val(Me!txtCustomerID.Text) & "*"
    End If
   
End Sub


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

#18
Hallo,

verstehe es trotzdem nicht....  Was ist denn CustomerID überhaupt? Was steht da  drin?  Suchen nach einer Ziffer in einer numerischen Zahl ist für mich in diesem Zusammenhang nicht nachvollziehbar.

Oder ist diese "CustomerID"  eine offizielle Kennung (Kennzahl) einer bestimmten Person? Soll heißen, es ist keine Datensatz-ID , eher eine "Ausweisnummer"?
Kommen dann darin auch Buchstaben vor, soll heißen, hat das Tabellenfeld den Datentyp Text?

PS:  Und bist Du sicher, dass die Abfrage  bei fehlendem Kriterium auch tatsächlich alle erwarteten Datensätze liefert ß (Sie liefert keine, wenn es in SA_Defect  keine zugehörenden DS gibt)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

@Beaker
Vielen Dank für deine Mühen. Hat leider noch nicht geklappt. Selbes Problem wie oben beschrieben, aber es geht nicht wieder in den VBA-Editor zurück.

Ich denke, es wäre sinnvoll, die Datenbank mal hochzuladen. Dort geht es um das Formular SA_DefectRepairReplacedF. Dort findet man ganz oben das Such-Textfeld.

Vielleicht ist das einfacher?

Wenn es nicht geht, dann geht es eben nicht. Dennoch schon mal vielen Dank für eure Mühen!

@Franz
Die CustomerID ist der AutoWert. Dieser Nummer nehmen wir als Kundennummer, die auf dem Vertrag landet und für den Kunden ist.
In allen physischen Formularen beziehen wir uns immer auf die Kundennummer - sprich, in Access: CustomerID - weil alles andere nicht praktikabel ist. Im Moment ist es übersichtlich in dem entsprechenden Listenfeld. Gerade mit dem Wachsen der Firma wird das Ganze aber umfänglicher werden. Wenn dann Replacement bzw. Repair-Formulare reinkommen, möchte ich nicht die Kundennummer vom Formular ewig in dem Access-Listenfeld suchen, sondern am besten die Kundennummer in das Such-Textfeld eingeben, damit mir nur noch das zu dieser Nummer existierende Open Support Ticket. Dieses kann ich dann "schließen". Das erleichtert die Übersicht... Daher war das so die Idee...

Ich weiß, das die meisten Dinge in unserer Datenbank verwirrend für Access-Profis sind. Es gibt leider keine solchen bei uns, auf die wir zurückgreifen könnten. Bitte sieh mir das also nach, wenn meine Vorgehensweise für dich komisch erscheint. Bis jetzt lief die Datenbank super...aber es ist nur eine temporäre Lösung, bis wir eine bessere Lösung "finanzieren" können.

DF6GL

Hallo,

nun ja, ok,   (ich glaube, wir hatten vor einiger Zeit schon mal Kontakt wegen dieser DB...)


Die Frage, ob die Abfrage
SELECT SA_Defect.DefectID, SA_Defect.CustomerID, SA_Customer.CustomerName FROM SA_Options_OpenSupportTicketsQ     INNER JOIN SA_Defect
ON SA_Customer.CustomerID = SA_Defect.CustomerID

ohne Kriterium alle (erwarteten) DS liefert, ist nicht beantwortet...


Statt einem Textfeld empfehle ich eher ein Kombifeld ("cmbCustumerID").Da "springt" der Listenfeld-Cursor gleich auf die ID, deren Ziffern nach und nach eingegeben werden.


Datensatzherkunft: Select CustumerID,CustomerName  from SA_Customer  order by CustomerID
Spaltenanzahl: 2
Spaltenbreiten: 1cm;6cm
gebundene Spalte: 1
Steuerelementinhalt: leer

mit dessen Klick_Prozedur:

Sub cmbCustomerID_Click()

Me!listDefectID.RowSource = _
            "SELECT SA_Defect.DefectID, SA_Defect.CustomerID, SA_Customer.CustomerName " _
          & " FROM SA_Options_OpenSupportTicketsQ " _
                & " INNER JOIN SA_Defect " _
                & " ON SA_Customer.CustomerID = SA_Defect.CustomerID " _
          & " WHERE SA_Defect.CustomerID =" & Me!cmbCustomerID
End Sub

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

Hallo Franz,
ich habe entsprechende Anweisungen durchgeführt. Das Kombifeld ist hinzugefügt, genauso wie der Code. Aber selbes Problem wie oben.

Bezüglich der Frage, ob die Abfrage alle Daten liefert:
Meinst du im Listenfeld mit allen offenen Support Tickets?
Da würde die von dir genannte Abfrage keine Hilfe sein. Da werden zwei der drei Datensätze doppelt angezeigt. Verknüpfe ich auch die CustomerID's in beiden Tabellen/Abfragen (SA_Defect und SA_Options_OpenSupportTickets), dann funktioniert es. Dann werden die drei richtigen DS angezeigt. ALso nur bei zwei Inner Joins.

Hilft das weiter?