Funcionando realmente bien!
viewtopic.php?f=4&t=12217&p=75660#p75660
viewtopic.php?f=4&t=12217&p=75683#p75683
//***********************************************************
// SQL Server CE Interface Function //
// //
// Author : Chris C //
// PassportONE.com //
// http://www.PassportONE.com //
// Email: chris@PassportONE.com //
// © Aug 2002 //
// //
//***********************************************************
#include "SqlSvrCe.h"
// -------------------------------------------------------
//
// SQL SERVER CE INTERFACE FUNCTION
//
// -------------------------------------------------------
HRESULT CreateSqlSvrCeProvider (void)
{
// PURPOSE:
// - Initlialize the OLE DB Provider...
// PARAMETERS:
// - NIL
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
HRESULT hr = NOERROR;
// Create the SQL Server CE provider
hr = CoCreateInstance(CLSID_SQLSERVERCE_2_0,
0,
CLSCTX_INPROC_SERVER,
IID_IDBInitialize,
(void**)&pIDBInitialize);
return hr;
}
HRESULT CreateDBSession (void)
{
// PURPOSE:
// - Create a new SQL Server CE Database session of the connected database...
// PARAMETERS:
// - NULL
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
HRESULT hr = NOERROR;
// Query the IDBCreateSession interface
hr = pIDBInitialize->QueryInterface(IID_IDBCreateSession,
(void **)&pIDBCreateSession);
if(FAILED(hr))
goto CleanExit;
else
pIDBInitialize->AddRef();
// Create a new database session...
hr = pIDBCreateSession->CreateSession(NULL,
IID_IUnknown,
&pIUnknownSession);
if(FAILED(hr))
goto CleanExit;
// Query the IDBCreateCommand interface
hr = pIUnknownSession->QueryInterface(IID_IDBCreateCommand,
(void**)&pIDBCrtCmd);
if(FAILED(hr))
goto CleanExit;
else
pIUnknownSession->AddRef();
// Create a command object pointer
hr = pIDBCrtCmd->CreateCommand(NULL,
IID_ICommandText,
(IUnknown**)&pICmdText);
if(FAILED(hr))
goto CleanExit;
CleanExit:
return hr;
}
HRESULT ConnectDB (LPTSTR lpszDBName)
{
// PURPOSE:
// - Connect the given SQL Server CE Database
// PARAMETERS:
// - lpszDBName :: SQL Server CE Database filename in fullpath
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
HRESULT hr = NOERROR;
DBPROPSET dbpropset[1]; // Property Set used to initialize provider
DBPROP dbprop[1]; // property array used in property set to initialize provider
// Create the SQL Server CE provider
hr = CreateSqlSvrCeProvider();
// Validation
if(FAILED(hr))
goto CleanExit;
// Initialize...
VariantInit(&dbprop[0].vValue);
// Initialize a property with name of database
dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(lpszDBName);
// Validation
if(NULL == dbprop[0].vValue.bstrVal)
{
// Set return value
hr = E_OUTOFMEMORY;
goto CleanExit;
}
// Initialize the property set
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
dbpropset[0].rgProperties = dbprop;
dbpropset[0].cProperties = sizeof(dbprop)/sizeof(dbprop[0]);
// Query the IDBProperties interface
hr = pIDBInitialize->QueryInterface(IID_IDBProperties,
(void **)&pIDBProperties);
// Validation
if(FAILED(hr))
goto CleanExit;
else
pIDBInitialize->AddRef();
// Create the given database...
hr = pIDBProperties->SetProperties(sizeof(dbpropset)/sizeof(dbpropset[0]),
dbpropset);
// Validation
if(FAILED(hr))
goto CleanExit;
// Free the used memory
SysFreeString(dbprop[0].vValue.bstrVal);
// Initialize the SQL Server CE provider.
pIDBInitialize->Initialize();
// Create new database session...
hr = CreateDBSession();
CleanExit:
// Release the used memory
VariantClear(&dbprop[0].vValue);
// Only execute the following command when either one of the
// above command fail.
if (FAILED(hr))
// Disconnect the database/reset the OLE DB variable
DisconnectDB(lpszDBName);
return hr;
}
HRESULT DisconnectDB (LPTSTR lpszDBName)
{
// PURPOSE:
// - Disconnect from the given SQL Server CE Database
// PARAMETERS:
// - lpszDBName :: SQL Server CE Database filename in fullpath
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
if(NULL != pIDBCreateSession)
{
pIDBCreateSession->Release();
pIDBCreateSession = NULL;
}
if(NULL != pIUnknownSession)
{
pIUnknownSession->Release();
pIUnknownSession = NULL;
}
if(NULL != pIDBProperties)
{
pIDBProperties->Release();
pIDBProperties = NULL;
}
if(NULL != pIDBCrtCmd)
{
pIDBCrtCmd->Release();
pIDBCrtCmd = NULL;
}
if(NULL != pICmdText)
{
pICmdText->Release();
pICmdText = NULL;
}
// Release interfaces
if(NULL != pIDBInitialize)
{
pIDBInitialize->Release();
pIDBInitialize = NULL;
}
return S_OK;
}
HRESULT CreateDB (LPTSTR lpszDBName)
{
// PURPOSE:
// - Create a new SQL Server CE Database with the given name
// PARAMETERS:
// - lpszDBName :: SQL Server CE Database filename in fullpath
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
HRESULT hr = NOERROR;
DBPROPSET dbpropset[1]; // Property Set used to initialize provider
DBPROP dbprop[1]; // property array used in property set to initialize provider
IDBDataSourceAdmin *pIDBDataSourceAdmin = NULL;
// Create the SQL Server CE provider
hr = CreateSqlSvrCeProvider();
// Validation
if(FAILED(hr))
goto CleanExit;
// Initialize...
VariantInit(&dbprop[0].vValue);
// Initialize a property with name of database
dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(lpszDBName);
// Validation
if(NULL == dbprop[0].vValue.bstrVal)
{
// Set return value
hr = E_OUTOFMEMORY;
goto CleanExit;
}
// Initialize the property set
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
dbpropset[0].rgProperties = dbprop;
dbpropset[0].cProperties = sizeof(dbprop)/sizeof(dbprop[0]);
// Query the IDBDataSourceAdmin interface
hr = pIDBInitialize->QueryInterface(IID_IDBDataSourceAdmin,
(void **)&pIDBDataSourceAdmin);
// Validation
if(FAILED(hr))
goto CleanExit;
else
pIDBInitialize->AddRef();
// Create the given database...
hr = pIDBDataSourceAdmin->CreateDataSource(1,
dbpropset,
NULL,
IID_IDBProperties,
NULL);
// Validation
if(FAILED(hr))
// Clean the memory...
goto CleanExit;
// Free the used memory
SysFreeString(dbprop[0].vValue.bstrVal);
// Create new database session...
hr = CreateDBSession();
CleanExit:
// Release the used memory
VariantClear(&dbprop[0].vValue);
// Release the OLE DB interface
if(NULL != pIDBDataSourceAdmin)
{
pIDBDataSourceAdmin->Release();
pIDBDataSourceAdmin = NULL;
}
// Only execute the following command when either one of the
// above command fail.
if (FAILED(hr))
// Disconnect the database/reset the OLE DB variable
DisconnectDB(lpszDBName);
return hr;
}
HRESULT DeleteDB (LPTSTR lpszDBName)
{
// PURPOSE:
// - Delete an existing SQL Server CE Database with the given name
// PARAMETERS:
// - lpszDBName :: SQL Server CE Database filename in fullpath
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
if (DeleteFile(lpszDBName) > 0)
return S_OK;
else
return E_FAIL;
}
HRESULT CompactDB (LPTSTR lpszDBName)
{
// PURPOSE:
// - Compact an existing SQL Server CE Database with the given name
// PARAMETERS:
// - lpszDBName :: SQL Server CE Database filename in fullpath
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
HRESULT hr = NOERROR;
TCHAR szNewDBName[256];
// Property Set used to initialize provider
DBPROPSET compactdbpropset[1];
DBPROPSET dbpropset[1];
// Property array used in property set to initialize provider
DBPROP compactdbprop[1];
DBPROP dbprop[1];
ISSCECompact *pISSCECompact = NULL;
// Create the SQL Server CE provider
hr = CreateSqlSvrCeProvider();
// Validation
if(FAILED(hr))
goto CleanExit;
// Initialize...
VariantInit(&dbprop[0].vValue);
// Initialize a property with name of database
dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(lpszDBName);
// Validation
if(NULL == dbprop[0].vValue.bstrVal)
{
// Set return value
hr = E_OUTOFMEMORY;
goto CleanExit;
}
// Initialize the property set
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
dbpropset[0].rgProperties = dbprop;
dbpropset[0].cProperties = sizeof(dbprop)/sizeof(dbprop[0]);
// Query the IDBProperties interface
hr = pIDBInitialize->QueryInterface(IID_IDBProperties,
(void **)&pIDBProperties);
// Validation
if(FAILED(hr))
goto CleanExit;
else
pIDBInitialize->AddRef();
// Create the given database...
hr = pIDBProperties->SetProperties(sizeof(dbpropset)/sizeof(dbpropset[0]),
dbpropset);
// Validation
if(FAILED(hr))
goto CleanExit;
// Free the used memory
SysFreeString(dbprop[0].vValue.bstrVal);
// Initialize the SQL Server CE provider.
pIDBInitialize->Initialize();
// Get ISSCECompact interface
hr = pIDBProperties->QueryInterface(IID_ISSCECompact,
(void **)&pISSCECompact);
// Validation
if(FAILED(hr))
goto CleanExit;
else
pIDBProperties->AddRef();
// Initialize Property with name of new compacted database
compactdbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
compactdbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
compactdbprop[0].vValue.vt = VT_BSTR;
// Create new database name
memset(szNewDBName, TEXT('\0'), 256);
wsprintf(szNewDBName, TEXT("%sx"), lpszDBName);
// new name for compacted database
compactdbprop[0].vValue.bstrVal = SysAllocString(szNewDBName);
// Initialize property set
compactdbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
compactdbpropset[0].rgProperties = compactdbprop;
compactdbpropset[0].cProperties = sizeof(compactdbprop)/sizeof(compactdbprop[0]);
// Compact the database using the provider-specific interface
hr = pISSCECompact->Compact(sizeof(compactdbpropset)/sizeof(compactdbpropset[0]),
compactdbpropset);
// Release the interface
pISSCECompact->Release();
pISSCECompact = NULL;
// Disconnect the database/reset the OLE DB variable
DisconnectDB(lpszDBName);
// Overwrite the original database
if (!CopyFile(szNewDBName, lpszDBName, false))
{
// Set the return value
hr = E_FAIL;
goto CleanExit;
}
// Delete the temp database...
DeleteDB(szNewDBName);
CleanExit:
// Release the used memory
VariantClear(&dbprop[0].vValue);
// Only execute the following command when either one of the
// above command fail.
if (FAILED(hr))
// Disconnect the database/reset the OLE DB variable
DisconnectDB(lpszDBName);
return hr;
}
HRESULT CreateTable (LPTABLECOLUMNINFO lptci)
{
// PURPOSE:
// - Create new table with the specified table name.
// PARAMETERS:
// - lptci :: Target column information.
// OPERATION:
// - Compose SQL-92 command
// - Execute the SQL-92 command with ExecuteSQL interface
// RETURN VALUE:
// - HRESULT
// CREATE TABLE ABC (MyField INT IDENTITY (s,i) NOT NULL CONSTRAINT PK_MyField PRIMARY KEY [UNIQUE])
TCHAR szBuffer[2048] = {NULL};
TCHAR szSQL92[2048] = {NULL};
// Get the SQL92 command
GetSQL92ColumnDef(lptci, (LPTSTR)&szSQL92, 2048);
// Compose the SQL-92 command
wsprintf(szBuffer,
TEXT("CREATE TABLE %s (%s)"),
lptci->szTableName, szSQL92);
// Execute the SQL-92 command
return ExecuteSQL(szBuffer);
}
HRESULT DropTable (LPTSTR lpszTableName)
{
// PURPOSE:
// - Drop the existing table with the specified table name
// PARAMETERS:
// - lpszTableName :: Existing target table name.
// OPERATION:
// - Compose SQL-92 command
// - Execute the SQL-92 command with ExecuteSQL interface
// RETURN VALUE:
// - HRESULT
TCHAR szBuffer[2048] = {NULL};
// Compose the SQL-92 command
wsprintf(szBuffer,
TEXT("DROP TABLE %s"),
lpszTableName);
// Execute the SQL-92 command
return ExecuteSQL(szBuffer);
}
HRESULT CreateColumn (LPTABLECOLUMNINFO lptci)
{
// PURPOSE:
// - Create new column with the specified column information
// PARAMETERS:
// - lptci :: Target column information.
// OPERATION:
// - Compose SQL-92 command
// - Execute the SQL-92 command with ExecuteSQL interface
// RETURN VALUE:
// - HRESULT
TCHAR szBuffer[2048] = {NULL};
TCHAR szSQL92[2048] = {NULL};
// Get the SQL92 command
GetSQL92ColumnDef(lptci, (LPTSTR)&szSQL92, 2048);
// Compose the SQL-92 command
wsprintf(szBuffer,
TEXT("ALTER TABLE %s ADD %s"),
lptci->szTableName, szSQL92);
// Execute the SQL-92 command
return ExecuteSQL(szBuffer);
}
HRESULT DropColumn (LPTABLECOLUMNINFO lptci)
{
// PURPOSE:
// - Drop the existing column with the specified column information
// PARAMETERS:
// - lptci :: Target column information..
// OPERATION:
// - Compose SQL-92 command
// - Execute the SQL-92 command with ExecuteSQL interface
// RETURN VALUE:
// - HRESULT
TCHAR szBuffer[2048] = {NULL};
// Compose the SQL-92 command
wsprintf(szBuffer,
TEXT("ALTER TABLE %s DROP COLUMN %s"),
lptci->szTableName, lptci->szColumnName);
// Execute the SQL-92 command
return ExecuteSQL(szBuffer);
}
HRESULT CreateIndex (LPTABLEINDEXINFO lptii)
{
// PURPOSE:
// - Create new index with the specified index information
// PARAMETERS:
// - lptii :: 32-Bits long pointer point to TABLEINDEXINFO structure
// OPERATION:
// - Compose SQL-92 command
// - Execute the SQL-92 command with ExecuteSQL interface
// RETURN VALUE:
// - HRESULT
TCHAR szBuffer[2048] = {NULL};
TCHAR szUnique[8] = {NULL};
// Validate the Unique mode.
if (lptii->bUnique)
_tcscpy(szUnique, TEXT("UNIQUE"));
else
_tcscpy(szUnique, TEXT(""));
// Compose the SQL-92 command
// NOTE:
// DUE TO SQL CE 2.0 DOES NOT SUPPORT CLUSTERED INDEX,
// HENCE, NONCLUSTERED KEYWORD IS APPLIED IN THIS CASE.
wsprintf(szBuffer,
TEXT("CREATE %s NONCLUSTERED INDEX %s ON %s (%s)"),
szUnique, lptii->szIndexName, lptii->szTableName, lptii->szIndexFields);
// Execute the SQL-92 command
return ExecuteSQL(szBuffer);
}
HRESULT DropIndex (LPTABLEINDEXINFO lptii)
{
// PURPOSE:
// - Drop the existing index with the specified index information
// PARAMETERS:
// - lptii :: 32-Bits long pointer point to TABLEINDEXINFO structure
// OPERATION:
// - Compose SQL-92 command
// - Execute the SQL-92 command with ExecuteSQL interface
// RETURN VALUE:
// - HRESULT
TCHAR szBuffer[2048] = {NULL};
// Compose the SQL-92 command
wsprintf(szBuffer,
TEXT("DROP INDEX %s.%s"),
lptii->szTableName, lptii->szIndexName);
// Execute the SQL-92 command
return ExecuteSQL(szBuffer);
}
HRESULT GetSQL92ColumnDef (LPTABLECOLUMNINFO lptci, LPTSTR lpszBuffer, int nMaxBuffer)
{
// PURPOSE:
// - Build the SQL92 comand for ALTER/CRAETE column statement
// PARAMETERS:
// - lptci :: Target column information.
// - lpszbuffer :: Output buffer
// - nMaxBuffer :: Output buffer size
// OPERATION:
// - Check through the pass in column information and build the respective
// SQL92 command
// RETURN VALUE:
// - HRESULT
TCHAR szColumnType[64] = {NULL};
TCHAR szIdentity[32] = {NULL};
TCHAR szAcceptNull[16] = {NULL};
TCHAR szPrimaryKey[64] = {NULL};
TCHAR szUnique[8] = {NULL};
// Check user define column type
{
switch (lptci->nColumnType)
{
case 0:
// int
_tcscpy(szColumnType, TEXT("INT"));
break;
case 1:
// smallint
_tcscpy(szColumnType, TEXT("SMALLINT"));
break;
case 2:
// tinyint
_tcscpy(szColumnType, TEXT("TINYINT"));
break;
case 3:
// bigint
_tcscpy(szColumnType, TEXT("BIGINT"));
break;
case 4:
// float
_tcscpy(szColumnType, TEXT("FLOAT"));
break;
case 5:
// nvarchar
wsprintf(szColumnType,
TEXT("NVARCHAR (%d)"),
lptci->nColumnSize);
break;
case 6:
// nchar
wsprintf(szColumnType,
TEXT("NCHAR (%d)"),
lptci->nColumnSize);
break;
case 7:
// bit
_tcscpy(szColumnType, TEXT("BIT"));
break;
case 8:
// datetime
_tcscpy(szColumnType, TEXT("DATETIME"));
break;
case 9:
// numeric
_tcscpy(szColumnType, TEXT("NUMERIC"));
break;
default:
// Default empty string
_tcscpy(szColumnType, TEXT(""));
}
}
// Check IDENTITY flag
{
if (lptci->bIdentity)
wsprintf(szIdentity,
TEXT("IDENTITY (%d,%d)"),
HIWORD(lptci->dwIdentityProp), LOWORD(lptci->dwIdentityProp));
else
_tcscpy(szIdentity, TEXT(""));
}
// Check ACCPETNULL flag
{
if (lptci->bAcceptNull)
_tcscpy(szAcceptNull, TEXT("NULL"));
else
_tcscpy(szAcceptNull, TEXT("NOT NULL"));
}
// Check PRIMARY KEY flag
{
if (lptci->bPrimaryKey)
wsprintf(szPrimaryKey,
TEXT(", CONSTRAINT %s PRIMARY KEY (%s)"),
lptci->szPrimaryKeyName, lptci->szColumnName);
else
_tcscpy(szPrimaryKey, TEXT(""));
}
// Check UNIQUE flag
{
if (lptci->bUnique)
_tcscpy(szUnique, TEXT("UNIQUE"));
else
_tcscpy(szUnique, TEXT(""));
}
// initialize the output buffer
memset(lpszBuffer, TEXT('\0'), nMaxBuffer);
// Copy result into the output buffer
wsprintf(lpszBuffer,
TEXT("%s %s %s %s %s %s"),
lptci->szColumnName, szColumnType, szIdentity, szAcceptNull, szPrimaryKey, szUnique);
return NOERROR;
}
HRESULT ExecuteSQL (LPTSTR lpszQuery)
{
// PURPOSE:
// - Execute the given SQL statement.
// PARAMETERS:
// - lpszQuery :: SQL query command string.
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
HRESULT hr = NOERROR;
// Set the SQL query statement
hr = pICmdText->SetCommandText(DBGUID_SQL,
lpszQuery);
if(FAILED(hr))
goto CleanExit;
// Execute the SQL query statement without return any Rowset
hr = pICmdText->Execute(NULL,
IID_NULL,
NULL,
NULL,
NULL);
CleanExit:
return hr;
}
HRESULT GetRowset (LPTSTR lpszQuery)
{
// PURPOSE:
// - Execute the given SQL statement and return a RowSet object.
// PARAMETERS:
// - lpszQuery :: SQL query command string.
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
// NOTE:
// THE FOLLOWING CODE SHOW HOW TO CREATE A ROWSET OBJECT
// WITH COMMAND OBJECT (SQL STATEMENT).
HRESULT hr = NOERROR;
IRowset *pIRowset = NULL;
ICommandText *pICommandText = NULL;
// Create a command object pointer
hr = pIDBCrtCmd->CreateCommand(NULL,
IID_ICommandText,
(IUnknown**)&pICommandText);
// Validation
if(FAILED(hr))
goto CleanExit;
// Set the SQL query statement
hr = pICommandText->SetCommandText(DBGUID_SQL,
lpszQuery);
if(FAILED(hr))
goto CleanExit;
// Execute the SQL query statement
hr = pICommandText->Execute(NULL,
IID_IRowset,
NULL,
NULL,
(IUnknown **)&pIRowset);
if (!FAILED(hr))
{
if(NULL != pIRowset)
// Proceed to walk through the retrieve Rowset object
ProcessRowset(pIRowset);
}
CleanExit:
if (NULL != pIRowset)
{
pIRowset->Release();
pIRowset = NULL;
}
if (NULL != pICommandText)
{
pICommandText->Release();
pICommandText = NULL;
}
return hr;
}
HRESULT ProcessRowset (IRowset *pIRowset)
{
// PURPOSE:
// - Retrieve and display data resulting from
// a query specified in GetRowset function
// PARAMETERS:
// - NIL
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
HRESULT hr = NOERROR;
/*
// FOR LISTVIEW USED ONLY
LVCOLUMN pcol;
LVITEM pitem;
long idx=0;
long lTotalRows = 0;
static long lTotalCols = 0;
long t1=0;
long t2=0;
long elapse=0;
int iHour, iMinute, iSecond, iMiliSec;
ULONG lColumn = 0;
ULONG lNumCols = 0;
ULONG lCount = 0;
ULONG lNumRowsRetrieved = 0;
ULONG ConsumerBufColOffset = 0;
IAccessor *pIAccessor = NULL;
IColumnsInfo *pIColumnsInfo = NULL;
DBCOLUMNINFO *pDBColumnInfo = NULL;
DBBINDING *pBindings = NULL;
HACCESSOR hAccessor = NULL;
HROW hRows[10];
HROW *pRows = &hRows[0];
BYTE *pBuffer = NULL;
WCHAR *pStringsBuffer = NULL;
TCHAR szBuffer[1024];
// NOTE:
// THE FOLLOWING CODE SHOW THE GENERATE METHOD TO DISPLAY
// THE READED ROWSET COLUMN DATA INTO LISTVIEW.
// HENCE, FOR BETTER EFFICIENTCY, THE FOLLOWING CODE
// MUST BE MODIFIED TO SUITE THE NEED WITH REFERENCE TO
// THE RESPECTIVE ROWSET.
// Get the start time (CPU Tick)
t1 = GetTickCount();
// Obtain access to the IColumnInfo interface, from the Rowset object.
hr = pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&pIColumnsInfo);
// Validation
if(FAILED(hr))
{
// Update status
UpdateList(TEXT("Failed to query IColumnsInfo interface!"));
// Terminate the current routine
goto CleanExit;
}
else
pIRowset->AddRef();
// Retrieve the column information.
pIColumnsInfo->GetColumnInfo(&lNumCols,
&pDBColumnInfo,
&pStringsBuffer);
// Free the column information interface.
pIColumnsInfo->Release();
// Create a DBBINDING array.
pBindings = new DBBINDING[lNumCols];
// Using the ColumnInfo structure, fill out the pBindings array.
for(lCount=0; lCount<lNumCols; lCount++)
{
pBindings[lCount].iOrdinal = lCount+1;
pBindings[lCount].obValue = ConsumerBufColOffset;
pBindings[lCount].pTypeInfo = NULL;
pBindings[lCount].pObject = NULL;
pBindings[lCount].pBindExt = NULL;
pBindings[lCount].dwPart = DBPART_VALUE;
pBindings[lCount].dwMemOwner = DBMEMOWNER_CLIENTOWNED;
pBindings[lCount].eParamIO = DBPARAMIO_NOTPARAM;
// NOTE:
// DUE TO THE OUTPUT DATA TYPE OF EACH FIELDS WAS
// CONVERTED INTO "DBTYPE_WSTR" WITHIN THE SQL SERVER CE
// (HARDCODED) INSTEAD OF USING THE ORIGINAL DATA TYPE AS:
// pBindings[lCount].wType
// AS A RESULT, IT WILL NO LONGER FOLOOW THE VALUE STORE
// IN pDBColumnInfo[lCount].ulColumnSize
//
// HENCE, THE MAXIMUM COLUMN SIZE WAS SET TO 48BYTES
// IT CAN BE ANY VALUE, AS LONG AS IT IS LARGE ENOUGH
// TO HOLD THE CONVERTED DATA FOR ALL THE READ COLUMNS.
pBindings[lCount].cbMaxLen = 48;
pBindings[lCount].dwFlags = 0;
// NOTE:
// DUE TO DATA CONVERSION ERROR, SO WE HARDCODED THE
// DATA TYPE TO DBTYPE_WSTR INSTEAD OF USING THE DATA
// TYPE OBTAIN FROM THE DBCOLUMNINFO STRUCTURE AS:
// DBColumnInfo[lCount].wType
// THROUGH THE GetColumnInfo INTERFACE
pBindings[lCount].wType = DBTYPE_WSTR;
pBindings[lCount].bPrecision = pDBColumnInfo[lCount].bPrecision;
pBindings[lCount].bScale = pDBColumnInfo[lCount].bScale;
// NOTE:
// DUE TO THE DATA TYPE WAS HARDCODED TO DBTYPE_WSTR. HENCE
// THE "ColumnSize" VALUE IN THE DBCOLUMNINFO STRUCTURE AS:
// pDBColumnInfo[lCount].ulColumnSize
// WILL NO LONGER APPLICABLE AND THE NEW HARDCODED SIZE OF
// 48 BYTES WAS USED IN THIS CASE.
// THIS VALUS SHOULD BE CHANGE ARCCODING TO THE DEFINE DATA
// TYPE AND NOT NECESSARY MUST BE 48 BYTES.
// Compute the next buffer offset.
ConsumerBufColOffset += 48; //pDBColumnInfo[lCount].ulColumnSize;
};
// Get the IAccessor interface.
hr = pIRowset->QueryInterface(IID_IAccessor,
(void **)&pIAccessor);
// Validation
if(FAILED(hr))
{
// Update status
UpdateList(TEXT("Failed to query IAccessor interface!"));
// Terminate the current routine
goto CleanExit;
}
else
pIRowset->AddRef();
// Create an accessor from the set of bindings (pBindings).
pIAccessor->CreateAccessor(DBACCESSOR_ROWDATA,
lNumCols,
pBindings,
0,
&hAccessor,
NULL);
// ------------------------------------------------------------
// NOTE:
// THE FOLLOWING CODE CAN BE REMOVE, IF THE COLUMN CAPTION
// DOES NOT REQUIRE.
// ------------------------------------------------------------
// [REMOVABLE CODE - START]
if (lTotalCols > 0)
{
// Clear all the previous listview item
SendMessage(hWndList1, LVM_DELETEALLITEMS, 0, 0);
// Clear the previous column header
for (idx=0; idx<lTotalCols; idx++)
{
SendMessage(hWndList1, LVM_DELETECOLUMN, (int)0, 0);
};
}
// Setup column names.
for(lCount=0; lCount<lNumCols; lCount++)
{
// Initialize listview column structure
pcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
pcol.fmt = LVCFMT_LEFT;
pcol.pszText = pDBColumnInfo[lCount].pwszName;
//pcol.cx = 80;
pcol.cx = SendMessage(hWndList1, LVM_GETSTRINGWIDTH, 0, (LPARAM)pDBColumnInfo[lCount].pwszName) + 16;
// Append listview column
SendMessage(hWndList1, LVM_INSERTCOLUMN, lCount, (LPARAM)&pcol);
};
//
lTotalCols = lNumCols;
// [REMOVABLE CODE - END]
// Get a set of 10 rows.
pIRowset->GetNextRows(NULL,
0,
10,
&lNumRowsRetrieved,
&pRows);
// Allocate space for the row buffer.
pBuffer = new BYTE[ConsumerBufColOffset];
// Display the rows.
while(lNumRowsRetrieved > 0)
{
//For each row, print the column data.
for(lCount=0; lCount<lNumRowsRetrieved; lCount++)
{
// Initialize...
memset(pBuffer, 0, ConsumerBufColOffset);
// Get the row data values.
pIRowset->GetData(hRows[lCount], hAccessor, pBuffer);
// -- Item
pitem.mask = LVIF_TEXT;
pitem.iItem = SendMessage(hWndList1, LVM_GETITEMCOUNT, 0, 0);
pitem.pszText = (LPTSTR)&pBuffer[pBindings[0].obValue];
pitem.iSubItem = 0;
// Insert item
idx = SendMessage(hWndList1, LVM_INSERTITEM, 0, (LPARAM)&pitem);
// Walk through each columns...
for (lColumn=1; lColumn<lNumCols; lColumn++)
{
pitem.mask = LVIF_TEXT;
pitem.iItem = idx;
pitem.pszText = (LPTSTR)&pBuffer[pBindings[lColumn].obValue];
pitem.iSubItem = lColumn;
// Insert subitem
SendMessage(hWndList1, LVM_SETITEM, 0, (LPARAM)&pitem);
}
// Update the total column counter by 1
lTotalRows++;
};
// Release the rows retrieved.
pIRowset->ReleaseRows(lNumRowsRetrieved,
hRows,
NULL,
NULL,
NULL);
// Get the next set of 10 rows.
pIRowset->GetNextRows(NULL,
0,
10,
&lNumRowsRetrieved,
&pRows);
};
{
// Get the complete time (CPU Tick)
t2 = GetTickCount();
// Calculate the total time
elapse = (t2 - t1)/1000;
iHour = elapse/3600;
iMinute = (elapse/60) - (iHour*60);
iSecond = elapse - (iHour*3600) - (iMinute*60);
iMiliSec = (t2-t1) - (elapse*1000);
// Initialize...
memset(szBuffer, TEXT('\0'), 1024);
// Compose...
wsprintf(szBuffer, TEXT("\r\n(%ld row(s) affected)\r\nElapsed time %02d:%02d:%02d.%03d"), lTotalRows, iHour, iMinute, iSecond, iMiliSec);
// Update Mesasge display
UpdateList(szBuffer);
}
// Set return value
hr = S_OK;
CleanExit:
if (NULL != pIColumnsInfo)
{
pIColumnsInfo->Release();
pIColumnsInfo = NULL;
}
if (NULL != pBindings)
{
delete [] pBindings;
pBindings = NULL;
}
if (NULL != pIAccessor)
{
pIAccessor->Release();
pIAccessor = NULL;
}
/*
if (NULL != pBuffer)
{
delete [] pBuffer;
pBuffer = NULL;
}
*/
return hr;
}
HRESULT GetErrorMessage (LPTSTR lpszBuffer, int MaxBuffer)
{
// PURPOSE:
// - Get the current error message
// PARAMETERS:
// - lpszOleDBErrMessage :: Error message string buffer
// OPERATION:
// - ...
// RETURN VALUE:
// - HRESULT
DWORD dwErrorIndex = 0;
ULONG ulNumErrorRecs = 0;
HRESULT hr = NOERROR;
IErrorInfo *pIErrorInfo;
IErrorInfo *pIErrorInfoRecord;
IErrorRecords *pIErrorRecords;
ERRORINFO ErrorInfo;
// This interface supports returning error information
// Get the error object from the system for this thread
hr = GetErrorInfo(0, &pIErrorInfo);
// Validation
if(FAILED(hr) || NULL == pIErrorInfo)
return hr;
hr = pIErrorInfo->QueryInterface(IID_IErrorRecords, (void **) &pIErrorRecords);
// Validation
if(FAILED(hr) || NULL == pIErrorInfo)
return hr;
// Release unneeded interface
pIErrorInfo->Release();
// Determine the number of records in this error object
hr = pIErrorRecords->GetRecordCount(&ulNumErrorRecs);
// Validation
if(FAILED(hr) || NULL == pIErrorInfo)
return hr;
// Loop over each error record in the error object to display information
// about each error. Errors are returned
for (dwErrorIndex = 0; dwErrorIndex < ulNumErrorRecs; dwErrorIndex++)
{
// Attempt to retrieve basic error information for this error.
hr = pIErrorRecords->GetBasicErrorInfo(dwErrorIndex, &ErrorInfo);
// Retrieve standard error information for this error
hr = pIErrorRecords->GetErrorInfo(dwErrorIndex, NULL, &pIErrorInfoRecord);
// Allocate string buffer
BSTR bstrDescriptionOfError = NULL;
BSTR bstrSourceOfError = NULL;
// Get error description
hr = pIErrorInfoRecord->GetDescription(&bstrDescriptionOfError);
// Get error source
hr = pIErrorInfoRecord->GetSource(&bstrSourceOfError);
if(NULL != pIErrorInfoRecord)
// Release unneeded interface
pIErrorInfoRecord->Release();
// Initialize...
memset(lpszBuffer, TEXT('\0'), MaxBuffer);
// At this point, you could call GetCustomErrorObject
// and query for additional interfaces to determine
// what else happened.
wsprintf(lpszBuffer,
TEXT("Error Code: 0x%lx\r\n %s."),
ErrorInfo.hrError,
bstrDescriptionOfError);
// Free the resources.
SysFreeString(bstrDescriptionOfError);
SysFreeString(bstrSourceOfError);
}
// Release unneeded interface
pIErrorRecords->Release();
return hr;
}
//***********************************************************
// SQL Server CE Interface Function //
// //
// Author : Chris C //
// PassportONE.com //
// http://www.PassportONE.com //
// Email: chris@PassportONE.com //
// © Aug 2002 //
// //
//***********************************************************
#pragma once
// DO NOT REMOVE THE FOLLOWING DEFINE CONSTANT
#define OLEDBVER 0x210 // OLE DB driver version
#define DBINITCONSTANTS // Initialize OLE constants...
#define INITGUID // ...once in each app.
// RELEVANT INCLUDE HEADER FILES
#include <windows.h>
#include <urlmon.h>
#include <oledb.h>
#include <oledberr.h>
#include <ssceoledb.h>
#include <coguid.h>
#include <Oaidl.h> // Support OLE DB error lookup capability
// FOR LISTVIEW CONTROL ONLY, CAN BE REMOVE IS NOT
// APPLICABLE IN THE "ProcessRowset" FUNCTION.
#include <commctrl.h>
// -------------------------------------------------------
//
// SQL SERVER CE 2.0 DATABASE ACCESS GLOBAL VARIABLE
//
// -------------------------------------------------------
// Provider Interfaces
IDBInitialize *pIDBInitialize = NULL;
IUnknown *pIUnknownSession = NULL;
IDBCreateSession *pIDBCreateSession = NULL;
IDBProperties *pIDBProperties = NULL;
// SQL query command text handle object
IDBCreateCommand *pIDBCrtCmd = NULL;
ICommandText *pICmdText = NULL;
// -------------------------------------------------------
//
// SQL SERVER CE 2.0 DATABASE ACCESS GLOBAL VARIABLE
//
// -------------------------------------------------------
typedef struct tagTABLECOLOUMNINFO
{
TCHAR szTableName[32]; // Target table name
TCHAR szColumnName[32]; // New field name
int nColumnType; // New field type
// 0 = int
// 1 = smallint
// 2 = tinyint
// 3 = bigint
// 4 = float
// 5 = nvarchar
// 6 = nchar
// 7 = bit
// 8 = datetime
// 9 = numeric
int nColumnSize; // Field size
// Only for the following data type
// - nvarchar
// - nchar
BOOL bIdentity; // Identity field flag
// TRUE = Identity column
// FALSE = Non-Identity column
DWORD dwIdentityProp; // Identity Seed & Increment value
// HIWORD = Identity seed;
// LOWORD = Identity increment;
BOOL bAcceptNull; // Accpet NULL flag
// TRUE = Accpet NULL string
// FALSE = Not accpet NULL string
BOOL bPrimaryKey; // Primaty Key flag
// TRUE = Primary key
// FALSE = Non-primary key
BOOL bUnique; // Unique flag
// TRUE = Unique
// FALSE = Non-unique
TCHAR szPrimaryKeyName[32];// New prmary key name
} TABLECOLUMNINFO, FAR * LPTABLECOLUMNINFO;
typedef struct tagTABLEINDEXINFO
{
TCHAR szTableName[32]; // Target table name
TCHAR szIndexName[32]; // New Index name
TCHAR szIndexFields[64]; // New Index fields
// Example:
// - Single Fields:
// _tcscpy(szIndexName, TEXT("UserName"));
// - Multiple Fields:
// _tcscpy(szIndexName, TEXT("UserName, Password"));
BOOL bUnique; // New Index is unique?
// TRUE = Unique index
// FALSE = Non-Unique index
} TABLEINDEXINFO, FAR * LPTABLEINDEXINFO;
// -------------------------------------------------------
//
// SQL SERVER CE 2.0 DATABASE ACCESS FUNCTION
//
// -------------------------------------------------------
// Create a new SQL Server CE database provider.
HRESULT CreateSqlSvrCeProvider (void);
// Create a new SQL Server CE database session right
// after successful connect to the pass in database
// name (*.sdf) in fullpath.
HRESULT CreateDBSession (void);
// Retrieve the last known OLE DB error message, due to
// error occur through out the database access process.
HRESULT GetErrorMessage (LPTSTR lpszBuffer, int MaxBuffer);
// Connect the SQL Server CE database with reference to
// the pass in database name (*.sdf) in fullpath.
HRESULT ConnectDB (LPTSTR lpszDBName);
// Disconnect from the current open SQL Server CE database
// with reference to the pass in database name (*.sdf) in
// fullpath under the CreateDB/ConnectDB function.
HRESULT DisconnectDB (LPTSTR lpszDBName);
// Create the SQL Server CE database with reference to
// the pass in database name (*.sdf) in fullpath.
HRESULT CreateDB (LPTSTR lpszDBName);
// Delete the SQL Server CE database with reference to
// the pass in database name (*.sdf) in fullpath.
HRESULT DeleteDB (LPTSTR lpszDBName);
// Compact the SQL Server CE database with reference to
// the pass in database name (*.sdf) in fullpath.
HRESULT CompactDB (LPTSTR lpszDBName);
// Create new table with reference to
// the pass in table name and first column information
// DUE TO SQL SERVER CE 2.0 MUST HAVE AT LEAST 1
// COLUMN IN THE CREATED TABLE.
HRESULT CreateTable (LPTABLECOLUMNINFO lptci);
// Delete the existing table with reference to
// the pass in table name..
HRESULT DropTable (LPTSTR lpszTableName);
// Create new column with reference to
// the pass in information in TABLECOLUMNINFO structure.
HRESULT CreateColumn (LPTABLECOLUMNINFO lptci);
// Drop the existing column with reference to
// the pass in information in TABLECOLUMNINFO structure.
HRESULT DropColumn (LPTABLECOLUMNINFO lptci);
// Create new index with reference to
// the pass in information in TABLEINDEXINFO structure.
HRESULT CreateIndex (LPTABLEINDEXINFO lptii);
// Drop the existing index with reference to
// the pass in information in TABLEINDEXINFO structure.
HRESULT DropIndex (LPTABLEINDEXINFO lptii);
// Build the SQL92 command with reference to
// the pass in information in TABLEINDEXINFO structure.
HRESULT GetSQL92ColumnDef (LPTABLECOLUMNINFO lptci, LPTSTR lpszBuffer, int nMaxBuffer);
// Execute the SQL Statement with does not require to
// return a RowSet object.
// EXAMPLE:
// SELECT, DELETE, CREATE TABLE, DROP TABLE, INSERT INTO & etc...
HRESULT ExecuteSQL (LPTSTR lpszQuery);
// Load the records into a RowSet object with reference
// to the pass in SQL statement.
HRESULT GetRowset (LPTSTR lpszQuery);
// Process the Rowset object created by the GetRowset function.
HRESULT ProcessRowset (IRowset *pRowset);
extern "C"
{
LPWSTR AnsiToWide( LPSTR );
}
HB_FUNC( CONNECTDB )
{
LPWSTR pW = AnsiToWide( hb_parc( 1 ) ) ;
hb_retnl(ConnectDB( TEXT( "\\My Documents\\test.sdf" ) ) ) ; // asi devuelve S_OK
//hb_retnl( ConnectDB( (LPTSTR) hb_parc(1) ) );
//hb_retnl( ConnectDB( pW ) );
//hb_xfree( pW );
}
HB_FUNC( COINITIALIZEEX )
{
hb_retnl( CoInitializeEx( NULL, COINIT_MULTITHREADED ) );
}
HB_FUNC( COUNINITIALIZE )
{
CoUninitialize();
hb_ret();
}
Function Main()
LOCAL cDatabase :="\\My Documents\\test.sdf"
Msginfo( COINITIALIZEEX() )
Msginfo( CONNECTDB( cDatabase ) ) // como parametro devuelve -2147467262
Return nil
HB_FUNC( CONNECTDB )
{
LPWSTR pW = AnsiToWide( hb_parc( 1 ) ) ;
hb_retnl( ConnectDB( pW ) );
hb_xfree( pW );
}
SqlSvrCe.c
d:\vce\include\arm\ssceoledb.h(83) : error C2061: syntax error : identifier 'ISSCECompact'
d:\vce\include\arm\ssceoledb.h(83) : error C2059: syntax error : ';'
d:\vce\include\arm\ssceoledb.h(83) : error C2059: syntax error : ':'
d:\vce\include\arm\ssceoledb.h(95) : error C2061: syntax error : identifier 'IRowsetPosition'
d:\vce\include\arm\ssceoledb.h(95) : error C2059: syntax error : ';'
d:\vce\include\arm\ssceoledb.h(95) : error C2059: syntax error : ':'
d:\pocketpc\apSQLSRV\sqlsvrce.c(35) : error C2065: 'CLSID_SQLSERVERCE_2_0' : undeclared identifier
d:\pocketpc\apSQLSRV\sqlsvrce.c(35) : warning C4047: 'function' : 'const struct _GUID *const ' differs in levels of indirection from 'int '
d:\pocketpc\apSQLSRV\sqlsvrce.c(35) : warning C4024: 'CoCreateInstance' : different types for formal and actual parameter 1
d:\pocketpc\apSQLSRV\sqlsvrce.c(38) : error C2115: 'function' : incompatible types
d:\pocketpc\apSQLSRV\sqlsvrce.c(38) : warning C4024: 'CoCreateInstance' : different types for formal and actual parameter 4
d:\pocketpc\apSQLSRV\sqlsvrce.c(58) : error C2039: 'QueryInterface' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'd:\pocketpc\apSQLSRV\sqlsvrce.c(63) : error C2039: 'AddRef' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(66) : error C2039: 'CreateSession': is not a member of 'IDBCreateSession'
d:\vce\include\arm\oledb.h(7567) : see declaration of 'IDBCreateSession'
d:\pocketpc\apSQLSRV\sqlsvrce.c(73) : error C2039: 'QueryInterface' : is not a member of 'IUnknown'
d:\vce\include\arm\unknwn.h(133) : see declaration of 'IUnknown'
d:\pocketpc\apSQLSRV\sqlsvrce.c(78) : error C2039: 'AddRef' : is not a member of 'IUnknown'
d:\vce\include\arm\unknwn.h(133) : see declaration of 'IUnknown'
d:\pocketpc\apSQLSRV\sqlsvrce.c(81) : error C2039: 'CreateCommand': is not a member of 'IDBCreateCommand'
d:\vce\include\arm\oledb.h(7465) : see declaration of 'IDBCreateCommand'
d:\pocketpc\apSQLSRV\sqlsvrce.c(138) : error C2039: 'QueryInterface' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(144) : error C2039: 'AddRef' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(147) : error C2039: 'SetProperties' : is not a member of 'IDBProperties'
d:\vce\include\arm\oledb.h(7821) : see declaration of 'IDBProperties'
d:\pocketpc\apSQLSRV\sqlsvrce.c(157) : error C2039: 'Initialize' :is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(188) : error C2039: 'Release' : is not a member of 'IDBCreateSession'
d:\vce\include\arm\oledb.h(7567) : see declaration of 'IDBCreateSession'
d:\pocketpc\apSQLSRV\sqlsvrce.c(194) : error C2039: 'Release' : is not a member of 'IUnknown'
d:\vce\include\arm\unknwn.h(133) : see declaration of 'IUnknown'
d:\pocketpc\apSQLSRV\sqlsvrce.c(200) : error C2039: 'Release' : is not a member of 'IDBProperties'
d:\vce\include\arm\oledb.h(7821) : see declaration of 'IDBProperties'
d:\pocketpc\apSQLSRV\sqlsvrce.c(206) : error C2039: 'Release' : is not a member of 'IDBCreateCommand'
d:\vce\include\arm\oledb.h(7465) : see declaration of 'IDBCreateCommand'
d:\pocketpc\apSQLSRV\sqlsvrce.c(212) : error C2039: 'Release' : is not a member of 'ICommandText'
d:\vce\include\arm\oledb.h(6889) : see declaration of 'ICommandText'
d:\pocketpc\apSQLSRV\sqlsvrce.c(219) : error C2039: 'Release' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(273) : error C2039: 'QueryInterface' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(279) : error C2039: 'AddRef' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(282) : error C2039: 'CreateDataSource' : is not a member of 'IDBDataSourceAdmin'
d:\vce\include\arm\oledb.h(8310) : see declaration of 'IDBDataSourceAdmin'
d:\pocketpc\apSQLSRV\sqlsvrce.c(305) : error C2039: 'Release' : is not a member of 'IDBDataSourceAdmin'
d:\vce\include\arm\oledb.h(8310) : see declaration of 'IDBDataSourceAdmin'
d:\pocketpc\apSQLSRV\sqlsvrce.c(356) : error C2065: 'ISSCECompact': undeclared identifier
d:\pocketpc\apSQLSRV\sqlsvrce.c(356) : error C2065: 'pISSCECompact' : undeclared identifier
d:\pocketpc\apSQLSRV\sqlsvrce.c(356) : warning C4047: '=' : 'int 'differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(356) : error C2106: '=' : left oper and must be l-value
d:\pocketpc\apSQLSRV\sqlsvrce.c(387) : error C2039: 'QueryInterface' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(393) : error C2039: 'AddRef' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(396) : error C2039: 'SetProperties' : is not a member of 'IDBProperties'
d:\vce\include\arm\oledb.h(7821) : see declaration of 'IDBProperties'
d:\pocketpc\apSQLSRV\sqlsvrce.c(406) : error C2039: 'Initialize' : is not a member of 'IDBInitialize'
d:\vce\include\arm\oledb.h(7965) : see declaration of 'IDBInitialize'
d:\pocketpc\apSQLSRV\sqlsvrce.c(409) : error C2039: 'QueryInterface' : is not a member of 'IDBProperties'
d:\vce\include\arm\oledb.h(7821) : see declaration of 'IDBProperties'
d:\pocketpc\apSQLSRV\sqlsvrce.c(415) : error C2039: 'AddRef' : is not a member of 'IDBProperties'
d:\vce\include\arm\oledb.h(7821) : see declaration of 'IDBProperties'
d:\pocketpc\apSQLSRV\sqlsvrce.c(434) : error C2223: left of '->Compact' must point to struct/union
d:\pocketpc\apSQLSRV\sqlsvrce.c(438) : error C2223: left of '->Release' must point to struct/union
d:\pocketpc\apSQLSRV\sqlsvrce.c(439) : warning C4047: '=' : 'int 'differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(445) : error C2065: 'false' : undeclared identifier
d:\pocketpc\apSQLSRV\sqlsvrce.c(484) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(485) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(512) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(536) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(537) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(564) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(588) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(589) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(622) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(648) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(649) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(650) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(651) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(652) : warning C4047: 'initializing' : 'unsigned short ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(768) : error C2039: 'SetCommandText' : is not a member of 'ICommandText'
d:\vce\include\arm\oledb.h(6889) : see declaration of 'ICommandText'
d:\pocketpc\apSQLSRV\sqlsvrce.c(774) : error C2039: 'Execute' : is not a member of 'ICommandText'
d:\vce\include\arm\oledb.h(6889) : see declaration of 'ICommandText'
d:\pocketpc\apSQLSRV\sqlsvrce.c(807) : error C2039: 'CreateCommand' : is not a member of 'IDBCreateCommand'
d:\vce\include\arm\oledb.h(7465) : see declaration of 'IDBCreateCommand'
d:\pocketpc\apSQLSRV\sqlsvrce.c(815) : error C2039: 'SetCommandText' : is not a member of 'ICommandText'
d:\vce\include\arm\oledb.h(6889) : see declaration of 'ICommandText'
d:\pocketpc\apSQLSRV\sqlsvrce.c(822) : error C2039: 'Execute' : is not a member of 'ICommandText'
d:\vce\include\arm\oledb.h(6889) : see declaration of 'ICommandText'
d:\pocketpc\apSQLSRV\sqlsvrce.c(839) : error C2039: 'Release' : is not a member of 'IRowset'
d:\vce\include\arm\oledb.h(2782) : see declaration of 'IRowset'
d:\pocketpc\apSQLSRV\sqlsvrce.c(845) : error C2039: 'Release' : is not a member of 'ICommandText'
d:\vce\include\arm\oledb.h(6889) : see declaration of 'ICommandText'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1177) : error C2039: 'QueryInterface' : is not a member of 'IErrorInfo'
d:\vce\include\arm\oaidl.h(5240) : see declaration of 'IErrorInfo'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1183) : error C2039: 'Release' : is not a member of 'IErrorInfo'
d:\vce\include\arm\oaidl.h(5240) : see declaration of 'IErrorInfo'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1186) : error C2039: 'GetRecordCount' : is not a member of 'IErrorRecords'
d:\vce\include\arm\oledb.h(10905) : see declaration of 'IErrorRecords'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1196) : error C2039: 'GetBasicErrorInfo' : is not a member of 'IErrorRecords'
d:\vce\include\arm\oledb.h(10905) : see declaration of 'IErrorRecords'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1198) : error C2039: 'GetErrorInfo' : is not a member of 'IErrorRecords'
d:\vce\include\arm\oledb.h(10905) : see declaration of 'IErrorRecords'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1201) : error C2275: 'BSTR' : illegal use of this type as an expression
d:\vce\include\arm\wtypes.h(1111) : see declaration of 'BSTR'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1201) : error C2146: syntax error : missing ';' before identifier 'bstrDescriptionOfError'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1201) : error C2065: 'bstrDescriptionOfError' : undeclared identifier
d:\pocketpc\apSQLSRV\sqlsvrce.c(1201) : warning C4047: '=' : 'int ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1202) : error C2275: 'BSTR' : illegal use of this type as an expression
d:\vce\include\arm\wtypes.h(1111) : see declaration of 'BSTR'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1202) : error C2146: syntax error : missing ';' before identifier 'bstrSourceOfError'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1202) : error C2065: 'bstrSourceOfError' : undeclared identifier
d:\pocketpc\apSQLSRV\sqlsvrce.c(1202) : warning C4047: '=' : 'int ' differs in levels of indirection from 'void *'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1205) : error C2039: 'GetDescription' : is not a member of 'IErrorInfo'
d:\vce\include\arm\oaidl.h(5240) : see declaration of 'IErrorInfo'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1207) : error C2039: 'GetSource' :is not a member of 'IErrorInfo'
d:\vce\include\arm\oaidl.h(5240) : see declaration of 'IErrorInfo'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1211) : error C2039: 'Release' : is not a member of 'IErrorInfo'
d:\vce\include\arm\oaidl.h(5240) : see declaration of 'IErrorInfo'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1225) : warning C4047: 'function' : 'unsigned short *' differs in levels of indirection from 'int '
d:\pocketpc\apSQLSRV\sqlsvrce.c(1225) : warning C4024: 'SysFreeString' : different types for formal and actual parameter 1
d:\pocketpc\apSQLSRV\sqlsvrce.c(1226) : warning C4047: 'function' : 'unsigned short *' differs in levels of indirection from 'int '
d:\pocketpc\apSQLSRV\sqlsvrce.c(1226) : warning C4024: 'SysFreeString' : different types for formal and actual parameter 1
d:\pocketpc\apSQLSRV\sqlsvrce.c(1230) : error C2039: 'Release' : is not a member of 'IErrorRecords'
d:\vce\include\arm\oledb.h(10905) : see declaration of 'IErrorRecords'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1235) : error C2059: syntax error : 'string'
d:\pocketpc\apSQLSRV\sqlsvrce.c(1242) : warning C4013: 'AnsiToWide' undefined; assuming extern returning int
d:\pocketpc\apSQLSRV\sqlsvrce.c(1242) : warning C4013: 'hb_parc' undefined; assuming extern returning int
d:\pocketpc\apSQLSRV\sqlsvrce.c(1242) : warning C4047: 'initializing' : 'unsigned short *' differs in levels of indirection from 'int '
d:\pocketpc\apSQLSRV\sqlsvrce.c(1244) : warning C4013: 'hb_retnl' undefined; assuming extern returning int
d:\pocketpc\apSQLSRV\sqlsvrce.c(1245) : warning C4013: 'hb_xfree' undefined; assuming extern returning int
d:\pocketpc\apSQLSRV\sqlsvrce.c(1249) : error C2084: function 'int__cdecl HB_FUNC()' already has a body
d:\pocketpc\apSQLSRV\sqlsvrce.c(1250) : warning C4013: 'CoInitializeEx' undefined; assuming extern returning int
d:\pocketpc\apSQLSRV\sqlsvrce.c(1250) : error C2065: 'COINIT_MULTITHREADED' : undeclared identifier
d:\pocketpc\apSQLSRV\sqlsvrce.c(1256) : warning C4013: 'hb_ret' undefined; assuming extern returning int
Return to FiveWin para Pocket PC
Users browsing this forum: No registered users and 14 guests