#include "tqsql.h"
TQConnect::TQConnect()
{ henv = hdbc = hstmt = NULL;
buf[0] = '\0';
buflen = 0;
rc = 0;
statement = NULL;
srcStr = "";
SQLAllocEnv(&henv);
rc = GetDataSources();
};
TQConnect::~TQConnect()
{ SQLFreeEnv(henv); };
int TQConnect::cConnections = 0;
/* Connect to the server described by szDSN eg
"DSN=tqweb;UID=admin;PWD=mypassword"
*/
SQLRETURN TQConnect::connect(const char * szDSN)
{
rc = SQLAllocConnect(henv, &hdbc);
if (rc == SQL_SUCCESS)
{ rc = SQLDriverConnect( hdbc, 0, (SQLCHAR *) szDSN,
SQL_NTS,
(SQLCHAR *) buf,
sizeof(buf),
&buflen,
SQL_DRIVER_COMPLETE
);
cConnections++;
return rc;
}
else
return rc;
};
SQLRETURN TQConnect::disconnect(void)
{ SQLRETURN s;
s = SQLDisconnect(hdbc);
if (s == SQL_SUCCESS)
{ s = SQLFreeConnect(hdbc);
if (s == SQL_SUCCESS)
{ cConnections--;
statement = NULL;
}
}
return s;
};
SQLINTEGER TQConnect::getBuflen(void)
{ return buflen; };
SQLINTEGER TQConnect::connectCount(void)
{ return cConnections; };
/* Execute the SQL statement *s and return the result table in t */
SQLRETURN TQConnect::execSQL(const char * s, Table & t)
{ statement = new char[strlen(s) + 1];
RESULTATTR attribs;
tab1 = new Table;
rc = SQLAllocStmt(hdbc, &hstmt);
if (rc == SQL_SUCCESS)
{ strcpy(statement, s);
rc = SQLExecDirect(hstmt, (SQLCHAR *) statement, SQL_NTS);
if (rc != SQL_SUCCESS)
return rc;
rc = SQLNumResultCols(hstmt, &attribs.cColumns);
if (rc != SQL_SUCCESS)
return rc;
rc = SQLRowCount(hstmt, &attribs.cRows);
if (rc != SQL_SUCCESS)
return rc;
tab1->setAttribs(attribs.cRows, attribs.cColumns);
tab1->buildSchema(hstmt, attribs.cColumns);
rc = tab1->bindColumns(hstmt);
tab1->transferData(hstmt);
}
delete statement;
t = *tab1;
delete tab1;
return rc;
};
SQLRETURN TQConnect::GetDataSources(void)
{ SQLRETURN rc;
SQLCHAR dsn[100], dsnDesc[256];
SQLSMALLINT dsnRet, dsnDescRet;
rc = SQLDataSources(henv, //void *,
SQL_FETCH_FIRST, //short unsigned int
dsn, //SQLCHAR *,
100, //short int,
&dsnRet, //SQLSMALLINT *,
dsnDesc, //SQLCHAR *,
255, //short int,
&dsnDescRet //SQLSMALLINT *
);
if (rc != SQL_NO_DATA_FOUND)
{ srcStr.append((char *)dsn);
srcStr.append(":");
srcStr.append((char *)dsnDesc);
srcStr.append("\n");
}
else
return rc;
while (rc != SQL_NO_DATA_FOUND)
{ rc = SQLDataSources(henv,SQL_FETCH_NEXT,dsn,100,&dsnRet,dsnDesc,256,&dsnDescRet);
srcStr.append((char *) dsn);
srcStr.append(":");
srcStr.append((char *)dsnDesc);
srcStr.append("\n");
}
return rc;
}
string TQConnect::showDataSources(void)
{
return srcStr;
}