1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
#include <stdio.h>
#include <ibase.h>
#include <string.h>
#include <stdlib.h>
#define USER "POLYSOUDE"
#define PASSWD "POLYSOUDE"
#define DB_NAME "localhost:/home/yme/tmp/test.fdb"
void db_print_error(ISC_STATUS *stat)
{
if (stat != NULL)
{
isc_print_status(stat);
printf("\nCode de l'erreur SQL:\n");
isc_print_sqlerror(isc_sqlcode(stat),stat);
}
}
int main(int argc, char **argv)
{
char param[256];
char *ptr_param;
int param_len;
isc_stmt_handle stmt = 0;
isc_tr_handle h_trans = 0;
ISC_STATUS stat[20];
isc_db_handle h_db = 0;
ptr_param = param;
*ptr_param++ = isc_dpb_version1;
*ptr_param++ = isc_dpb_user_name;
*ptr_param++ = strlen(USER);
strncpy(ptr_param, USER, strlen(USER)); //il ne faut pas copier le 0 de fin de chaine
ptr_param += strlen(USER);
*ptr_param++ = isc_dpb_password;
*ptr_param++ = strlen(PASSWD);
strncpy(ptr_param, PASSWD, strlen(PASSWD));
ptr_param += strlen(PASSWD);
param_len = ptr_param - param;
if (isc_attach_database(stat, 0, DB_NAME, &h_db, param_len, param))
// if (isc_attach_database(stat, 0, NOM_BASE, db, 0, NULL))
{
db_print_error(stat);
return 1;
}
char query[] = "SELECT nb FROM TOTO";
long nb;
XSQLDA *sqlda = (XSQLDA *) malloc(XSQLDA_LENGTH(1));
sqlda->sqln = 1;
sqlda->sqld = 1;
sqlda->version = SQLDA_VERSION1;
sqlda->sqlvar[0].sqldata = (char *)&nb;
sqlda->sqlvar[0].sqltype = SQL_LONG; //Le champ nom de la bdd ne peut pas contenir null. On ne vérifie donc pas si celui-ci est null.
if (isc_start_transaction(stat, &h_trans, 1, &h_db, 0, NULL))
{
db_print_error(stat);
return 1;
}
if (isc_dsql_allocate_statement(stat, &h_db, &stmt))
{
db_print_error(stat);
return 1;
}
if (isc_dsql_prepare(stat, &h_trans, &stmt, 0, query, 1, sqlda))
{
db_print_error(stat);
return 1;
}
if (isc_dsql_execute(stat, &h_trans, &stmt, 1, NULL))
{
db_print_error(stat);
return 1;
}
int res = 0;
do
{
res = isc_dsql_fetch(stat, &stmt, 1, sqlda);
if (res != 100 && res != 0) //Erreur. Lorsque res vaut 100, il n'y a plus de données à lire
db_print_error(stat);
else
if (res == 0)
printf("nb: %ld\n", nb);
} while (res == 0);
if (isc_dsql_free_statement(stat, &stmt, DSQL_close)) //on libère les données précédemment allouées
{
db_print_error(stat);
return 1;
}
if (isc_commit_transaction(stat, &h_trans))
{
db_print_error(stat);
return 1;
}
return 0;
} |
Partager