PDA

View Full Version : خطای can not perform this operation



farzane_fn
چهارشنبه 22 مهر 1388, 15:22 عصر
دوستای گلم سلام. توی برنامم از adoconnection و adoquery استفاده می کنم.هنگام اضافه کردن یک رکورد به بانک این خطا ظاهر می شه:

can not perform this operation on a closed dataset
چی کار باید بکنم؟ کدی که برای اضافه کردن رکورد به بانک نوشتم اینه:



Adoquery1.active:=false;
Adoquery1.sql.clear;
Adoquery1.sql.text:='insert into tablename…';
Adoquery1.execsql;

لطفا راهنمایی کنین..

Mahmood_M
چهارشنبه 22 مهر 1388, 16:20 عصر
نباید ADOQuery رو غیر فعال کنید ، باید Close کنید ! :

Adoquery1.Close;
Adoquery1.sql.clear;
Adoquery1.sql.text:='insert into tablename…';
Adoquery1.execsql;

موفق باشید ...

merced
چهارشنبه 22 مهر 1388, 16:50 عصر
از ADOCommand استفاده كن

farzane_fn
چهارشنبه 22 مهر 1388, 18:01 عصر
از ADOCommand استفاده كن
چه جوری؟می شه بیشتر توضیح بدین؟..

merced
چهارشنبه 22 مهر 1388, 18:20 عصر
ADOCommand


The TADOCommand component executes the command specified in its CommandText property. One command may be executed at a time. Parameters, if the command includes them, are specified in its Parameters property. The command is executed by a call to the Execute method.

TADOCommand is most often used for executing data definition language (DDL) SQL commands or to execute a stored procedure that does not return a result set. For SQL statements that return a result set, TADODataSet, TADOQuery, or TADOStoredProc is better suited. The Execute method of TADOCommand is, however, capable of returning a recordset. To use that recordset, however, you will need a separate ADO dataset component.


ADOCommand يا ADODataset فرق آنچناني نمي كنند. ولي ADOCommad متدOpen ‌يا Active نداره فقط Execute ميشه

vcldeveloper
چهارشنبه 22 مهر 1388, 21:21 عصر
نباید ADOQuery رو غیر فعال کنید ، باید Close کنید !
Close کردن یک Dataset معادل False کردن خصوصیت Active آن هست، و اثر دیگه ایی نداره!

farzane_fn
چهارشنبه 22 مهر 1388, 22:31 عصر
Close کردن یک Dataset معادل False کردن خصوصیت Active آن هست، و اثر دیگه ایی نداره!
آیا open کردن adoquery هم معادل true کردن خاصیت active آن هست؟ اگه ممکنه در این مورد کمی توضیح بدین.با تشکر..

farzane_fn
چهارشنبه 22 مهر 1388, 22:35 عصر
ADOCommand


The TADOCommand component executes the command specified in its CommandText property. One command may be executed at a time. Parameters, if the command includes them, are specified in its Parameters property. The command is executed by a call to the Execute method.

TADOCommand is most often used for executing data definition language (DDL) SQL commands or to execute a stored procedure that does not return a result set. For SQL statements that return a result set, TADODataSet, TADOQuery, or TADOStoredProc is better suited. The Execute method of TADOCommand is, however, capable of returning a recordset. To use that recordset, however, you will need a separate ADO dataset component.


ADOCommand يا ADODataset فرق آنچناني نمي كنند. ولي ADOCommad متدOpen ‌يا Active نداره فقط Execute ميشه
منظورتون از adodataset چیه؟ من با adoquery کار می کنم.اگه ممکنه توضیح بدین.با تشکر..

young_man1365
چهارشنبه 22 مهر 1388, 23:20 عصر
تا جایی که من دیدم open کردن ، یه dataset غیر فعال رو فعال میکنه. execsql هم در حالت باز یا بسته بودن dataset عمل میکنه. همون کدی که تو پست اول نوشتین مشکلی نداره... واسه اطمینان میتونی تو یه فرم جدا این کد رو تست کنی. بهتره بهproperty هایی که واسه adoquery , datasource و .... تنظیم کردی توجه کنی.

در ضمن کامپوننت های table و query هر کدام یه جور dataset هستند

vcldeveloper
پنج شنبه 23 مهر 1388, 03:42 صبح
آیا open کردن adoquery هم معادل true کردن خاصیت active آن هست؟ اگه ممکنه در این مورد کمی توضیح بدین.با تشکر..
بله، Open کردن یک Dataset معادل True کردن خصوصیت Active آن هست.


منظورتون از adodataset چیه؟ من با adoquery کار می کنم.اگه ممکنه توضیح بدین.با تشکر..
همه کلاس های نگهدارنده داده بانک اطلاعاتی در دلفی (مثل TTable, TQuery, TAdoTable, TAdoQuery, TClientDataset و غیره) از یک کلاس پایه به نام TDataset مشتق میشند. این کلاس عملکردهای پایه ایی بانک اطلاعاتی را در اختیار برنامه نویس قرار میده، برای همین هم در همه این کلاس ها شما متدهایی مثل Next, Locate, Eof, Open, Close, Edit, Post, Cancel، و غیره را مشاهده می کنید. به این کلاس های نگهدارنده داده بانک اطلاعاتی اصطلاحا Dataset گفته میشه.

این کلاس ها ممکن هست از تکنولوژی های مختلفی برای اتصال به بانک استفاده کنند، مثل BDE, ADO, DBX، و غیره.

در ADO، کلاس اصلی ADODataset بوده، ولی از آنجایی که قبل از ADO برنامه نویسان دلفی از BDE استفاده می کردند و به کار با آن عادت کرده بودند، و در BDE یک کلاس TTable برای کار با داده های یک جدول، و TQuery برای کار با یک کوئری وجود داشت، برای راحتی انتقال پروژه ها از BDE به ADO، کلاس هایی با نام و قابلیت های مشابه TTable و TQuery برای ADO ایجاد شدند، با نام های TAdoTable و TAdoQuery.