PDA

View Full Version : سوال: سوال :: ارور در کار با sql server در دلفی



me.enik
سه شنبه 09 خرداد 1391, 10:32 صبح
سلام.

من یه برنامه نوشتم با دلفی که از sql server استفاده میکنه.
حالا سر یه ارور گیر کردم و موندم که چی کارش باید بکنم.
این ارور رو زمانی میگیرم که از این دستور استفاده میکنم :
adotable1.delete;
حالا من برای چی از اون دستور استفاده میکنم؟
برای اینکه میخوام مثلا یه ریکورد رو پاک کنم.
عکس اروری رو هم که میده رو ضمیمه کردم, ممنون میشوم کمکم کنید.
پیشاپیش تشکر میکنم.
راستی, خیلی بهش احتیاج دارم, ممنون میشوم سریع تر کارم رو راه بندازید.

87614

hossein_h62
سه شنبه 09 خرداد 1391, 10:57 صبح
سلام
کنترل کنید که فیلدی از رکوردی که داره حذف میشه با فیلد جدول دیگه ارتباط داره یا نه.

سعید صابری
سه شنبه 09 خرداد 1391, 15:23 عصر
فکر کنم باید یک فبلد id اضافه کنی.(جدولت primary key نداره)

me.enik
سه شنبه 09 خرداد 1391, 18:50 عصر
سلام.
کار هر دوتا کاری که گفتید رو انجام دادم, نشد که نشد.

یعنی یه جدول دیگه داشتم, برای اینکه یقین حاصل کنم, کلا پاکش کردم.
درست نشد.

در مورد اون هم که سعید صابری گفتند, به یه مشکلی بر خوردم که سعی میکنم سریع تر حلش کنم و بعدش نتیجه رو اعلام کنم و در نهایت باز مظاحم همتون بشم.

اینم اون مشکلم که اگر شما هم میتونید کمکم کنید, ممنون میشوم.
مشکل (http://barnamenevis.org/showthread.php?343751-%D8%A7%D8%B1%D9%88%D8%B1-%D8%B3%DB%8C%D9%88-%DA%A9%D8%B1%D8%AF%D9%86-sql-server&p=1515754#post1515754)

tiphooo
چهارشنبه 10 خرداد 1391, 01:29 صبح
اگر در یک جدول دو رکورد کاملا هم شکل وجود داشته باشد در حذف آن بعضا این مشکل پیش می اید
اگر جدول PrimeryKey نداشته باشد بعضا این مشکل پیش می آید
اگر جدول PrimeryKey نداشته و از دستور Refresh استفاده کنید بعضا این مشکل پیش می آید
اگر از تریگری استفاده می کنید بعضا به دلیل تداخل این مشکل پیش می آید
و با توجه به آظهارات آقای صابری بیشتر اینها به نداشتن کلید اصلی بر می گردد
و به ارتباط جداول مربوط نیست خطای ارتباط جداول بسیار واضح بوده و حتی به فیلد مورد نظر هم اشاره می کند

me.enik
چهارشنبه 10 خرداد 1391, 14:32 عصر
ممنون.
ولی من پرس و جو کردم, گفتند که از اون دستور نباید استفاده کنم.
دستور دیگه ای وجود داره که بشه از اون استفاده کرد؟
یا روش دیگه ای؟

firststep
چهارشنبه 10 خرداد 1391, 14:47 عصر
دوست عزیز کاشکی پروژتون رئ می زاشتین بهتر راهنماییتون می کردیم

hossein_h62
چهارشنبه 10 خرداد 1391, 14:48 عصر
دستور دیگه ای وجود داره که بشه از اون استفاده کرد؟
یا روش دیگه ای؟
اگه بانکتون SQL Server هستش از Stored Procedure استفاده کنید.ضمنا برای دستورات ساده تر از AdoCommand هم میتونی استفاده کنی.
Delete From Table Where ...

me.enik
چهارشنبه 10 خرداد 1391, 15:00 عصر
دوست عزیز کاشکی پروژتون رئ می زاشتین بهتر راهنماییتون می کردیم

ها!!؟
منظروتون این هستش که بزارمش تا ببینید.

آخه هیچ چیز شاخی نیستش پروژم.
چند تا tedit داره که با استفاده از adotable, مقادیر اونها رو توی database ذخیره میکنم.
ولی الآن میخوام پاک کنم, نمیشه.

اگر همچنان میخواهید که پروژه رو ببینید, چشم, قرار میدهم.
فقط خبر کنید.

me.enik
چهارشنبه 10 خرداد 1391, 15:03 عصر
اگه بانکتون SQL Server هستش از Stored Procedure استفاده کنید.ضمنا برای دستورات ساده تر از AdoCommand هم میتونی استفاده کنی.
Delete From Table Where ...

خیلی ممنون.
ولی میشه یه کم adocommand رو بیشتر توضیج بدید.
دقیقا باید از چه دستوری استفاده کنم؟
منظورم با استفاده از adocommand هستش.

hossein_h62
چهارشنبه 10 خرداد 1391, 16:15 عصر
خیلی ممنون.
ولی میشه یه کم adocommand رو بیشتر توضیج بدید.
دقیقا باید از چه دستوری استفاده کنم؟
منظورم با استفاده از adocommand هستش.
1- اول یک شی ADOCommand روی فرمتون قرار بدین و خاصیت Connection اون رو به ADOConnection مربوطه تنظیم کنید.
2-دستور TSQL مورد نظر رو به خاصیت Commandtext شی ADOCommandبریزید.
3-اجرای دستور ADOCommand
مثلا :
ADOCommand1.CommandText:='';
ADOCommand1.CommandText:='Delete From MyTable where TId=9';
ADOCommand1.Execute;

me.enik
چهارشنبه 10 خرداد 1391, 19:32 عصر
1- اول یک شی ADOCommand روی فرمتون قرار بدین و خاصیت Connection اون رو به ADOConnection مربوطه تنظیم کنید.
2-دستور TSQL مورد نظر رو به خاصیت Commandtext شی ADOCommandبریزید.
3-اجرای دستور ADOCommand
مثلا :
ADOCommand1.CommandText:='';
ADOCommand1.CommandText:='Delete From MyTable where TId=9';
ADOCommand1.Execute;

واقعا ممنون.
مرسی.
درسته, همین کار رو باید میکردم.

ولی حالا یه سوال دیگه.
وقتی این کار رو میکنم, برای اینکه نتایج دیده بشوند ( dbgrid ), باید یه بار برنامه رو ببندم و دوباره باز کنم!!
ولی میدونم که یه دستوری وجود داره که اون نتایج رو بعد از تغییر, بلافاصله نشون بده.

من دقیقا دارم چی کار میکنم ::
یه باتن دارم که این کد توش هستش :

ADOCommand1.CommandText:='';
ADOCommand1.CommandText:='Delete From MyTable where TId=9';
ADOCommand1.Execute;



حالا باید یه کد به اون اضافه کنم که کاری رو که گفتم رو انجام بده.
ولی حالا چه کدی!!؟

tiphooo
چهارشنبه 10 خرداد 1391, 20:18 عصر
شما اگر از Query برای نمایش اطلاعات در گرید استفاده کرده اید با دستور ADOQuery.ReQuery() می توانی اطلاعات را Refresh کنی که سرعتش از بقیه حالات از نظر من بیشتر است
یعنی بعد از حذف این کار را انجام دهی
در ضمن در خود DBGrid با Ctrl+Del می توانی رکوردت را حذف کنی اگر قصد شما حذف یک رکورد است

me.enik
چهارشنبه 10 خرداد 1391, 20:48 عصر
شما اگر از Query برای نمایش اطلاعات در گرید استفاده کرده اید با دستور ADOQuery.ReQuery() می توانی اطلاعات را Refresh کنی که سرعتش از بقیه حالات از نظر من بیشتر است
یعنی بعد از حذف این کار را انجام دهی


نه, از query استفاده نمیکنم.
توصیه میکنید که از query استفاده کنم؟
اصلا query چه فایده ای داره و باهاش چه کارهایی میشود کرد؟
راه دیگه ای وجود نداره؟



در ضمن در خود DBGrid با Ctrl+Del می توانی رکوردت را حذف کنی اگر قصد شما حذف یک رکورد است

درسته, حق با شماست.
ولی بالاخره باید دستوری هم وجود داشته باشه که اون کار رو انجام بده.
الآن مشکل delete شدن حل شده.
ولی برای آپدیت شدن, همچنان مشکل هستش.


کلا چه روش هایی وجود داره؟

hossein_h62
شنبه 13 خرداد 1391, 08:20 صبح
اگر از ADOQuery استفاده میکنید همون روش پست #13 رو استفاده کنید، اگر از ADOTable استفاده میکنید بعد از حذف/ویرایش یکبار خاصیت Active اون رو False و بعد True کنید تا تغییرات رو در گرید ببینید.

me.enik
یک شنبه 14 خرداد 1391, 11:44 صبح
اگر از ADOQuery استفاده میکنید همون روش پست #13 رو استفاده کنید، اگر از ADOTable استفاده میکنید بعد از حذف/ویرایش یکبار خاصیت Active اون رو False و بعد True کنید تا تغییرات رو در گرید ببینید.

من از adotable استفاده میکنم.
خودم یه همچین روشی به ذهنم رسید.
حتی توی این تاپیک هم نوشتم :: تاپیک (http://barnamenevis.org/showthread.php?343164-%D9%81%D8%B1%D9%82-sql-server-%D9%88-access-%D8%A7%D8%B2-%D9%84%D8%AD%D8%A7%D8%B8-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%DB%8C-%D8%B3%D9%88%D8%A7%D9%84-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-sql-server&p=1518726&posted=1#post1518726)

ولی احتمالا سرعت پایین میاد.
درسته؟
روش دیگه ای با استفاده از adotable وجود نداره؟