2016-05-04 9 views
1

Ich erstelle ein Formular mit 2 Unterformularen in Access 2010 ADP zu SQL Server 2008. Ich habe die Felder und alles angezeigt wie ich will sie und in die Steuerung ok einhaken. Wenn ich jedoch versuche, die Datensatzquelle zu sortieren, erhalte ich den Fehler "Multipart-Kennung kann nicht gebunden werden". Wenn ich das SQL im Abfrage-Generator für den Zugriff ausführe, werden die Datensätze in Ordnung zurückgegeben. Nur wenn das Formular geladen wird, wird der Fehler ausgelöst. Wenn ich die Order By aus der SQL entferne, lädt das Formular einfach.mehrteilige Bezeichner kann nicht gebunden werden Fehler beim Hinzufügen von "Order By" -Klausel in Access 2010

Aufnahmequelle von subform:

SELECT  tblTaskTracker.EmployeeID, tblTaskTracker.ProjectID, tblTaskTracker.ReleaseID, tblTaskTracker.TaskStatusID, tblTaskTracker.TaskPriorityID, 
         tblTaskTracker.DueDate, tblTaskTracker.Notes, tblTaskTracker.CompDate, tblTaskTracker.QCByID, tblTaskTracker.QCDate, tblProject.ProjectName, 
         tblTaskCode.TaskCodeAbbr 
FROM   tblTaskTracker INNER JOIN 
         tblProject ON tblTaskTracker.ProjectID = tblProject.ProjectID INNER JOIN 
         tblTaskCode ON tblTaskTracker.TaskCodeID = tblTaskCode.TaskCodeID INNER JOIN 
         tblTaskStatus ON tblTaskTracker.TaskStatusID = tblTaskStatus.TaskStatusID 
WHERE  (tblTaskStatus.TaskStatusType = 'A') 

Wenn ich

ORDER BY tblTaskTracker.TaskPriorityID 

am Ende hinzufügen, kann ich auf Ausführen und ich erhalte die erwarteten Ergebnisse zurück. Wenn ich den Abfrage-Generator schließe und versuche, das Formular zu laden, kann die mehrteilige ID "tblTaskTracker.TaskPriorityID" jedoch nicht gebunden werden. Ich klicke OK für diese Nachricht und das Teilformular wird nicht geladen.

Antwort

0

Ich würde empfehlen, sich mit dem Schreiben eigener Abfragen anstelle des Abfrage-Generators vertraut zu machen. Dann können Sie Aliase verwenden, und Ihre Abfragen werden wesentlich einfacher zu verwalten sein.

SELECT tt.EmployeeID 
    , tt.ProjectID 
    , tt.ReleaseID 
    , tt.TaskStatusID 
    , tt.TaskPriorityID 
    , tt.DueDate 
    , tt.Notes 
    , tt.CompDate 
    , tt.QCByID 
    , tt.QCDate 
    , p.ProjectName 
    , tc.TaskCodeAbbr 
FROM tblTaskTracker tt 
INNER JOIN tblProject p ON tt.ProjectID = p.ProjectID 
INNER JOIN tblTaskCode tc ON tt.TaskCodeID = tc.TaskCodeID 
INNER JOIN tblTaskStatus ts ON tt.TaskStatusID = ts.TaskStatusID 
WHERE ts.TaskStatusType = 'A' 
ORDER BY tt.TaskPriorityID 

Für die Frage auf der Hand, betrachten Sie Ihre Tabellen und stellen Sie sicher, dass die Spalte in der Reihenfolge richtig geschrieben ist und dass es in der Tabelle existiert.

+0

Ich weiß, dass sein kein Tippfehler ist und dass es in der Tabelle existiert. Dies ist einer der Gründe, warum ich den Abfrage-Generator verwendet habe. In der Zeile für die TaskPriorityID habe ich einfach auf den Sortiertyp als Aufsteigend geklickt und die Sortierreihenfolge auf 1 gesetzt. Die resultierende 'ORDER BY tblTaskTracker.TaskPriorityID' wurde als Ergebnis erzeugt. Ich war mit einem feinen gezackten Kamm drüber und habe sogar sehr scharf auf den Monitor geschielt. Keine Tippfehler. –

+0

Nun, es sei denn, Sie können einige Tabellendefinitionen veröffentlichen. Das Beste, was wir tun können, ist raten. Hier ist ein großartiger Ort, um anzufangen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

0
CREATE TABLE tblTaskTracker(
    TaskID   INT NOT NULL PRIMARY KEY IDENTITY(1,1) 
    ,EmployeeID  INT NOT NULL 
    ,ProjectID  INT NOT NULL 
    ,ReleaseID  INT NOT NULL 
    ,TaskCodeID  INT NOT NULL 
    ,TaskStatusID INT NOT NULL 
    ,TaskPriorityID INT NOT NULL 
    ,DueDate  DATETIME NOT NULL 
    ,Notes   NVARCHAR() 
    ,CompDate  DATETIME 
    ,QCByID   INT 
    ,QCDate   DATETIME 
); 
INSERT INTO tblTaskTracker(TaskID,EmployeeID,ProjectID,ReleaseID,TaskCodeID,TaskStatusID,TaskPriorityID,DueDate,Notes,CompDate,QCByID,QCDate) VALUES 
(1,206,14331,1,1,1,3,'2016-05-04 00:00:00.000',NULL,NULL,NULL,NULL) 
,(2,206,14331,1,2,2,3,'2016-05-04 00:00:00.000',NULL,NULL,NULL,NULL); 

Was macht mich an meinen Kopf kratzen, was los ist, ob ich den Original-SQL mit der ORDER BY-Klausel in SSMS oder in Access ausführen, die Ergebnisse kommen zurück mit den erwarteten Daten. Nur beim Laden der Formulare tritt der Fehler auf. Für das, was es wert ist, hat das Hauptformular kein OnLoad-Ereignis. Beide Unterformulare verfügen über die folgende VBA zum Festlegen der Spaltenbreite des Unterformulars Datenblatt.

Private Sub Form_Load() 
    Me.txtProjectID.ColumnWidth = 1440 * 0.75 
    Me.txtProjectName.ColumnWidth = 1440 * 2 
    Me.txtReleaseNum.ColumnWidth = 1440 * 0.75 
    Me.txtTaskCode.ColumnWidth = 1440 * 0.75 
    Me.cboStatus.ColumnWidth = 1440 * 1 
    Me.cboPriority.ColumnWidth = 1440 * 1 
    Me.txtDueDate.ColumnWidth = 1440 * 1 
    Me.txtNotes.ColumnWidth = 1440 * 2 
    Me.txtCompDate.ColumnWidth = 1440 * 1 
    Me.cboQCEmp.ColumnWidth = 1440 * 1.5 
    Me.txtQCDate.ColumnWidth = 1440 * 1 
End Sub 
Verwandte Themen