0
我正在使用Visual Studo 2010,Win7,C++和Microsoft Access 2010 al 32位。我正在使用Direct ODBC进行连接。第一个SELECT语句执行。 INSERT,SELECT,SELECT和UPDATE未执行。我不认为这是SQL语句的语法。任何帮助表示赞赏。谢谢。SQL语句不执行
#include <windows.h>
#include <stdio.h>
#include <sqlext.h>
const char* DAM = "Direct ODBC";
SQLCHAR szDSN[256] =
"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\FILEBLOCK\\Fileblocker.accdb;";
main()
{
HENV hEnv;
HDBC hDbc;
SQLRETURN rc, TOTAL, QUOTA;
SQLSMALLINT iConnStrLength2Ptr;
SQLCHAR szConnStrOut[255];
SQLCHAR* query = (SQLCHAR*)"SELECT tblIP.[IPAddress], tblIP.[IPType], tblIP.[IPStatus], tblIP.[IPMax] FROM tblIP WHERE tblIP.[IPAddress]='173.201.216.2' AND tblIP.[IPType]=3 AND tblIP.[IPStatus]=1 AND tblIP.[IPMax]=0;";
/* Number of rows and columns in result set */
SQLINTEGER rowCount = 0;
SQLSMALLINT fieldCount = 0, column = 0;
HSTMT hStmt;
/* Allocate an environment handle */
rc = SQLAllocEnv(&hEnv);
/* Allocate a connection handle */
rc = SQLAllocConnect(hEnv, &hDbc);
/* Connect to the 'Fileblocker.accdb' database */
rc = SQLDriverConnect(hDbc, NULL, szDSN, _countof(szDSN),
szConnStrOut, 255, &iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
if (SQL_SUCCEEDED(rc))
{
printf("%s: Successfully connected to database. Data source name: \n %s\n",
DAM, szConnStrOut);
/* Prepare SQL query */
rc = SQLAllocStmt(hDbc,&hStmt);
rc = SQLPrepare(hStmt, query, SQL_NTS);
/* Execute the query and create a record set */
rc = SQLExecute(hStmt);
/* Loop through the rows in the result set */
rc = SQLFetch(hStmt);
while (SQL_SUCCEEDED(rc))
{
rc = SQLFetch(hStmt);
rowCount++;
};
printf("%s: Total Row Count: %d\n", DAM, rowCount);
rc = SQLFreeStmt(hStmt, SQL_DROP);
if (rowCount >= 1)
{
printf("PASS\n");
SQLExecute ("INSERT INTO tblDownloads (tblDownloads.[DownloadIP] , tblDownloads.[DownloadCount]) VALUES('173.201.216.2', 1);");
TOTAL = SQLFetch ("SELECT tblDownloads.[DownloadCount] WHERE tblDownloads.[DownloadIP] = '173.201.216.2';");
QUOTA = SQLFetch ("SELECT tblIP.[IPQuota], WHERE tblIPID.[IPAddress] = '173.201.216.2';");
if (TOTAL >= QUOTA)
{
SQLExecute ("UPDATE tblIP SET tblIP.[IPMax] WHERE tblIP.[IPAddress] = '173.201.216.2');");
}
else if (rowCount == 0)
{
printf("FAIL\n");
rc = SQLFreeStmt(hStmt, SQL_DROP);
}
//system("pause");
//}
}
else
{
printf("%s: Couldn't connect to %s.\n", DAM, szDSN);
}
/* Disconnect and free up allocated handles */
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
}
}
谢谢克里斯。我尝试了所有这些,但仍然没有去。 INSERT语句仍然没有插入,等等。 –
@ ME-dia:我知道MS Access,但不是C++。也许在你的代码中有更多的问题(除了查询之外),但我找不到他们。我有一个想法,虽然:因为你使用Visual Studio,你有解决方案与“复制到输出文件夹”链接的数据库?如果是,您是否正在查找正确的数据库以查找插入的记录? –
INSERT正在工作。接下来是Total Query。这是我得到的。答案应该是三个。第一个返回100,第二个-1和第三个100. // SQLCHAR * query3 =(SQLCHAR *)“SELECT COUNT(*)FROM tblDownloads WHERE tblDownloads。[DownloadIP] ='173.201.216.2'AND tblDownloads。[DownloadCount ] = 1;“; \t // SQLCHAR * query3 =(SQLCHAR *)“SELECT COUNT(*)tblDownloads。[DownloadCount] WHERE tblDownloads。[DownloadIP] ='173.201.216.2';”; \t // SQLCHAR * query3 =(SQLCHAR *)“SELECT tblDownloads。[DownloadCount] FROM tblDownloads WHERE tblDownloads。[DownloadIP] ='173.201.216.2';”; –