Page 1 of 1

BDS2007 & TDateTime

Posted: Wed 04 Jul 2007 09:32
by Simonis Christophe
I've got an error when I execute a query with a TDateTime as parameter.

Here is a code sample

Code: Select all

//---------------------------------------------------------------------------

#include 
#include 
#include 
#include 

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
	int r = 0;
	try {
		std::auto_ptr connector;
		connector.reset( new TSQLConnection(0) );

		std::cout LoginPrompt = false;
		connector->KeepConnection = true;

		connector->DriverName = "Oracle (Core Lab)";
		connector->LibraryName = "dbexpoda40.dll";
		connector->VendorLib = "oci.dll";
		connector->GetDriverFunc = "getSQLDriverORA";

		connector->Params->Values["BlobSize"] = "-1";
		connector->Params->Values["Database"] = "TNS_NAME";
		connector->Params->Values["User_Name"] = "USERNAME";
		connector->Params->Values["Password"] = "PASSWORD";

		connector->Open ();

		std::cout  query;
		query.reset( new TSQLQuery(0) );
		query->SQLConnection = connector.get();
		query->Active = false;

		query->SQL->Text = "INSERT INTO DS_DEBUG(ID_SESSION, TS_DEBUT) "
						   "              VALUES(:P_SESSION, :P_DEBUT) ";

		query->ParamByName("P_SESSION")->AsString = "093B3DD5-2DD6-408A-949C-4A74F7F43CD7";
		query->ParamByName("P_DEBUT")->AsDateTime = Now();

		std::cout StartTransaction(transaction);
		query->ExecSQL();
		std::cout Rollback (transaction);
		std::cout CloseDataSets();
		connector->Close ();
        std::cout > end;

	return r;
}
//---------------------------------------------------------------------------

and the output i've got is
connector created
connection opened
query created
error: Pas de valeur pour le paramÞtre 'P_DEBUT'

press [ENTER] to quit
The translated error message is No value for parameter 'P_DEBUT'

thanks.

Posted: Wed 04 Jul 2007 13:18
by Simonis Christophe
A workaround is to use SQLTimeStamp

Code: Select all

query->ParamByName("P_DEBUT")->AsSQLTimeStamp = DateTimeToSQLTimeStamp(Now());
The previous code was functional with C++ Builder 6...

However, with a SELECT I can still retrieve fields with the AsDateTime property :/