【问题标题】:Connect and Insert data into a MS Access table using C++使用 C++ 将数据连接并插入到 MS Access 表中
【发布时间】:2011-06-28 15:30:43
【问题描述】:

我正在处理一个需要我对 MS Access 表执行插入查询的项目。我一直在网上到处搜索,但似乎没有任何效果。任何帮助将不胜感激。另外,我必须为 VS2008 和 Visual C++ 6.0 编写这个。谢谢

【问题讨论】:

    标签: c++ visual-studio-2008 visual-c++ database-connection insert-into


    【解决方案1】:

    您有(太多)很多选择:ADO/RDO、DAO、ODBC 和 OLE DB,仅举几例。 DAO 已被正式弃用。 ADO/RDO 不是正式的,但 MS 似乎也不再关心它们了。然而,在 VC 6 中,过时已成为现实。我相信它们在 VS 2008 下至少在一定程度上仍然受到支持,但它们不再包括任何向导来帮助使用 DAO。

    这基本上让 OLE DB 和 ODBC 成为您的首选。 MS 仍在积极支持和开发它们,而其他的无论如何也不太可能提供任何主要优势。

    我应该补充一点,VC++ 6.0 提供了很多 VS2008 中缺少的用于编写使用数据库的应用程序的功能。您可能想查看我在 previous question 中展示的内容以获得一些指导。

    【讨论】:

    • 我正在寻找的,而不是您问题中显示的 gui 或弹出窗口,只是一个工作示例代码,我可以根据我的程序规范进行调整。整个程序是从 OPC 服务器、KEPware 读取数据,获取所需数据,然后将抓取的结果发送到 Access 表。从服务器读取数据的代码已经完成。我更喜欢用 C# 编写它,但是我没有钱购买在 VS2008 C# 中使用 OPC 的许可证。我意识到这有点啰嗦,但我觉得这更能说明我的意思。
    • @Dante:在这种情况下,您可能不需要向导,但数据库类可能会很有用,并且会使事情变得容易得多。 IMO,最简单的入门方法是使用普通向导生成一个数据库浏览应用程序,然后通读它生成的代码。
    【解决方案2】:

    使用ODBC。连接数据库并执行 INSERT 查询示例:

    #include <stdio.h>
    #include <tchar.h>
    #include <Windows.h>
    #include <sqlext.h>
    
    WCHAR szDSN[] = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\users.mdb";
    
    int _tmain(int argc, _TCHAR* argv[])
    {    
    
    HENV    hEnv;
    HDBC    hDbc;
    
    /* ODBC API return status */
    RETCODE rc;
    
    int     iConnStrLength2Ptr;
    WCHAR    szConnStrOut[256];
    
    WCHAR* query = L"INSERT INTO [Users] (name,surname) VALUES ('John','Smith');";
    
    HSTMT           hStmt;
    
    /* Allocate an environment handle */
    rc = SQLAllocEnv(&hEnv);
    /* Allocate a connection handle */
    rc = SQLAllocConnect(hEnv, &hDbc);
    
    /* Connect to the database */
    rc = SQLDriverConnect(hDbc, NULL, (WCHAR*)szDSN, 
        SQL_NTS, (WCHAR*)szConnStrOut, 
        255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
    if (SQL_SUCCEEDED(rc)) 
    {
    
        wprintf(L"Successfully connected to database. Data source name: \n  %s\n", 
            szConnStrOut);  
    
        /* Prepare SQL query */
        wprintf(L"SQL query:\n  %s\n", query);
    
        rc = SQLAllocStmt(hDbc,&hStmt);
        rc = SQLPrepare(hStmt, query, SQL_NTS);   
    
        /* Excecute the query */
        rc = SQLExecute(hStmt); 
        if (SQL_SUCCEEDED(rc)) 
        {
            wprintf(L"SQL Success\n");
        }
        else{
            wprintf(L"SQL Failed\n");
        }
    }
    else
    {
        wprintf(L"Couldn't connect to %s.\n",szDSN);
    }
    
    /* Disconnect and free up allocated handles */
    SQLDisconnect(hDbc);
    SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
    SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
    
    getchar();
    return 0;
    }
    

    来源:https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/cc811599(v=office.12)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2017-03-30
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      相关资源
      最近更新 更多