2015-03-17 1 views
0

Je suppose qu'il s'agit d'un problème de syntaxe simple, mais je suis bloqué.MS Access Remplir un formulaire à partir d'une requête directe

J'ai cette fonction:

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 

Lorsqu'un bouton est pressé sur mon formulaire ce que l'on appelle.

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 

Mon problème est que je ne peux pas remplir le formulaire avec les résultats de la requête directe. Essentiellement, comment puis-je déclarer le jeu d'enregistrements afin que je puisse remplir le formulaire comme Moi. [Hospital Number] = MyRS ("HospitalNumber") ne fonctionne pas car "MyRS" est fonction non définie.

Répondre

0

Comment avez-vous dans l'esprit ces deux déclarations doivent travailler ensemble:

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

Vous devez avoir une requête qui renvoie des enregistrements, puis ouvrez un jeu d'enregistrements de cela, puis tirez une valeur du jeu d'enregistrements.

Vous déclarez MyRs dans une autre fonction. Vous devez avoir quelque chose comme:

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

bon endroit Gustav, j'ai eu « myquerydef.ReturnsRecords = False » et « myquerydef.ReturnsRecords = True », je l'ai enlevé le « Faux » un, mais toujours le même Erreur. – Paul

+0

J'ai donc suivi votre conseil tel que je le comprends mais j'ai "Variable non définie" sur "XQuery", qui est la requête créée dans le sous 'MyRs = XQuery.OpenRecordset()' 'Me! ] .Value = MyRs! HospitalNumber.Value ' – Paul