访问ODBC查询

时间:2018-04-23 15:24:43

标签: vba ms-access access-vba

我尝试创建一个宏来运行将从SQL Server数据库中检索数据的查询。问题是在运行宏之后,它需要插入用户名和密码才能访问数据库。

只是想知道是否有任何方法可以通过VBA绕过凭证(可能创建某种连接并传递连接字符串)。我知道我可以使用“查询设计”构建器创建传递查询,但在调用查询时,是否有任何方法可以将凭据作为VBA中的单独参数传递。

import React from 'react'

export default class CanvasComponent extends React.Component {
    constructor(props) {
        this.calcRatio = this.calcRatio.bind(this);
    } 

    // Use componentDidMount to draw on the canvas
    componentDidMount() {  
        this.updateChart();
    }

    calcRatio() {
        let ctx = document.createElement("canvas").getContext("2d"),
        dpr = window.devicePixelRatio || 1,
        bsr = ctx.webkitBackingStorePixelRatio ||
          ctx.mozBackingStorePixelRatio ||
          ctx.msBackingStorePixelRatio ||
          ctx.oBackingStorePixelRatio ||
          ctx.backingStorePixelRatio || 1;
        return dpr / bsr;
    }

    // Draw on the canvas
    updateChart() {

        // Adjust resolution
        const ratio = this.calcRatio();
        this.canvas.width = this.props.width * ratio;
        this.canvas.height = this.props.height * ratio;
        this.canvas.style.width = this.props.width + "px";
        this.canvas.style.height = this.props.height + "px";
        this.canvas.getContext("2d").setTransform(ratio, 0, 0, ratio, 0, 0);
        const ctx = this.canvas.getContext('2d');

       // now use ctx to draw on the canvas
    }


    render() {
        return (
            <canvas ref={el=>this.canvas=el} width={this.props.width} height {this.props.height}/>
        )
    }
}

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果使用ADO连接,则可以使用ODBC连接字符串连接到SQL Server数据库:

    Dim conn As New ADODB.Connection
    conn.Open "Driver={SQL Server};Server=[My Server];Database=[My Database];User Id=[My Username];Password=[My Password];"

    Dim cmd As New ADODB.Command
    cmd.ActiveConnection = conn
    cmd.CommandText = "SELECT * FROM [My Table]"
    cmd.Execute

    Dim rst As New ADODB.Recordset
    rst.Open cmd

这会将“SELECT * from [My Table]”查询的结果加载到名为rst的记录集中。如果您可以通过AD凭据访问SQL Server数据库,则可以使用可信连接:

conn.Open "Driver={SQL Server};Server=[My Server];Database=[My Database];Trusted_Connection=True"

答案 1 :(得分:1)

是。我通过销毁和创建传递查询来完成此操作。这里有一些用于Oracle的代码,但它适用于SQL Server。只需确保您拥有匹配的DSN:

Dim db As Database, q As QueryDef, sqlString as string

Set db = CurrentDb()

DoCmd.DeleteObject acQuery, "sqlServerQuery"
Set q = db.CreateQueryDef"sqlServerQuery"


q.Connect = "ODBC;DSN=myDSN;UID=myUser;PWD=myPassword"

queryString = "SELECT something FROM mySQLServertable"

q.SQL = queryString
q.ReturnsRecords = True