2016-04-21 5 views
0

Ich habe eine Access-Datenbank basierend auf verknüpften Tabellen von SQL Server (ODBC). Das Hauptformular basiert auf einer SQL Server-Tabelle mit einem Primärschlüsselfeld mit der Bezeichnung PRJ_ID. Jeder Datensatz hat ein ganzzahliges Feld mit dem Namen MASTER_PRJ_REF, das die PRJ_ID des gleichen Datensatzes oder eines anderen Datensatzes derselben Tabelle enthalten kann.MS Access - Formular und Unterformular basierend auf der gleichen Tabelle, aber anderen Datensatz

Grundsätzlich kann ich einen "Master" Datensatz und mehrere "Slave" Datensätze innerhalb der gleichen Tabelle haben. Ich auch angeben, dass in SQL Server ich eine Eins-zu-viele-Beziehung zwischen den beiden Feldern erstellt.

Ich möchte ein Unterformular verwenden, um einige Felder des "Master" -Datensatzes anzuzeigen und eventuell zu ändern, aber mit dem Elternformular, das den "Slave" -Datensatz anzeigt. Was ich tat, ist das Unterformular mit dieser Beziehung zu erstellen:

Parent form: PRJ_ID 
Sub form: MASTER_PRJ_REF 

Problem ist, zeigt das Unterformular denselben Datensatz der Mutterform, nicht die verwiesen wird. Es scheint also, dass es nicht meiner Beziehung folgt, sondern der PRJ_ID zu PRJ_ID Beziehung folgt.

Warum funktioniert die Beziehung nicht?

Ist es richtig, eine Beziehung zwischen zwei Feldern der gleichen Tabelle herzustellen?

+0

Ich glaube, _MASTER_PRJ_REF_ sollte leer sein, wenn der Datensatz eine Top-Level-Datensatz ist. – Gustav

Antwort

0

Ich weiß nicht genau, warum Access versauen, wie ich immer Dinge selbst mit VBA und pure SQL mache und nie auf integrierte Funktionen zugreifen, die im Allgemeinen effizienter ist, und die "Bugs" wie die einem, dem du begegnest.

Also, wenn Sie Code wie ich wollen, hier ist ein Workaround, den ich vorschlagen kann.

Beginnen Sie, die Eltern/Kind (Master/Slave, wenn Sie bevorzugen) Relationen auf Ihrem Formular zu entfernen.

Im current Veranstaltung Ihrer Hauptform, fügen Sie diesen Code:

dim strSQL as string 

' adapt the following SQL where needed : 
' - adapt table name 
' - Replace * with the columns you need 
' - surround the MASTER_PRJ_REF with quotes if it's not a INT 

strSQL = "SELECT * FROM thetable WHERE PRJ_ID=" & me!MASTER_PRJ_REF 

' That's the tricky part. 
' I assumed your subform is named SubForm1, adapt this. 
' You should assign your SQL to your subform record source 
' But access doesn't always accept all syntax following the context, 
' so choose one that work for you and remove the others. 

SubForm1.RecordSource = strSQL 
Form_SubForm1.RecordSource = strSQL ' ---> this one should work for sure if you have added any code to the subform (create the subform module, even if its empty. 
Forms("SubForm1").RecordSource = strSQL 
Me!SubForm1.Form.RecordSource = strSQL 
Forms!NameOfMainForm.SubForm1.Form.RecordSource = strSQL 

Hoffentlich eine der 5-Lösung funktionieren sollte.

Wenn die Daten nicht sofort aktualisiert werden, fügen Sie Folgendes hinzu, mit der gleichen Syntax wie die der 5, die Sie ausgewählt haben und die funktioniert hat.

SubForm1.Requery 
+0

Das ist ein guter Ansatz, ich werde es auf jeden Fall morgen versuchen !! Vielen Dank –

Verwandte Themen