Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: -0.985 c
14-83001
Drova
2002-11-06 23:13
2002.11.25
Что такое одноранговая сеть ?


3-82608
NiBL
2002-11-05 09:28
2002.11.25
Помогите с DBEdit !!!


1-82746
Sectey
2002-11-15 11:20
2002.11.25
Организация MDI проектов или меню, толбары в MDI приложениях.


6-82891
kostya2000
2002-09-16 23:48
2002.11.25
Люди кто знает где найти доку по сетям?


1-82702
dravida
2002-11-14 17:42
2002.11.25
как узнать что мышь покинула форму?




   Наверх