PDA

View Full Version : سوال: خطا:dataset not in edit or insert؟



tik_tak
پنج شنبه 18 مهر 1387, 21:19 عصر
با سلام
من این خطاروتوسایت جستجو کردم ولی جوابهایی که بود مشکلمو حل نکرد
یه هویی یکی از جدولام اینجوری شد ، اینزرت میکنه ولی این خطارو هم میده
تو جدولایه دیگه م به خوبی اینزرت صورت میگیره ولی نمیدونم چرا وقتی اومدم تو پایگاه داده م تو اس کیو ال یه فیلد به جدولم اضافه کردم بعدش تو دلفی اومدم و اینزرت کردم حالا این خطا میاد ؟؟؟؟؟؟؟؟؟؟؟؟
کسی میدونه چرا؟

تویکی از تایپیک ها نوشته بود واسه حل این مشکل جدولارو repair کنید...
میشه بگید چه جوری؟

tik_tak
پنج شنبه 18 مهر 1387, 23:44 عصر
تا حدودی فهمیدم چه جوری این خطا از بین میره
من تو قسمت اینزرت ، یعنی موقعی که دارم فیلدهای مربوط به یه سطر از جدول رو پر میکنم ، یه تابع رو فراخوانی میکردم وقتی این فراخوانی رو پاک میکنم دیگه ارور نمیده


datamadoul1.adotable1.insert;
datamadoule1.adotable1.fieldbyname[id].asinteger:=....
.
.
.
فراخوانی تابع s
if s()=true then
.
.
datamadoule1.ado_table1.post;


ولی وقتی این خط قرمزرو پاکش میکنم اون ارور نمیاد ...
چرا اینجوری میشه؟؟؟؟؟؟؟؟؟؟

ghabil
جمعه 19 مهر 1387, 14:21 عصر
خب احتمالا داری توی تابعت یا جدول رو پست یا کنسل یا Next میکنی خلاصه یک کاری میکنی که جدول از مود Insert یا ادیت خارج میشه ، حالا اگر خودت پیداش نکردی متن تابع رو بزار ما یک نگاهی بندازیم.
ضمنا میتونی بجای اون Post از CheckBrowseMode استفاده کنی ، مشکل خطا رو حل میکنه ولی ممکنه برنامت هنوز از نظر سمانتیک مشکل داشته باشه .

راستی نیازی هم نیست اینطوری بنویسی


...if s() = true then


اینطوری کافیه


if S() then ...

چون به هر حال خروجی S یک مقدار بولین هست

SYNDROME
جمعه 19 مهر 1387, 15:52 عصر
مقدار ADO.State را قبل از ورود به تابع چک کن که احتمالا dsInsert و dsEdit است.
هر کجا مقدار State تغییر کرد آن خط باعث می شود DataSet شما از حالات فوق خارج شود و بروز اشکال کند.
موفق باشید

hadisalahi2
جمعه 19 مهر 1387, 18:52 عصر
من هم زیاد با این خطا مواجه شدم. به احتمال زیاد شما جدولتون رو Open یا Active نکردید.
یا حق

tik_tak
جمعه 19 مهر 1387, 23:26 عصر
با تشکر ازهمه
این اون تابع ست که میگفتم :


function Tf_form1.s():boolean;
var
b:boolean;
a:integer;
begin
with DataModule1.adotable2 do
begin
close;
open;
last;
a:=DataModule1.adotable2.FieldValues['id'];
end;
if DataModule1.adotable3.Locate('id',a,[]) then
b:=DataModule1.adotable3.FieldValues['kind'];
s:=b;
end;




مقدار ADO.State را قبل از ورود به تابع چک کن که احتمالا dsInsert و dsEdit است

چه جوری چک کنم ؟ دستور خاصی داره؟

hadisalahi2
سه شنبه 23 مهر 1387, 20:05 عصر
If Ado.State=dsInsert then begin
....
end;