2014-08-31 12 views
0

SQL Server의 getdate() 함수를 사용하는 MS Access의 연결된 테이블에 대한 쿼리가 있습니다. 기능MS Access에서 SQL Server의 연결된 테이블 전달 쿼리

가 어떻게 SQL 서버 T-SQL 구문의 사용을 허용 연결된 테이블을 만들려면 어떻게해야합니까에서

정의되지 않은 함수에 GetDate : 나는 쿼리를 실행하려고 할 때 그러나, 나는이 오류가? 나는 이것이 pass through query라고하지만, 어떻게 통과 쿼리로 연결 테이블에 연결을 사용하도록 설정 해야할지 모르겠 참조하십시오.

현재 액세스 2010을 사용하여 쿼리는이 :

Function LinkTable(LinkedTableAlias As String, Server As String, Database As String, SourceTableName As String, OverwriteIfExists As Boolean, Username As String, Password As String) 
    'This method will also update the link if the underlying table definition has been modified. 
    If (InStr(1, LinkedTableAlias, "MSys") > 0) Then 
     Log "Skipping " & LinkedTableAlias 
     Exit Function 
    End If 
    'The overwrite parameter will cause it to re-map/refresh the link for LinktedTable Alias, but only if it was already a linked table. 
    ' it will not overwrite an existing query or local table with the name specified in LinkedTableAlias. 

    'Links to a SQL Server table without the need to set up a DSN in the ODBC Console. 
    Dim tdfLinked As DAO.TableDef 

    ' Open a database to which a linked table can be appended. 
    Dim dbsCurrent As Database 
    Set dbsCurrent = CurrentDb() 

    'Check for and deal with the scenario ofthe table alias already existing 
    If TableNameInUse(LinkedTableAlias) Then 
     'If InStr(dbsCurrent.TableDefs(LinkedTableAlias).Connect, "AccessBackup") Then 
     ' Exit Function 
     'End If 

     If (Not OverwriteIfExists) Then 
      Log "Can't use name '" + LinkedTableAlias + "' because it would overwrite existing table." 
      Exit Function 
     End If 
     'delete existing table, but only if it is a linked table 
     'If IsLinkedTable(LinkedTableAlias) Then 
      dbsCurrent.TableDefs.Delete LinkedTableAlias 
      dbsCurrent.TableDefs.Refresh 
     'Else 
     ' Log "Can't use name '" + LinkedTableAlias + "' because it would overwrite an existing query or local table." 
     ' Exit Function 
     'End If 
    End If 

    'Create a linked table 
    Set tdfLinked = dbsCurrent.CreateTableDef(LinkedTableAlias) 
    tdfLinked.SourceTableName = SourceTableName 

    tdfLinked.Connect = "ODBC;DRIVER={SQL Server};SERVER=" & Server & ";DATABASE=" & Database & ";UID=" & Username & ";PWD=" & Password & ";" 

    On Error Resume Next 
    dbsCurrent.TableDefs.Append tdfLinked 
    If (err.Number = 3626) Then 'too many indexes on source table for Access 
      err.Clear 
      On Error GoTo 0 

      If LinkTable(LinkedTableAlias, Server, Database, "vw" & SourceTableName, OverwriteIfExists, Username, Password) Then 
       Log "Can't link directly to table '" + SourceTableName + "' because it contains too many indexes for Access to handle. Linked to view '" & "vw" & SourceTableName & "' instead." 
       LinkTable = True 
      Else 
       Log "Can't link table '" + SourceTableName + "' because it contains too many indexes for Access to handle. Create a view named '" & "vw" & SourceTableName & "' that selects all rows/columns from '" & SourceTableName & "' and try again to circumvent this." 
       LinkTable = False 
      End If 
      Exit Function 
    End If 
    On Error GoTo 0 

    '** Turn on error handling 
    On Error GoTo ErrorHandler: 
    tdfLinked.RefreshLink 


    LinkTable = True 

    Exit Function 
ErrorHandler: 
    Log "refreshlink failed for " & tdfLinked.Name 
    LinkTable = True 

답변

1

나는 확실히이 문장 이해하지 못하는 일을 제공 Date()을 사용할 수 있습니다 :

는 어떻게 연결된 테이블을 만들 수의 사용을 허용 SQL Server T-SQL 구문?

그러나 이것은 당신이 쿼리를 통해 패스에 기존의 MS 액세스 querydef을 변환하는 방법입니다

이동 한 다음, SQL Specific 다음 Pass Through

참조를 Query 메뉴 명령을, 쿼리에서 디자인 모드로 눌러 화면 캡처 용입니다. 그것은 다른 Access 쿼리 인 것처럼

Set qdf = CurrentDb.CreateQueryDef("testqry") 
' this is just your connection string 
qdf.Connect = "ODBC;Driver={SQL Server};Server=MSSQL1; Database=MyDB;Trusted_Connection=Yes" 
'anything here gets passed directly to and executed on the SQL Server 
qdf.SQL = "select getdate()" 
Set qdf = Nothing 

지금 당신이 선택하는 것과까지 ("testqry"를 사용할 수 있습니다 :

http://www.mssqltips.com/sqlservertip/1482/microsoft-access-pass-through-queries-to-sql-server/

1

이유 이유를 :

select getdate() 

도움이된다면

, 나는 SQL Server에 테이블에 링크를 생성하는 다음 VBA 코드를 사용 오류가 발생하는 것은 GETDATE()이 아니며 MSAccess 내부의입니다. 당신은 아마 날짜와 시간을 얻을 Now()이 필요하거나

+0

'getdate()'는 ms-sql 서버 인 data-source의 함수입니다. 연결된 테이블이있을 때 액세스가 자동으로 t-sql로 변환됩니까? – SumGuy

+0

@SumGuy : getdate()는 MSAccess가 아닌 MSSQL의 함수이며 그 때문에 오류가 발생합니다. –

+0

나는 그것을 이해하지만, 내 질문이 아니에요, 어떻게 그것을 링크 된 데이터 소스를 사용하고 원본 데이터베이스에서 쿼리를 통해 통과합니까? 원래의 질문을 업데이트했습니다. 지금까지 도와 주셔서 감사합니다 – SumGuy

0

여기에 통과 쿼리를 만들 수있는 신속하고 더러운 VBA의 방법 그것은) 어쨌든 간다에서

0

간단한로 T-SQL 쿼리를 저장할 통과하지만

Select GetDate() 
연결 문자열을 ADO를 사용하고, 하드 코딩

TheSqlDate = currentdb.QueryDefs("qPass").OpenRecordset()(0) 

, 그리고 여기에 게시 다른 코드의 거대한 구타는 청구 시간을 늘리고 세계 poveity을 만들 수있는 단지 방법 :

그런 다음 VBA 코드에서, 당신은 갈 수 있습니다. 내 게시 된 솔루션은 유일한 한 줄의 코드입니다!