C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проблемы со вставкой
Гость_VainahskiyPapa
  Отправлено: 26.09.2003, 11:21


Не зарегистрирован







Здравствуйте.
Скажите пожалуйста как решить след проблему:
Данный код работает для экспортирование текстовых и других баз данных в общую оракловскую или mdb базу, но для excel — вских таблиц происходит ошибка Access Violation on address FFFFFF... и интересно то что если я вторично пропустив ошибку буду экспортить не перекомпилируя приложения заново — никакой ошибки не возникает и вставляет нормально. Когда я содержание цикла комментирую ошибка не вылазит но от этого не легче данные то не всавляются:). Подскажите чего нибудь пожалуйста. Может он с excel-em адрес какой делит а после того как ошибка пройдет уже не делит — я в этом плохо разбираюсь подскажите пожалуйста.

CODE


try{
      App.OlePropertyGet("WorkBooks",1).OleProcedure("Close");
      }catch(...){
         ShowMessage("Don't forget to close excel by yourself");
     }
 Sh.Clear();    // releases excel sheets and Applications
 App.Clear();



for (int i=1; i<rows; i++, DM->Table1->Next())        // inserting rows into db
 {
     /*  TLocateOptions SearchOptions;
       bool same_rec=false;
       AnsiString empty_rec="";

       Variant loc[]={A[i][1],A[i][2],A[i][3],A[i][4],A[i][5],A[i][6],A[i][7],A[i][8],A[i][9],A[i][10],A[i][11],A[i][12],A[i][13]};
       same_rec=DM->Table1->Locate("rnn;organiz;comp;oblast;region;loc;street;building;flat;fname;sname;lname;status", VarArrayOf(loc,12), SearchOptions);
       empty_rec=((Trim(A[i][1]+A[i][2]+A[i][3]+A[i][4]+A[i][5]+A[i][6]+A[i][7]+A[i][8]+A[i][9]+A[i][10]+A[i][11]+A[i][12]+A[i][13])));

   if ((!same_rec)&&(empty_rec!="")){
   DM->Table1->Last();
   DM->Table1->Insert();
   int count_field=1;

   while (count_field<num_fields_excel_db)
   {
   DM->Table1->Fields->Fields[count_field]->AsString=A[i][count_field];
   count_field++;
   }

   }    */
  }

delete[] A;



Отредактировано Admin — 26/09/2003, 22:03
Георгий
Отправлено: 26.09.2003, 19:24


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



А если не секрет, то где объявление и выделение памяти под массив A? Кстати отладчиком в режиме пошаговой отладки пользоваться не пробовали — он обычно очень хорошо помогает в таких алгоритмах несуразности найти.
Admin
Отправлено: 26.09.2003, 21:11


Владимир

Группа: Администратор
Сообщений: 1190



А мне не совсем понятно, где после перевода таблицы
в режим вставки DM->Table1->Insert();
стоит подтверждение вставки DM->Table1->Post();
или отмена DM->Table1->Cancel();

---

И не совсем понял, как это вставляется, если вы постоянно
переводите записи таблицы на разные места в таблице
и зачем:

CODE

for (int i=1; i<rows; i++, DM->Table1->Next())
{
...
same_rec=DM->Table1->Locate
...
DM->Table1->Last();
DM->Table1->Insert();
...
}


Отредактировано Admin — 26/09/2003, 22:14

Вернуться в Работа с базами данных в C++Builder