void dump_ole(MdbTableDef *table, char *colname, char *sargname) { char ole_data[200000]; int len; MdbSarg sarg; char *sargcol, *sargop, *sargval; mdb_bind_column_by_name(table, colname, ole_data, &len); if (sargname) { sargcol = strtok(sargname," "); sargop = strtok(NULL," "); sargval = strtok(NULL," "); printf("col %s op %s val %s\n",sargcol,sargop,sargval); sarg.op = MDB_EQUAL; /* only support = for now, sorry */ strcpy(sarg.value.s, sargval); mdb_add_sarg_by_name(table, sargcol, &sarg); } mdb_rewind_table(table); while (mdb_fetch_row(table)) { mdb_buffer_dump(ole_data, 0, len); printf("---\n"); } }
void print_table(MdbTableDef *table) { int j; /* doesn't handle tables > 256 columns. Can that happen? */ char *bound_values[256]; MdbColumn *col; MdbSarg sarg; mdb_read_columns(table); sarg.op = MDB_EQUAL; // sarg.value.i = 11070; strcpy(sarg.value.s, "Reggiani Caseifici"); mdb_add_sarg_by_name(table, "ShipName", &sarg); mdb_rewind_table(table); for (j=0;j<table->num_cols;j++) { bound_values[j] = (char *) g_malloc(MDB_BIND_SIZE); bound_values[j][0] = '\0'; mdb_bind_column(table, j+1, bound_values[j], NULL); } /* print header */ col=g_ptr_array_index(table->columns,0); fprintf(stdout,"%s",col->name); for (j=1;j<table->num_cols;j++) { col=g_ptr_array_index(table->columns,j); fprintf(stdout,"%s%s",DELIMETER,col->name); } fprintf(stdout,"\n"); /* print each row */ while(mdb_fetch_row(table)) { fprintf(stdout,"%s",bound_values[0]); for (j=1;j<table->num_cols;j++) { fprintf(stdout,"%s%s",DELIMETER,bound_values[j]); } fprintf(stdout,"\n"); } /* clean up */ for (j=0;j<table->num_cols;j++) { g_free(bound_values[j]); } }