Я пишу небольшое приложение C (.c file), которое подключается к клиенту OPC-сервера, а затем выводит данные в базу данных MS Access.
Мне нужно, чтобы запрос работал при использовании переменной,Мой запрос:
"INSERT INTO Data ( [Date / Time], [Hot Strip Mill rate], [Hot Strip Mill Comm Okay], [Hot Strip Mill Total] ) SELECT #variable1# AS Expr1, variable2 AS Expr2, 1 AS Expr3, variable2 AS Expr4;";
Переменная 1 будет значением даты и времени, а переменные 2/3 будут числами.Я планирую присвоить значения, полученные от клиента OPC, переменным 1,2,3.Я хочу / нужно, чтобы мой запрос распознавал значения, которые представляют переменные.Таким образом, действие должно идти следующим образом: код видит
"INSERT INTO Data ( [Date / Time], [Hot Strip Mill rate], [Hot Strip Mill Comm Okay], [Hot Strip Mill Total] ) SELECT #variable1# AS Expr1, variable2 AS Expr2, 1 AS Expr3, variable2 AS Expr4;";
Доступ видит
"INSERT INTO Data ( [Date / Time], [Hot Strip Mill rate], [Hot Strip Mill Comm Okay], [Hot Strip Mill Total] ) SELECT #07/01/2011 04:02:01# AS Expr1, 1 AS Expr2, 14.54 AS Expr3, 64546.14 AS Expr4;";
Любая помощь будет оценена.Спасибо
#include <windows.h>
#include <stdio.h>
#include <sqlext.h>
#include <sstream>
/* Data Access Method used in this sample */
const char* DAM = "Direct ODBC";
/* Connection string for Direct ODBC */
char szDSN[256] = "Dsn=Gas_meter_check";
main()
{
HENV hEnv;
HDBC hDbc;
/* ODBC API return status */
RETCODE rc;
char date[256]= "2/1/1900 23:35:45";
double var2=46;
double var3=168736;
int iConnStrLength2Ptr;
char szConnStrOut[256];
int i= 0;
unsigned char* InsertQuery = "INSERT INTO Data ( [Date / Time], [Hot Strip Mill rate], [Hot Strip Mill Comm Okay], [Hot Strip Mill Total] ) SELECT #***date***# AS Expr1, ***var2*** AS Expr2, ***var3*** AS Expr3, 345464 AS Expr4;";
SQLCHAR chval1[128], chval2[128], colName[128];
int ret1;
int ret2;
/* Number of rows and columns in result set */
SQLINTEGER rowCount = 0;
SQLSMALLINT fieldCount = 0, currentField = 0;
HSTMT hStmt;
/* Allocate an environment handle */
rc = SQLAllocEnv(&hEnv);
/* Allocate a connection handle */
rc = SQLAllocConnect(hEnv, &hDbc);
/* Connect to the TakeCharge database */
rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN,
SQL_NTS, (unsigned char*)szConnStrOut,
255, (SQLSMALLINT*)&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 */
printf("%s: SQL InsertQuery:\n %s\n", DAM, InsertQuery);
rc = SQLAllocStmt(hDbc,&hStmt);
rc = SQLPrepare(hStmt, InsertQuery, SQL_NTS);
/* Excecute the query and create a record set */
rc = SQLExecute(hStmt);
if (SQL_SUCCEEDED(rc))
{
printf("Executing query...");
printf("\n");
}
while (SQL_SUCCEEDED(rc))
{
printf(" insert passed\n");
rc = SQLFetch(hStmt);
rowCount++;
};
}
else
{
printf("%s: Couldn't connect to %s.\n", DAM, szDSN);
}
/* Disconnect*/
SQLDisconnect(hDbc);
printf("%s: Cleanup. Done.\n", DAM);
}