Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BCB6 + FireBird 1.5, Не работает UPDATE 
V
    Опции темы
Oberon83
Дата 13.11.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

Репутация: 1
Всего: 1



Мне необходимо забирать данные с Excel формы, с которой я работаю из окна своего приложения через контайнер OLE. При сохранении данных проблем нет - данные в базу садятся корректно, но при редактировании этих данных - запрос UPDATE не проходит - данные остаются теми же. Для записи и редактирования данных используется несколько запросов, т.е. сначала выбирается 2 параметра (2 разных запроса) для результирующей записи, а потом вместе с этими данными запись садится в базу. 
Может быть проблема в том что используется несколько запросов?
Запрос на UPDATE таблицы правильный, поскольку проверял его в самой БД, а вот из приложения он работает некорректно.
В чем может быть дело?
Заранее благодарен.
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
Coala
Дата 13.11.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.5.2006
Где: Москва

Репутация: нет
Всего: 0



Трудно что-либо советовать не видя твоего кода
PM MAIL   Вверх
Oberon83
Дата 13.11.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

Репутация: 1
Всего: 1



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 не именованы потому, что выполняют несколько действий. Так что за ненаглядность кода извиняйте.

Это сообщение отредактировал(а) Oberon83 - 13.11.2006, 15:26
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
Coala
Дата 13.11.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.5.2006
Где: Москва

Репутация: нет
Всего: 0



Вроде ошибок нет...НО! (наступал я на такие грабли) - у тебя в условии выборки - 3 сравнения. Попробуй такую фишку (скобки):
Код

                sql4 += " WHERE (CATEGORY = " + y + ")";
                sql4 += " AND ";
                sql4 += "(THEMES = " + x + ")";
                sql4 += " AND ";
                sql4 += "(COMPATIBILITY = " + AnsiString(exist_form_search[temp_id].id + ")");

PM MAIL   Вверх
Oberon83
Дата 13.11.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

Репутация: 1
Всего: 1



Разобрался - глюки BCB, поскольку он у меня вообще упал, а после переустановки - все нормально работает. Так что извиняюсь.
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0974 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.