2016-04-02 7 views
1

Ich habe eine Tabelle in meiner Access-Datenbank, wo ich meine Aufträge verfolgen. Ich habe ein Formular basierend auf einer Abfrage basierend auf dieser Tabelle. In meiner Tabelle gibt es ein Feld namens [file_path]. Dies ist ein Feld, das einen Webbrowser in meinem Formular steuert.kompilieren Fehler ungültig außerhalb der Prozedur

Ich möchte dieses Feld [File_path] aktualisiert werden, wenn ich mein Feld [customer_Id] auf dem Formular aktualisiere. Es sollte aktualisiert werden, um den Kundennamen zusammen mit dem Dateipfad z.B. C:\Users\Windows8\Documents\Projects\Doe John.

Wie ziehe ich die [Customers]![Last_Name] und [Customers]![first_name] in meine Zeichenfolge im Feld [file_path]?

Ich denke, dass ich VBA-Code verwenden muss, aber nicht sicher, wie. Ich habe damit begonnen:

Private Sub Customer_AfterUpdate() 
Me.File_path = Me.Last_Name 
End Sub 

Ich weiß, dass dies ein schwacher Anfang ist. Kann jemand mir helfen? Bitte sagen Sie mir, ob meine Frage nicht klar ist.

Neben all dem gibt der obige Code eine ungültige äußere Prozedur in Private Sub Customer_AfterUpdate() zurück. Warum?

+0

Me.File_path = Me.Last_Name & "" & me.First_name. in deiner Form solltest du 3 Felder mit diesen Namen haben. – Xilmiki

+0

Ok, ich bin neu hier. Ich weiß, dass ein Kommentar nicht der richtige Ort dafür ist. (Oder ist es?) – wesp

+0

Jetzt bekomme ich 'ungültig außerhalb Globalverfahren mit diesem – wesp

Antwort

0

Me bezieht sich auf das Formular. Sie sind richtig, dass die Verwendung von Me Best Practice (Geschwindigkeit, einfache Programmierung, etc.) ist, aber wenn ich begann oder sogar jetzt in einer komplizierten Anwendung schreibe ich es gerne, weil das mich daran erinnert, keine kleinen Fehler zu machen Dies. Oder vielleicht ist deine Erinnerung besser als meine, in diesem Fall ignoriere und lese weiter.

[Dateipfad] befindet sich in der Tabelle, Sie müssen also in der Tabelle darauf zugreifen. Ihr Code sucht in dem Formular nach es und erkennt, dass es sich nicht in Me befindet, und löst diesen Fehler aus.

Ich werde Ihnen unten eine Codezeile geben, die ein guter Ausgangspunkt für Sie sein sollte, aber ich denke, dass Sie Ihr Anrufereignis möglicherweise untersuchen müssen. AfterUpdate ist cool, weil es scheint einfach automatisch zu passieren, aber ich glaube nicht, dass Sie wollen, dass Ihr Feld jedes Mal aktualisiert wird, wenn etwas im gesamten "Kunden" -Formular aktualisiert wird. Wenn es ein bestimmtes Textfeld gibt, das immer zuletzt aktualisiert wird (letzter_name?), Könntest du es stattdessen versuchen, aber ich wäre nervös, wenn ich versuche, immer daran zu denken, dass es das letzte ist, das ich aktualisiert habe ... Wenn ich eines Tages versehentlich den Namen vor der customer_id hätte, hätte ich später einige ernsthafte Verwirrung in meinen Händen. Könnte ich stattdessen eine Befehlsschaltfläche vorschlagen und stattdessen das Ereignis Click verwenden?

Egal welches Ereignis Sie verwenden, Sie brauchen wirklich nur eine Codezeile innerhalb Ihrer Veranstaltung. Es gibt viele Möglichkeiten, dies zu tun. Könnte ich vorschlagen etwas in Richtung CurrentDb.Execute "update " & myAwesomeTableNameHere & " set file_path='"C:\Users\Windows8\Documents\Projects\" & forms("customers").controls("last_name").text & " " & forms("customers").controls("first_name").text & "' where customer_id='" & forms("customers").controls("customer_id").text & "'"

Nun, eine Warnung: Daten sind wertvoll und schön. Die Namen der Leute, die Sie bezahlen, sind noch mehr. Das Ändern von Daten in einer vorbelegten Tabelle durch das Freigeben in eine Textbox in einem Formular klingt wie eine Katastrophe, die auf mich wartet. Wenn ich es wäre, würde ich entweder 1) sehr oft Backups erstellen (easist), oder 2) Ihre Eingaben mehrfach validieren, bevor Sie etwas in den Tisch schreiben.