程序执行时省略odbc对话框

问题描述 投票:0回答:1

以下是我用来访问 MS Access 数据库的代码 ODBC。我想要实现的是 ODBC 对话框没有出现。 我怀疑这与连接字符串有关。 请帮忙。

//#include "pch.h"
//#include "Db.h"

// pch.h: This is a precompiled header file.

#ifndef PCH_H
#define PCH_H

// add headers that you want to pre-compile here
#include "framework.h"

#endif //PCH_H

#pragma once
#include <atlstr.h>
#include <afxdb.h>

class CDb : public CDatabase
    {
    protected:
      int m_iPrice;
      const CString m_strSQL = L"SELECT Pay FROM tblOptions;";
      CString strDsn;
    public:
      void setPrice();
      int getPrice();
      CDb();
      virtual ~CDb();
  };



void CDb::setPrice()
    {
    CString strDriver(L"Microsoft Access Driver (*.mdb, *.accdb)");
    CString strFile(L"C:\\ExamplePath\\C++Projects\\lc\\lc.accdb");
    //
    strDsn.Format(L"ODBC;DRIVER={%s};DBQ=%s", strDriver, strFile);
    Open(NULL, false, false, strDsn);
    CRecordset rs;
    // At this point the ODBC dialog opens
    rs.Open(CRecordset::dynaset, m_strSQL);
    CString strField;
    rs.GetFieldValue(short(0), strField);
    m_iPrice = _tstoi(strField);
    rs.Close();
    Close();
    }


int CDb::getPrice()
    {
    return m_iPrice;
    }


CDb::CDb()
    {
    setPrice();
    }

CDb::~CDb()
    {
    m_iPrice = 0;

    if(IsOpen())
        Close();
    }

// 以下是代码示例,即在FormView中实现显示代码 // 来自 MS Access 数据库

enter code here
Cmain1View::Cmain1View() noexcept : CFormView(IDD_MAIN1_FORM) , m_strText(_T("")) { CDb* pDb = new CDb(); CString m_str文本; m_strText.Format(L"%d", pDb->getPrice()); 删除 pDb; pDb = NULL; }

visual-c++ mfc odbc
1个回答
0
投票

尝试调用

OpenEx()
成员,它需要一个选项参数,你必须添加
CDatabase::noOdbcDialog
选项。

连接字符串必须包含足够的信息,以便不需要凭据对话框。将以下部分添加到您的连接字符串

;Uid=%s;Pwd=%s
。用户名和密码必须从一些配置文件或注册表项中读取(这里有安全方面的考虑,但这不在本题范围内)。

或者,如果您可以覆盖建立连接的数据库类的成员(您将不得不深入研究 MFC 源代码),您可以更改代码,以便它调用包含

SQLDriverConnect()
选项的
SQL_DRIVER_NOPROMPT
函数.

© www.soinside.com 2019 - 2024. All rights reserved.