Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Вниз

Table(s) open. Cannot perform this operation. - Почему?   Найти похожие ветки 

 
Fishka   (2002-11-01 16:15) [0]

Такая ошибка иногда возникает при удалении или добавлении записей в одну из таблиц БД. Все Table и Query закрыты.
Нажимаешь ОК, и программа продолжает работать. Никаких видимых ошибок вроде бы не происходит. Но необходимо, чтобы программа могла удалять и/или добавлять записи без вмешательства оператора, да и вообще это сообщение неприятно.
Что делать? (Backup/restore не помогло).


 
Johnmen   (2002-11-01 16:24) [1]

БД здесь непричем...Ошибка в программе...


 
Fishka   (2002-11-01 16:29) [2]

Допустим, надо добавить 200 записей.
На какой-нибудь 150 выдается это сообщение, нажимаю ОК, и программа продолжает работать, запись вносится. Ничего криминального в данной конкретной записи я не вижу.
ЧТО ДЕЛАТЬ?


 
Johnmen   (2002-11-01 16:44) [3]

А как добавляются записи ?


 
Fishka   (2002-11-01 16:56) [4]

Insert into ....


 
Johnmen   (2002-11-01 17:05) [5]

А просто кусок кода ?


 
Fishka   (2002-11-04 11:06) [6]

Ошибка возникает непредсказуемо. Проводили эксперимент с одной и той же порцией данных. Ошибка возникает в разных местах или вообще не возникает. Но всегда с одной и той же таблицей. Количество записей в таблице больше 1 млн.
Кусок кода приводить не имеет смысла, т.к. Insert через параметры и в цикле.


 
Alexandr   (2002-11-04 11:19) [7]

решать проблему здесь вообще не имеет смысла, т.к. вопрошавший рано или поздно решит ее сам... или не решит...


 
Snake   (2002-11-04 12:29) [8]

Возможно, может быть процессор не успевает обрабатывать события на уровне БД. А что, если ставить где-нить задержку? Хотя с подобным сталкиваюсь впервые. Обычно, оно, либо работает вседа - либо не работает вовсе ;-)


 
Alexandr   (2002-11-04 12:32) [9]

ага, электроны спотыкаются на данных в базе данных.


 
elv   (2002-11-04 15:02) [10]


> Fishka (01.11.02 16:15)

Ошибка в твоем коде.



 
Fishka   (2002-11-04 17:12) [11]

А что конкретно означает это сообщение?
Почему, например, не "Table is busy"?


 
Anatoly Podgoretsky   (2002-11-04 17:19) [12]

Выявяляются новые подробности. Таблица занята


 
Fishka   (2002-11-04 17:29) [13]

"Table is busy" - таблица занята (но у меня НЕТ такого сообщения).
"Table(s) open." - ? (это то, что у меня).
Чем отличаются эти ошибки?


 
Anatoly Podgoretsky   (2002-11-04 17:34) [14]

Извиняюсь,я не внимательно прочитал последнее сообщение


 
Fishka   (2002-11-04 17:45) [15]

Бог с ними, с извинениями.
А мысли какие-нибудь есть по данному вопросу?


 
VAleksey   (2002-11-05 06:45) [16]

Код давай...
И насчет задержки тоже не отмахивайся. Электроны, конечно не спотыкаются, но винда может всбрыкнуть при вставке записей в цикле.


 
Fishka   (2002-11-05 09:28) [17]

Это одно из мест, где возможна эта ошибка. (Но программа выдает ошибку на разных вставляемых записях.В данных ошибок нет!! Иногда на той же порции данных может ошибку не выдавать.)

with DataBaseA,Q3 do
begin
Close;
SQL.Clear;
Q3.DatabaseName:=DataBaseA.DatabaseName;
if Prepared then UnPrepare;
Params.Clear;
SQL.Add("insert into "+name_table);
str1:=""; str2:="(";
for i:=0 to StrListFields.Count-1 do
begin
str1:=str1+StrListFields[i]+iif_s(i=StrListFields.Count-1,"",",");
str2:=str2+":p_"+StrListFields[i]+iif_s(i=StrListFields.Count-1,"",",");
//+inttostr(i)+iif_s(i=StrListFields.Count-1,"",",");
end;
SQL.Add("("+trim(str1,3)+")");
SQL.Add("values "+str2+")");
Prepare;

while not Q1.eof do
begin
inc(rr);
if rr mod 50=0 then
begin
Application.ProcessMessages;
FormLoad.Refresh;
end;

StartTransaction;
for i:=0 to Q1.FieldCount-1 do
begin
mPole:=Q1.Fields[i].AsString;
if not Q1.Fields[i].IsNull then
case Q1.Fields[i].DataType of
ftSmallint,ftInteger,ftWord: Params[i].Value:=strtoint(mPole);
ftFloat,ftBCD: Params[i].Value:=strtofloat(mPole);
ftString: Params[i].Value:=mPole;
ftDateTime,ftDate: Params[i].Value:=strtodate(mPole);
end {case}
else Params[i].DataType:=Q1.Fields[i].DataType;
end; {for i}
try
SBar.Panels[1].Text:=inttostr(rr);
SBar.Panels[2].Text:="";
ExecSQL;

inc(z_true);
Commit;
except
on E: Exception do
begin
WriteError(E.Message,mFile);
inc(z_false);
Rollback;
end; {do}
end; {try}
Q1.Next;
end; {while not eof}
end;
Q1.Close;


 
KoluChi   (2002-11-05 10:22) [18]

Такая ошибка возникает, возможно, из-за того что запрос остается открытым во время Prepare/Unprepare.

with DataBaseA,Q3 do
begin
Close; {DataBaseA.Close or Q3.Close ????}

Но это только предположение, надо ставить breakpointы и тестировать.


 
Fishka   (2002-11-05 11:17) [19]

В любом случае в результате будет Q3.Close.


 
KoluChi   (2002-11-05 12:03) [20]

А ты попробуй

with DataBaseA,Q3 do
begin
Close;
if Q3.Active then ShowMessage("Q3 is open!");

Если я не прав, то помешать не должно.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.027 c
14-82925
BJValentine
2002-11-05 15:19
2002.11.25
Хелп, плиз!!!


1-82687
valerij
2002-11-14 15:21
2002.11.25
пример


1-82705
Arkan
2002-11-12 23:05
2002.11.25
2 вопроса.


3-82657
Dbrf
2002-11-06 14:14
2002.11.25
Фильтрация данных


14-82963
LeViSSSS
2002-11-06 13:57
2002.11.25
SOS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский