PDA

View Full Version : سوال: تفاوت روش‌های ثبت رکورد در دلفی مشکلات مربوط به insert



p_ooya
شنبه 20 خرداد 1391, 15:45 عصر
سلام به همه.

من یه مشکل با insert دارم که لازمه پیش از اون مقداری در مورد شرایط برنامه توضیح بدم.
برنامه مورد نظر یک برنامه است که با دلفی ۷ نوشته شده و از یه پایگاه داده SQL Server 2000 استفاده می‌کنه. نرم افزار چندین کاربر داره که به صورت همزمان با پایگاه داده فوق‌الذکر که روی سرور هست درحال کار هستند.

در برنامه من به دو صورت داده‌ها رو وارد بانک میکنم گاهی با استفاده از ADO Table و به صورت زیر:



ADOTableInsert.append;

ADOTableInsert['name']:=name;

ADOTableInsert['data1']:=data;
ADOTableInsert['data2']:=test;
ADOTableInsert.post;


گاهی هم با استفاده از ADO Query و با استفاده از یک insert ساده:



INSERT INTO Calls values (data1, data2, , data3)


مشکلی که چند وقته که داره پیش میاد اینه که بعضی از کاربران دارند گزارش میدن که ثبت‌های از نوع دوم (کوئری) انجام نمیشن و بدون اینکه هیچ خطا یا اروری پیش میاد کارشون رو انجام میدن اما بعداً داده‌هاشون مفقود میشه! هیچ کاربری چنین مشکلی رو با ثبت از طریق ADO Table نداشته.

حالا من اینجا چند سوال دارم. اول از همه و مهمتر از همه اینکه چرا این اتفاق میافته؟ آیا این یک امر عادی هست؟ دوم اینکه آیا اصولاً این دو روش ثبت در ذات با هم تفاوت اساسی دارند؟ مثلاً آیا امکانش هست که ADO Table در درون از Transaction استفاده کنه؟ آیا اصولاً‌ این بانک اطلاعاتی (اس کیو ال ۲۰۰۰) مربوط به دوران پارینه سنگی از Transaction ها ساپورت می‌کنه؟ در نهایت اینکه من چطور می‌تونم مطئن بشم که رکوردم ثبت شده؟ آیا روشی وجود داره که متوجه شد رکورد ثبت شده یا خیر؟

با تشکر.

tiphooo
شنبه 20 خرداد 1391, 18:10 عصر
دوست عزیز این دستور where id = _id دیگه چی هست؟
دستور Insert زمانی که از Value ثابت استفاده می کنید با Where هیچ تناسبی ندارد و اصولا بی جهت است
دستور where id = _id را حذف کنید
نمی دانم منظور شما چی بوده ولی هر چی هست کار بسیار عجیبی کردید

fahimi
شنبه 20 خرداد 1391, 19:42 عصر
زمانی از where id = _idاستفاده میشود که شما بخواهید تیبل را ویرایش کنید(update)

hamid-nic
شنبه 20 خرداد 1391, 20:35 عصر
سلام
چرا از stored procedure سمت سرور استفاده نمی کنید ؟!!!

p_ooya
شنبه 20 خرداد 1391, 22:52 عصر
دوست عزیز این دستور where id = _id دیگه چی هست؟
دستور Insert زمانی که از Value ثابت استفاده می کنید با Where هیچ تناسبی ندارد و اصولا بی جهت است
دستور where id = _id را حذف کنید
نمی دانم منظور شما چی بوده ولی هر چی هست کار بسیار عجیبی کردید

درست میگید. در برنامه هم چنین کوئری وجود نداره. هدفم نوشتن یک مثال بود که به خاطر عجله زیاد بی دقتی کردم. شما اون رو نادیده بگیرید. در مورد سوالات من نظری دارید؟


زمانی از where id = _idاستفاده میشود که شما بخواهید تیبل را ویرایش کنید(update)

رجوع به بالا.


چرا از stored procedure سمت سرور استفاده نمی کنید ؟!!!
موقعی که برنامه رو می‌نوشتم امکانش/دانشش رو نداشتم. شاید الان این کار رو بکنم ولی باید اول بفهمم ایراد کار از کجاست!