Sqlcode 100 On Fetch data in esql/c program but the rows are present -
11-24-2010
, 01:26 PM
Hello.
I have this problem: i've get sometimes sqlcode = 100 after fetch row, but the
rows are present on db!
This is my sample code:
EXEC SQL BEGIN DECLARE SECTION;
char statement[1000];
char bdc_stato_ddt;
char bdc_user_prep[9];
char bdc_data_prep[7];
char bdc_ora_prep[7];
char bdp_cod_articolo[10];
char bdp_stato_riga;
EXEC SQL END DECLARE SECTION
EXECSQL BEGIN WORK;
EXEC SQL SET LOCK MODE TO WAIT;
sprintf(statement,"SELECT bdc_stato_ddt, bdc_user_prep, bdc_data_prep,
bdc_ora_prep FROM informix.bolcli WHERE bdc_key_soc = '%c' AND bdc_key_tipo_bol
= 'V' AND bdc_key_num_bol = %d FOR UPDATE", InfoDdtArt.CodSoc,
InfoDdtArt.NumDdt);
debug(&sdebug, "statement %s\n", statement);
EXEC SQL
PREPARE bolcli_query02
FROM :statement;
EXEC SQL
DECLARE curBolcli02 CURSOR
FOR bolcli_query02;
EXEC SQL
OPEN curBolcli02;
EXEC SQL
FETCH curBolcli02
INTO :bdc_stato_ddt, :bdc_user_prep, :bdc_data_prep, :bdc_ora_prep;
if (SQLCODE)
{
if (SQLCODE == 100)
{
....
}
else
{
....
}
EXEC SQL
CLOSE curBolcli02;
EXEC SQL FREE
curBolcli02;
EXEC SQL FREE
bolcli_query02;
EXEC SQL COMMIT WORK;
return;
}
/***** follows the code which sometimes fails *****/
sprintf(statement, "SELECT NVL(bdp_stato_riga, '0') as a, bdp_cod_articolo FROM
informix.bolprd WHERE bdp_key_soc = '%c' AND bdp_key_tipo_bol =
'V' AND bdp_key_num_bol = %d AND bdp_qta_vend > 0 AND ((bdp_stato_riga = '0')
OR (bdp_stato_riga = '1') OR (bdp_stato_riga = '2' AND
(bdp_qta_vend+NVL(bdp_qta_omagg, 0)) != NVL(bdp_qta_prep, 0))) ORDER BY a",
InfoDdtArt.CodSoc, InfoDdtArt.NumDdt);
debug(&sdebug, "ENDPREPSETSTATE - statement %s\n", statement);
EXEC SQL
PREPARE bolprd_query02
FROM :statement;
EXEC SQL
DECLARE curBolprd02 CURSOR
FORbolprd_query02;
EXEC SQL
OPEN curBolprd02;
EXEC SQL
FETCH curBolprd02
INTO :bdp_stato_riga, :bdp_cod_articolo;
Despite rows which match the query are present, sometimes after fetch
curBolprd02 sqlcode is 100 (sqlstate is 02000)
This code is run by more users, and more users can simultaneously update the
bolprd table.
The esql version is:
IBM Informix CSDK Version 2.81, IBM Informix-ESQL Version 9.53.UC
Thanks for your help. |