2015-03-17 2 views
0

Я подозреваю, что это простая проблема синтаксиса, но я застрял.MS Access Заполнение формы из сквозного запроса

У меня есть эта функция:

Function CreateSPT(SPTQueryName As String, SQLString As String, _ 
       ConnectString As String) 

Dim mydatabase As Database, myquerydef As QueryDef, MyRS As Recordset 

Set mydatabase = DBEngine.Workspaces(0).Databases(0) 
Set myquerydef = mydatabase.CreateQueryDef(SPTQueryName) 

myquerydef.Connect = ConnectString 
myquerydef.SQL = SQLString 
myquerydef.ReturnsRecords = False 

myquerydef.ReturnsRecords = True 
Set MyRS = myquerydef.OpenRecordset() 
'MyRS.MoveFirst 
DoCmd.OpenQuery SPTQueryName, acViewNormal, acReadOnly 
myquerydef.Close End Function 

При нажатии кнопки на моей форме это называется.

Private Sub Btn_Search_Click() 
If Not IsNull(DLookup("[AccessionNumber]", "[SA2001]", "[AccessionNumber] = '" & [Forms]![SA2001]![Txt_LabEpNo] & "'")) Then 
    'MsgBox "Found" 
    'Populates the form as required 
    'I've removed the code as it's messy 

Else 
    'MsgBox "Not Found" 
    Me.Refresh 

    Dim SPTQueryName As String 
    Dim SQLString As String 
    Dim ConnectString As String 

    DoCmd.Close acQuery, "XQuery" 
    DoCmd.DeleteObject acQuery, "XQuery" 
    SPTQueryName = "XQuery" 
    SQLString = "SELECT SQLUser.EP_VisitNumber.EPVIS_DebtorNumber_DR as HospitalNumber, SQLUser.EP_VisitNumber.EPVIS_GivenName as Forename, SQLUser.EP_VisitNumber.EPVIS_Surname as Surname, SQLUser.EP_VisitNumber.EPVIS_DateOfBirth as DOB, SQLUser.EP_VisitNumber.EPVIS_DoctorCode_DR->CTDR_Surname as CONS, SQLUser.EP_VisitNumber.EPVIS_VisitNumber as AccessionNumber, SQLUser.EP_VisitNumber.EPVIS_DateOfCollection as SampleReceivedDate, SQLUser.EP_VisitTestSet.VISTS_TestSet_DR->CTTS_Department_DR->CTDEP_NAME as LabDept FROM SQLUser.EP_VisitTestSet, SQLUser.EP_VisitNumber WHERE (SQLUser.EP_VisitTestSet.VISTS_ParRef=SQLUser.EP_VisitNumber.EPVIS_VisitNumber ) AND (SQLUser.EP_VisitTestSet.VISTS_ParRef = '1500000000')" 
    ConnectString = "ODBC;DSN=DSNNAME;SERVER=IPADDRESS;PORT=1972;DATABASE=DATABASENAME;AUTHENTICATION METHOD=0;UID=USERNAME;PWD=PASSWORD;STATIC CURSORS=0;QUERY TIMEOUT=0;UNICODE SQLTYPES=0" 
    Call CreateSPT(SPTQueryName, SQLString, ConnectString) 

    'Me.[Hospital Number] = rec("HospitalNumber") 
    Me.Refresh 
    Me.[Hospital Number] = Null 
    Me.[Hospital Number] = MyRS("HospitalNumber") 

End If End Sub 

Моя проблема: я не могу заполнить форму результатами сквозного запроса.

По существу, как объявить набор записей, чтобы я мог заполнить форму как «Я». [Номер больницы] = MyRS («HospitalNumber») не работает, поскольку функция «MyRS» не определена.

ответ

0

Как вы имеете в виду эти два заявления должны работать вместе:

myquerydef.ReturnsRecords = False 
Set MyRS = myquerydef.OpenRecordset() 

Вы должны быть запрос, который возвращает записи, а затем открыть набор записей из этого, а затем вытащить значение из набора записей.

Вы объявляете MyRs в другой функции. Вы должны иметь что-то вроде:

MyRs = somequery.OpenRecordset() 
Me![Hospital Number].Value = MyRs!HospitalNumber.Value 
+0

Хорошее место Густав, я на самом деле было «myquerydef.ReturnsRecords = False» и «myquerydef.ReturnsRecords = True», я удалил «False» один, но все тот же ошибка. – Paul

+0

Итак, я следил за вашим советом, как я его понимаю, но я получаю «Variable not defined» в «XQuery», который является запросом, созданным в Sub MyPs = XQuery.OpenRecordset() '' Me! [Номер больницы ] .Value = MyRs! HospitalNumber.Value ' – Paul

Смежные вопросы