Problem in opening an cursor in a C program embedded SQL statements
Date: Fri, 30 Oct 1992 16:51:12 GMT
Message-ID: <manhhoa.720463872_at_tdsb-s>
/*---- Initialisation ----*/
strcpy (code_ouvr.arr, code_ouv);
code_ouvr.len = strlen (code_ouvr.arr);
*exist_geo_base = 0;
*chainage_ok = 0;
/*---- Traitement ----*/
EXEC SQL WHENEVER SQLERROR GOTO err_s;
EXEC SQL DECLARE geo_base CURSOR FOR
SELECT geo.seq_geometrie, geo.azimut, geo.coordonnee_nord, geo.coordonnee_est, geo.chainage_debut, geo.chainage_fin, geo.rayon_section FROM gdat.geometrie_base geo WHERE geo.code_ouvrage = :code_ouvr ORDER BY geo.seq_geometrie; ************************************************************************* ************************************************************************* EXEC SQL OPEN geo_base; <<==== THE PROGRAM HAS BEEB STOPPED HERE FOR A LONG PERIOD OF TIME ************************************************************************* *************************************************************************
EXEC SQL WHENEVER NOT FOUND GOTO err_s;
while (1) /* Recherche des instruments */{
EXEC SQL FETCH geo_base INTO :seq_geometrie, :azimut_base,
:coord_nord, :coord_est, :chainage_debut, :chainage_fin, :rayon_section;
if ((chainage_debut <= chainage) && (chainage <= chainage_fin))
{
calcul (chainage, ecart_axe, coord_x_est, coord_y_nord);
azimut_prec = azimut_base; *chainage_ok = 1;
}
*exist_geo_base = 1;
}
err_s:
EXEC SQL CLOSE geo_base;
if ((sqlca.sqlcode != 1403) && (sqlca.sqlcode != 0)) {
printf ("** Erreur geo_base > %s.\n Contacter support technique\n", sqlca.sqlerrm.sqlerrmc); exit(1);
}
/*---- Data not found (sqlca.sqlcode = 1403) ----*/
if (*exist_geo_base && !*chainage_ok) {
printf ("Point: %s, %s, %f, %f %s\n", no_instrument, code_ouv, chainage, ecart_axe, "à l'intérieur d'aucune séquence géométrique"); return TRUE;
}
return FALSE;
}
BOOLEAN calcul (chainage, ecart_axe, coord_x_est, coord_y_nord)
double chainage, ecart_axe, *coord_x_est, *coord_y_nord;
{
if ((diff_chainage = chainage - chainage_debut) == 0)
diff_chainage = MIN_FLOAT;
if (rayon_section == 0)
{
/*---- Calcul de la distance ----*/
distance = sqrt(diff_chainage*diff_chainage + ecart_axe*ecart_axe);
/*---- Calcul de l'angle ----*/
if (ecart_axe > 0)
azimut = 90 - atan (diff_chainage / ecart_axe);
else
azimut = -90 - atan (diff_chainage / ecart_axe);
angle = azimut + azimut_base;
}
else
{
/*---- Calcul de la distance ----*/
long_courb_totale = chainage_fin - chainage_debut; long_courb_partielle = chainage - chainage_debut;
delta = (long_courb_totale * 360) / (2*PI*rayon_section); signe = 1; azimut_prec += 90; if ((azimut_base-PRECISION <= azimut_prec) && (azimut_prec <= azimut_base+PRECISION)) signe = -1; distance = rayon_section - (ecart_axe*signe);
/*---- Calcul de l'angle ----*/
angle = (delta * (long_courb_partielle / long_courb_totale)) * signe
+ azimut_base;
}
*coord_y_nord = coord_nord + (cos(angle) * distance); *coord_x_est = coord_est + (sin(angle) * distance); } Received on Fri Oct 30 1992 - 17:51:12 CET