2016-05-13 4 views
1

Zugriff - Wir haben eine Tabelle mit einem Memofeld [DESCRIPTION_OF_REQUEST].Zugriff - Schleife durch Tabelle und finde Fremdschlüssel in einer zweiten Tabelle und Verkette mehrere Felder in ursprüngliche Tabelle

Eine weitere Tabelle zum Aufzeichnen von Datumsänderungen (für zu erbringende Leistungen), die bei einer bestimmten Anforderung auftreten. Eine zu viele Beziehung.

Aus Sicht der Berichterstattung müssen wir die Anfragen monatlich (als Excel) exportieren und möchten, dass alle Änderungen an den Lieferdaten mit dem Kommentarfeld verknüpft werden.

[tblRequests] 


RegProjID DateOfRequest DESCRIPTION_OF_REQUEST 
---------- ------------- ---------------------- 
116   06 Oct 2015 "Stability of broken ampoule." 

und

[tblDateChanges] 

RegProjChangeID RegProjID DateOfDateChange UserName ReasonForChange 
--------------- --------- ---------------- -------- --------------- 
355    116  19 Jan 2016   dskelly "Duplicate Request from Simon Wong CPP Request already in process Original Request # 13661" 

1549   116   21 Mar 2016   sdoyle This request looks like an entry error - it is logged as Trandate 200mg tablets, but refers to a broken ampoule. We received an enquiry from Francisco Gomez for information on a broken Trandate ampoule which has been logged correctly as Req ID 18540. 

Der Ausgang muss für die Änderung der beiden Gründe haben, in der Anforderung in die DESCRIPTION_OF_REQUEST verketteten

wir eine Abfrage zu bauen, die alle ReasonForChange in einen Datensatz verketten wird vor dem Export oder sollte dies in Excel durch den Export von zwei Abfragen geschehen?

Wie immer hat sich aus einer einfachen Datenbank ein wertvolles Reporting-Tool entwickelt, und die Mächte, die es sein wollen, wollen alles für alle.

Vielen Dank für Ihre Vorschläge.

+0

Excel kann der einfachste Weg sein, Sie könnten einige VBA verwenden, um alles zusammen in Access zu stecken und das innerhalb der Abfrage zu verwenden - es wird einen ziemlich großen Einfluss auf die Geschwindigkeit der Abfrage haben, wenn es eine große Tabelle ist. –

+1

Überprüfen Sie verketten zB http://StackOverflow.com/a/93863/2548 – Fionnuala

Antwort

0

Wenn Sie mit dem Hinzufügen eines neuen Felds zu Ihrer Primärtabelle sind in Ordnung wäre es ziemlich einfach sein VBA verwenden, können Sie etwas tun:

Function updateReasonForChange() 
Dim db AS DAO.Database 
Dim Req AS DAO.Recordset 
Dim Chg AS DAO.Recordset 

Set db = currentDb() 
Set Req = db.OpenRecordset("tblRequests") 
Set Chg = db.OpenRecordset(SQL here to select only changes that have not previously 
been added to tblRequests, use a date range would be my preference but you could also 
create a yes/no field in the date changes table to mark it as processed) 

Req.MoveFirst 
Chg.MoveFirst 

Do While Not Chg.EOF 'run though all date change records selected 
    Req.Seek "=" Chg![RegProjID] 'This assumes you have RegProjID indexed 

      If Req.NoMatch 
       'do nothing if no match is found, you could add some error handling here 
       'but if you have a parent-child relationship you should have no issue 
      Else 
       Req.Edit 
       Req![DESCRIPTION_OF_REQUEST] = Req![DESCRIPTION_OF_REQUEST] & " " & Chg![ReasonForChange] 
       Req.Update 
      End if 
Loop 

Req.Close 
Chg.Close 
db.Close 

Set Req = Nothing 
Set Chg = Nothing 
Set db = Nothing 

End Function 

EDIT: Ihr Feldtyp für [DESCRIPTION_OF_REQUEST] wird Materie Wenn hier maximal 255 Zeichen eingegeben werden, kann dies zu Fehlern führen, da viele Gründe für die Änderung zum selben Datensatz hinzugefügt wurden. Möglicherweise müssen Sie dies ändern.

All dies, und ich würde eine einfache Ausgangsauswahlabfrage auf dem Primärschlüssel verbunden sind, bringen in der [DateOfDateChange] und [ReasonForChange] und zeigt das Ergebnis als Pivot-Tabelle vs eine einfache Tabellenkalkulation empfehlen, wird es dienen Ihre Zweck viel besser würde ich denken.

Verwandte Themen