【问题标题】:ODBC connection string to Snowflake for Access Pass Thru Query用于访问直通查询的雪花的 ODBC 连接字符串
【发布时间】:2020-08-15 08:56:09
【问题描述】:

我正在尝试创建一个连接字符串以从 Access 2010 及更高版本获取雪花数据。我可以创建数据库 DSN 并链接到我使用的表,但我需要为分布式应用程序构建无 DSN 连接字符串。这是我到目前为止所拥有的,它失败并显示消息“ODBC 连接到 xxxx 失败”。这是我到目前为止所拥有的:

ODBC;Driver={SnowflakeDSIIDriver};服务器=https://server名称; Role=角色名称;Warehouse=仓库名称;Database=db 名称;Schema=schema 名称;UID=snowflake ID; PWD=雪花密码;

【问题讨论】:

  • 服务器——我认为您可能需要删除“https://”部分。您还可以在创建连接字符串之前先使用常规 DSN 进行测试,以确保所有条目都正常工作。
  • 感谢您的回复,就像我说的,我可以连接 DSN - 在外部数据访问中定义 - ODBC 数据库,我可以附加到和查询雪花表。我不想分发需要用户维护 DSN 密码等的应用程序。我尝试过在服务器名称中不使用 https://,同样的错误。它正在尝试连接,它搅动了 30 秒左右。我感觉这可能是参数中指定雪花身份验证的方式。
  • 明白。很难说问题是什么;如果 DSN 正在工作,那么通过连接字符串进行的相同设置的行为应该类似。此连接字符串应该与默认的 Snowflake 身份验证器一起使用(对我来说看起来很正确),除非 Access 不支持此功能。您可能会使用另一个身份验证器或另一个应用程序进行测试。大多数驱动程序管理器都具有跟踪功能,您也可以启用(或者您也可以尝试查看从 ODBC 驱动程序生成的日志以获取线索)。 community.snowflake.com/s/article/…
  • BrianHtx/Martijn Pieters - 您有没有找到解决方案?我目前正在努力连接到雪花,现在主要问题似乎是 Passthrough ODBC 连接字符串长度限制为 255 个字符。我需要更多空间,但不知道如何“获得”它。
  • @JimT 你是使用 ADO 进行连接还是使用什么对象库?

标签: ms-access odbc snowflake-cloud-data-platform


【解决方案1】:

我认为你在正确的轨道上。我有同样的东西,它有效。

ODBC;
driver={SnowflakeDSIIDriver};
server=accountname.snowflakecomputing.com;database=dbname;
schema=public;
warehouse=whname;
role=rlname;
Uid=userid;
Pwd=password;

很奇怪,DSN 可以正常工作而你的不行。

【讨论】:

    【解决方案2】:

    我可以确认无 DNS 连接在 Access 2013 中工作正常。我尚未在 Access 2010 上进行测试,但如果需要测试,我可以使用它。

    我遇到的第一个问题是 Snowflake ODBC 驱动程序在控制面板的 ODBC 部分报告32/64-bit但它可能没有安装一个或另一个 .

    就我而言,它在 DSN 源中显示为 32/64-bit,但我只安装了 64 位版本。请注意,安装 32 位驱动程序后,程序和功能(卸载应用程序的正常位置)显示 64 位和 32 位驱动程序。

    安装 32 位驱动程序后,只需正确设置连接字符串即可。您想从 Snowflake Web UI 上的 URL 复制它。去掉https:// 部分,然后保留所有内容,包括网址中的snowflakecomputing.com。这就是您将用于server 的内容。

    编辑 2:我错过了引用传递查询的问题部分,并描述了我最近测试的使用 VBA 进行无 DNS 连接的过程。我测试了直通连接,它工作正常。唯一的区别在于您需要保留“ODBC”的 ODBC 连接字符串;前缀:

    ODBC;Driver{SnowflakeDSIIDriver};server=<your_URL_everything_before_snowflakecomputing.com>.snowflakecomputing.com;uid=greg;pwd=xxxxxx
    

    编辑:我忘记并正在添加的一件事...内置的 Access 数据引擎无法让我使用无 DNS 的连接进行连接。该代码显示它正在使用 ActiveX 数据对象 (ADO)。您需要在您的 VBA 项目中添加对它的引用:

    ' For the account, use everything after https:// up to and including 
    ' snowflakecomputing.com in your URL when connecting to Snowflake using the web UI. 
     
    Const SNOWFLAKE_ACCOUNT = "<your_account>.<your_region>.snowflakecomputing.com"
    Const SNOWFLAKE_USER = "greg"
    Const SNOWFLAKE_PASSWORD = "xxxxx"
    
    Public Sub Main()
        Dim odbc As String
        Dim sfCon As ADODB.Connection
        Set sfCon = OpenDatabaseConnection(GetConnectionString())
        If Not sfCon Is Nothing Then
            'Use the connection here...
            sfCon.Close
        End If
    End Sub
    
    Private Function GetConnectionString()
    
        GetConnectionString = "Driver={SnowflakeDSIIDriver}" + _
                              ";server=" + SNOWFLAKE_ACCOUNT + _
                              ";uid=" + SNOWFLAKE_USER + _
                              ";pwd=" + SNOWFLAKE_PASSWORD + _
                              ";network_timeout=60" + _
                              "login_timeout=60"
    
    End Function
    
    
    Public Function OpenDatabaseConnection(ConnString As String) As ADODB.Connection
        On Error GoTo Handler
        Dim database As ADODB.Connection
        Set database = New ADODB.Connection
        
        With database
            .ConnectionString = ConnString
            .ConnectionTimeout = 60
            .Open
        End With
         
        Set OpenDatabaseConnection = database
         
        Exit Function
    Handler:
        MsgBox "Error: " + Err.Description
    End Function
    

    【讨论】:

    • Greg Pavlik - 感谢您抽出宝贵时间在此处提供详细答案。不幸的是,这并不是我想要的,但我希望您可能已经使用您的 Snowflake 实例创建了直通查询。正如 OP 最初询问的那样,以及我正在寻找的内容:传递查询的 ODBC 连接字符串属性的正确格式是什么。你能帮忙解决这个问题吗?
    • 嗨吉姆T。我错过了“直通”部分,正在考虑 VBA。我测试了一个 ODBC DSN,它在 Access 2013 中对我有用。请查看答案的更新更新。基本上它与 VBA 的 DNS 相同,但保留了 ODBC;前缀。
    • 再次感谢 Greg - 我想知道我是否没有正确配置某些东西。所以我们公司使用的是 64 位的 office,我有 64 位的 Snowflake ODBC Driver (2.22.04)。我可以通过浏览器连接到 Snowflake 数据库,但是使用您提供的 ODBC 连接字符串似乎甚至没有“尝试”在 MS Access 中连接,而是立即返回“ODBC--调用失败。找不到数据源名称并且没有指定默认驱动程序。”这里有什么想法吗?
    • 我没有在 Office 64 位中测试过。我将使用一个干净的 VM 并安装 Office 64 位来测试它。你用的是什么版本的office?
    • 感谢 Greg - 该公司正在使用 Microsoft 365 企业版。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    相关资源
    最近更新 更多