bool Db_Base::Input_Record (void) { if (File_Format () == SQLITE3) { int i, j, num, lvalue, result; const unsigned char *text; double dvalue; Db_Field *fld; //---- get the next record ---- if (Nested ()) { if (new_nest_flag) { new_nest_flag = false; sqlite3_reset (read_nest); sqlite3_bind_int (read_nest, 1, parent_id); } result = sqlite3_step (read_nest); } else { Record_Number (0); parent_id = Record_Number (); new_nest_flag = true; sqlite3_reset (read_stmt); sqlite3_bind_int (read_stmt, 1, parent_id); result = sqlite3_step (read_stmt); } if (result == SQLITE_DONE) return (false); if (result != SQLITE_ROW) { exe->Warning ("SQLITE3 Read Problem: ") << sqlite3_errmsg (db_file); } num = Num_Fields (); for (i=0, j=0; i < num; i++) { fld = Field (i); if (Nested () != fld->Nested ()) continue; if (Nested ()) { if (fld->Type () == DB_INTEGER) { lvalue = sqlite3_column_int (read_nest, j+1); Put_Field (i, lvalue); } else if (fld->Type () == DB_DOUBLE) { dvalue = sqlite3_column_double (read_nest, j+1); Put_Field (i, dvalue); } else { text = sqlite3_column_text (read_nest, j+1); Put_Field (i, (char *) text); } } else { if (fld->Type () == DB_INTEGER) { lvalue = sqlite3_column_int (read_stmt, j); Put_Field (i, lvalue); } else if (fld->Type () == DB_DOUBLE) { dvalue = sqlite3_column_double (read_stmt, j); Put_Field (i, dvalue); } else { text = sqlite3_column_text (read_stmt, j); Put_Field (i, (char *) text); } } j++; } } else if (File_Format () == CSV_DELIMITED) { Strings fields; Db_Field *fld; int count = String (Record_String ()).Parse (fields, Delimiters ()); for (int i=0; i < Num_Fields (); i++) { fld = Field (i); if (Nested () == fld->Nested ()) { if (fld->Offset () <= count) { fld->Buffer (fields [fld->Offset () - 1]); } else { fld->Buffer (""); } } } } return (true); }