2016-03-21 2 views
1

ich sehr dankbar wäre, wenn jemand mein Problem löst. Ich bin neu in der Arbeit mit Ms Access und ich habe immer noch Erfahrungen mit der grundlegenden Funktionalität.Best Practice für die Arbeit mit langen Texten in MS-Access

Ich habe eine Tabelle MyItems. 2 seiner Felder sind: ItemCode und ItemName. ItemName ist ein sehr langer Text (Memotyp). Ich habe auch eine Abfrage und ein Formular mit vielen Feldern. Die Datensatzquelle des Formulars besteht ebenfalls aus vielen Feldern. All diese Dinge (die zu einem Feld gehören) haben die gleichen oder ähnliche Namen, so dass ich sie nicht gut unterscheiden kann.

Was ich will ist, wenn ich den Wert von ItemCode (in einer nicht gebundenen Combobox oder Listbox mit Name ItemCode) den Wert von ItemName in einem Steuerelement - vielleicht TextBox angezeigt werden soll.

Ich kann seinen Wert in einer ListBox (durch SQL-Abfrage in seiner Zeile Quelle) anzeigen, ich habe keine Probleme damit, ich habe keine Probleme mit der Verwaltung von Ereignissen, aber der Text ist sehr lang und wird geschnitten. Ich habe verstanden, dass ListBoxen leider keine Multiline-Eigenschaft haben. Vielleicht ist das am besten geeignete Steuerelement, mit dem man umgehen muss, eine TextBox. Und die am besten geeignete Methode zum Anzeigen des Werts ist die Verwendung der DLookUp-Funktion in der Steuerquelle der TextBox. Aber in diesem Meer von Gegenständen mit ähnlichen oder gleichen Namen kann ich einfach nicht mit seiner Syntax umgehen, ich versuchte es immer wieder sehr lange. So habe ich 2 Fragen:

  1. Sind das TextBox-Steuerelement und DLookUp Funktion in seiner Steuerquelle der beste Weg, lange Texte aus einer Tabelle zu extrahieren, ohne Bindung oder gibt es mehr geeignete Kontrollen (die direkt mit SQL-Abfrage arbeiten) ?

  2. Was ist die richtige Syntax von DLookUp? - wo genau gibt es ‚‘, „“, [], .Wert, = &, wo muss ich den Weg zum Tisch oder Form zu schreiben und wo wäre es falsch sein? Wenn ich nur [ItemCode] schreibe, womit es verbunden wäre - die Formularaufzeichnungsquelle, die Tabelle, das Formularsteuerelement oder irgendetwas anderes? Ich wäre dankbar, wenn jemand die richtige Syntax für meinen Fall schreibt oder wenn er einen Link mit vielen Beispielen für die Verwendung von DLookUp teilt. Diejenigen, die ich gefunden habe, haben mich nicht befriedigt.

Antwort

0
  1. Entweder ein gebundenes Steuerelement oder ein ungebundener ein. Wenn Sie nicht gebunden sind, müssen Sie den Text mit VBA-Code oder mit DLookup in der Steuerungsquelle laden. Es gibt keine anderen Optionen.
    Persönlich würde ich eher den AfterUpdate Fall ItemCode, verwenden und DLookup es nennen, aber das ist eine Frage der Präferenz.

  2. 2.

Es ist nicht so kompliziert. Sie haben grundsätzlich die SELECT, FROM, WHERE Teile einer SQL-Abfrage in den 3 Argumenten. [] werden für alle Bezeichner benötigt, die Leerzeichen oder andere Sonderzeichen enthalten, und wenn sie auf Formularsteuerelemente verweisen.

=DLookup("ItemName", "[my Table]", "ItemCode = '" & [ItemCode] & "'") 

Die Apostrophe '' werden benötigt, wenn ItemCode Text ist, nicht, wenn es eine Zahl ist.

Sie auch verdoppelt nutzen kann (entkommen) doppelte Anführungszeichen, aber das ist viel weniger lesbar.

=DLookup("ItemName", "[my Table]", "ItemCode = """ & [ItemCode] & """") 

Woher kommt nun [ItemCode]?

  • Zugang sucht zuerst nach einem Steuer auf dem Formular mit dem Namen ItemCode.
  • Wenn es keinen gibt, sucht es nach einem Feld ItemCode in RecordSource des Formulars.

Dies sind die einzigen Möglichkeiten, [ItemCode] auszuwerten. Um Verwechslungen zu vermeiden, wird empfohlen, gebundene Steuerelemente mit demselben Namen wie ihr Quellfeld zu benennen.

Die obige Syntax ist nur gültig, wenn sich alles auf demselben Formular befindet. Wenn [ItemCode] auf einer anderen Form ist, oder Sie beziehen sich auf ihn aus einer Abfrage verwenden Sie

=DLookup("ItemName", "[my Table]", "ItemCode = '" & Forms![my Form]![ItemCode] & "'") 

Für kompliziertere Fälle mit subforms finden Refer to Form and Subform properties and controls

Und es in VBA zu verwenden (in ItemCode_AfterUpdate):

Me!ItemName = DLookup("ItemName", "[my Table]", "ItemCode = '" & Me![ItemCode] & "'") 
+0

Vielen Dank! Jetzt sind die Dinge viel klarer und verständlicher. Der Code hat funktioniert. Ich habe es nicht mit "" versucht. Allerdings sollte ich eine Sache korrigieren, vielleicht wegen der ms-access Version, meiner Standardeinstellungen oder ob ich vba/design mode verwende - das Trennzeichen in der Funktion ist ";" - nicht "," – Peter

+0

@Peter: Ja, z.B. In German Access ist das Argument separator; statt, wenn Sie Funktionen in Forms oder Abfragen verwenden. Nicht in VBA. – Andre