Coala, вот код:
| Код |
//Значение ячейки AnsiString table_themes; AnsiString table_category; AnsiString table_write; AnsiString table_id; AnsiString id; AnsiString x; AnsiString y; AnsiString page;
//Число проходов для выполнения операции сохранения в БД int kol_zap = 0; //Счетчик проходов int i = 0; //Временная переменная для округления результата до целого int temp = 0;
AnsiString sql1; AnsiString sql2; AnsiString sql4;
//Инициализация статусбара Form1->sStatusBar1->SimpleText = "Сохранение"; //Сбрасываем прогрессбар Form1->sGauge1->Progress = 0;
if(Form1->sListBox1->ItemIndex != -1){ //Выбираем таблицы с которыми будем работать if(exist_form_search[Form1->sListBox1->ItemIndex].company == 1) {
table_themes = "THEMES_1"; table_category = "CATEGORY_1"; table_write = "WRITE_1"; table_id = "GEN_WRITE_1"; } else {
table_themes = "THEMES_2"; table_category = "CATEGORY_2"; table_write = "WRITE_2"; table_id = "GEN_WRITE_2"; } } else { if(company[Form1->sComboBox1->ItemIndex] == 1) { //ТУ table_themes = "THEMES_1"; table_category = "CATEGORY_1"; table_write = "WRITE_1"; table_id = "GEN_WRITE_1"; } else { //ФГУЗ table_themes = "THEMES_2"; table_category = "CATEGORY_2"; table_write = "WRITE_2"; table_id = "GEN_WRITE_2"; } }
//Выбока категорий (столбцы таблицы) sql1 = "SELECT * FROM " + table_category + " WHERE CELL > 0"; Form1->IBQuery1->SQL->Clear(); Form1->IBQuery1->SQL->Add(sql1); Form1->IBQuery1->Open();
//Выборка тем (строки таблицы) sql2 = "SELECT * FROM " + table_themes + " ORDER BY \"PAGE\""; Form1->IBQuery2->SQL->Clear(); Form1->IBQuery2->SQL->Add(sql2); Form1->IBQuery2->Open();
Form1->IBQuery1->FetchAll(); Form1->IBQuery2->FetchAll();
//Считаем количество операции для завершения редактирования(для прогрессбара) kol_zap = Form1->IBQuery1->RecordCount * Form1->IBQuery2->RecordCount;
while(!Form1->IBQuery2->Eof){ Form1->IBQuery1->First();
while(!Form1->IBQuery1->Eof){ //Запись значений в БД //Выбираем лист, ячейку, страницу из которой считываем
page = Form1->IBQuery2->operator []("PAGE"); y = Form1->IBQuery1->operator []("CELL"); x = Form1->IBQuery2->operator []("CELL");
sheet = sheets.OlePropertyGet("Item",StrToInt(page));
cells = sheet.OlePropertyGet("Cells").OlePropertyGet("Item",StrToInt(x),StrToInt(y));
//!!!!!!!!!! Вот этот кусок кода не хочет работать коректно !!!!!!!!!!111
sql4 = "UPDATE " + table_write; sql4 += " SET VAL = "; if(AnsiString(cells.OlePropertyGet("Value")) == "") sql4 += "0"; else sql4 += AnsiString(cells.OlePropertyGet("Value")); sql4 += " WHERE CATEGORY = " + y; sql4 += " AND "; sql4 += "THEMES = " + x; sql4 += " AND "; sql4 += "COMPATIBILITY = " + AnsiString(exist_form_search[temp_id].id);
Form1->IBQuery4->SQL->Clear(); Form1->IBQuery4->SQL->Add(sql4); Form1->IBQuery4->ExecSQL();
//Здесь работаем с прогрессбаром i += 1; temp = (i*100)/kol_zap; Form1->sGauge1->Progress = temp;
Form1->IBQuery1->Next(); } Form1->IBQuery2->Next(); }
Form1->IBQuery1->Close(); Form1->IBQuery2->Close(); Form1->IBTransaction1->Commit(); Form1->IBQuery4->Close();
//Убираем надпись со статусбара Form1->sStatusBar1->SimpleText = ""; MessageBox(0, "Форма успешно отредактирована", "Редактирование", MB_OK);
|
IBQuery1, IBQuery2, IBQuery4 не именованы потому, что выполняют несколько действий. Так что за ненаглядность кода извиняйте. |