Гость_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
|
|
|