PDA

View Full Version : مشکل استفاده از ADO در continueus form



Abbas Amiri
شنبه 09 مهر 1390, 22:52 عصر
با سلام به همه علاقمندان این بخش
برای استفاده از ADO در حالت singleّForm مشکلی ندارم وعملیات Add,Delete , ... ررا براحتی انجام میدهم ولی در حالت continueusForm فقط روی آخرین رکورد اطلاعات پس از UpdateBatch به جدول منتقل میشود . اگر کسی راهنمایی ویا نمونه فایلی دارد ممنون میشوم

Abbas Amiri
پنج شنبه 02 شهریور 1391, 18:28 عصر
هیچکدام ازدوستان دراین مورد تجربه ویا تحقیقی دارد؟

alirezabahrami
جمعه 03 شهریور 1391, 12:35 عصر
با سلام به همه علاقمندان این بخش
برای استفاده از ADO در حالت singleّForm مشکلی ندارم وعملیات Add,Delete , ... ررا براحتی انجام میدهم ولی در حالت continueusForm فقط روی آخرین رکورد اطلاعات پس از UpdateBatch به جدول منتقل میشود . اگر کسی راهنمایی ویا نمونه فایلی دارد ممنون میشوم
سلام!
طبیعتاً وقتی موضوع یا سوال خاصی از طرف یک فرد باتجربه مثل جناب امیری که خود معمولاً پاسخگوی اکثر سوالات مطرح شده دوستان می باشد ،مطرح میشود آن سوال باید تاحدی سخت و مشکل باشد .
علی ایحال بنده از جناب امیری عزیز خواهش میکنم در صورت امکان نمونه فایل خودشان را ارائه نمائید تا همان نمونه بررسی و انشاءالله مشکل برطرف شود، هرچند حقیر حدود دو یا سه سالی است که از اکسس به دور بوده ام و لی شاید این مورد نمونه خوبی باشد که بواسطه آن قدری به ذهن خودم فشار بیاورم و انشاءالله اگر تجربه ای در گذشته وجود داشته آن را بخاطر بیاورم.
موفق باشید

Abbas Amiri
یک شنبه 05 شهریور 1391, 18:46 عصر
فرم اصلی بسیارپیچیده ودرارتباط با چند جدول است . به همین علت یک فرم سردستی ایجادکردم که بپیوست تقدیم میشود. دقت کنید چه یک رکوردوچه n رکورد ایجادکنید فقط رکورد آخر را درجدول ذخیره میکند.

alirezabahrami
دوشنبه 06 شهریور 1391, 12:21 عصر
فرم اصلی بسیارپیچیده ودرارتباط با چند جدول است . به همین علت یک فرم سردستی ایجادکردم که بپیوست تقدیم میشود. دقت کنید چه یک رکوردوچه n رکورد ایجادکنید فقط رکورد آخر را درجدول ذخیره میکند.
سلام!
در رخداد كليك كمند باتن CmdSave، كدهاي زير را وارد كن!
ضمناً با وارد كردن كدهاي فوق در در رخداد كليك كمند باتن CmdSave ، نياز به كدهاي وارده در رويداد Open_Form نميباشد.


Dim sSql As String
sSql = "InvoiceDetails"
Set Rst = New ADODB.Recordset
Rst.Open sSql, CurrentProject.AccessConnection, adOpenDynamic, adLockBatchOptimistic, adCmdTable
Rst.UpdateBatch
Set Rst.ActiveConnection = Nothing

Abbas Amiri
دوشنبه 06 شهریور 1391, 18:22 عصر
در رخداد كليك كمند باتن CmdSave، كدهاي زير را وارد كن!
با تشکر از صرف وقت وتوجه شما
با این کدها هیچ رکوردی Save نمیشود ! شما امتحان کردید؟

alirezabahrami
دوشنبه 06 شهریور 1391, 23:00 عصر
با تشکر از صرف وقت وتوجه شما
با این کدها هیچ رکوردی Save نمیشود ! شما امتحان کردید؟
سلام!
تعجب میکنم!!!!
شاید آن چیزی که مدنظرجنابعالی است را بنده کاملاً متوجه نشدم. اگر درست متوجه شده باشم شمامیخواهید برای یک مشتری تعداد و مقدار فی کالاهای الف و ب را مثلاً در پنج رکورد واردکنید و باکلیک بر روی کمند باتن cmdsave این پنج رکورد وارد شده برای مشتری موردنظر یکدفعه ثبت شود . بنده همین عملیات راچندین بار از طریق فایل اصلاح شده زیر انجام دادم و نتیجه همان شد که شما می خواهید.
من نمونه فایل شما را با انجام اصلاح فوق ضمیمه میکنم . فقط بعد ازواردکردن اطلاعات و کلیک بر روی کمند باتن cmdsave بلافاصله برروی کمند باتن نمایش جدول کلیک کن و نتیجه را ببین.
موفق باشید

Abbas Amiri
دوشنبه 06 شهریور 1391, 23:14 عصر
شاید آن چیزی که مدنظرجنابعالی است را بنده کاملاً متوجه نشدم
متاسفانه همین طور است شما فرم را مستقیما به جدول مقید کرده اید و حتی اگر باتن ذخیره هم زده نشود باز درجدول Save میشود.
نکته مهم ایجاد ویا تغییر چند رکورد بدون اتصال به جدول است که در شیء DAO مااین قابلیت رانداریم . البته با ADODB.Recordset براحتی میتوان با فرمهای SinglForm کارکرد ولی مشکل من کاردرمحیط ContinueusForm است.
بازهم ازتوجه تان ممنون

mazoolagh
سه شنبه 07 شهریور 1391, 13:08 عصر
فکر کنم مشکل ذاتی فرم های پیوسته با ADODB باشه.

اگر نمیخواین از حلقه استفاده کنین یک راه دیگه هم هست : میتونین کانکشن با رکوردست اصلی رو نبندین و یک CLONE بدون کانکشن از رکوردست اصلی بگیرین و فرم رو به اون باند کنین. موقع UPDATE هم مقادیر این رکوردست کلون شده رو در رکوردست اصلی میریزین.
Option Compare Database
Public RS1 As ADODB.Recordset
Public RS2 As ADODB.Recordset

Private Sub Form_Open(Cancel As Integer)
Set RS1 = New ADODB.Recordset
Set RS2 = New ADODB.Recordset
RS1.CursorLocation = adUseClient
RS1.ActiveConnection = CurrentProject.Connection
RS1.LockType = adLockBatchOptimistic
RS1.CursorType = adOpenKeyset
RS1.Open "SELECT ..."
Set RS2.ActiveConnection = Nothing
Set RS2 = RS1.Clone
Set Me.Recordset = RS2
End Sub

Private Sub BTN_SAVE_Click()
Set RS1 = RS2
RS1.UpdateBatch adAffectAll
End Sub

RESMAILY
سه شنبه 07 شهریور 1391, 19:23 عصر
به نام خدا
با سلام. من متوجه نمي شوم. در اين مواقع مگر نمي شود به روش زير عمل نمود
فرم را به يك جدول موقت با مشخصات جدول اصلي باند كنيد و پس از اعمال روشي شبيه به روش جناب mazoolagh با يك «كويري اپند» قال قضيه را بكنيم؟ من كه اين كار را مي كنم هم در dao هم ado بعد هم جدول موقت را پاك مي كنيم تا دفعه بعد.
شايد هم متوجه منظورتان نشدم.

Abbas Amiri
سه شنبه 07 شهریور 1391, 20:26 عصر
با تشکر از Mazoolagh عزیز ، عالی بود با اینکه رکوردست به جدول لینک است اما باتوجه به اینکه فقط درزمان دلخواه یعنی فشردن باتن تغییرات ذخیره میشوند ، منظور را میرساند.


فرم را به يك جدول موقت با مشخصات جدول اصلي باند كنيد
بنده هم دقیقا و بصورت سیستماتیک و کاملا ماژولار اینکاررا انجام میدهم(در بعضی ازفرمها مثل سندپرداخت، تا پنج جدول) ولی دانستن که عیب نیست . مدتها بود بدنبال انجام اینکار بودم و به لطف دوست عزیزمان Mazoolagh بدست آوردم

mazoolagh
پنج شنبه 09 شهریور 1391, 10:17 صبح
به نام خدا
با سلام. من متوجه نمي شوم. در اين مواقع مگر نمي شود به روش زير عمل نمود
فرم را به يك جدول موقت با مشخصات جدول اصلي باند كنيد و پس از اعمال روشي شبيه به روش جناب mazoolagh با يك «كويري اپند» قال قضيه را بكنيم؟ من كه اين كار را مي كنم هم در dao هم ado بعد هم جدول موقت را پاك مي كنيم تا دفعه بعد.
شايد هم متوجه منظورتان نشدم.

زیبایی استفاده از این روش که جناب امیری مطرح کردن (disconnected recordset) به همین هست که جدول موقت و دردسرهاش رو ندارین. هر چند که برای فرمهای master-detail بهترین گزینه هست و کلی در وقت و کدنویسی کمک میکنه ولی کاربردش محدود به data entry نمیشه. میتونین لیست باکس ها و کمبو ها رو باهاش پر کنین، بعنوان حافظه سریع برای lookup استفاده کنین و ... خلاصه این که کمک میکنه برنامه جمع و جور و چابکی داشته باشین. بخصوص در شبکه کاملا نمود پیدا میکنه.
------------------
معمولا پست های جناب امیری رو دنبال میکنم و شاگردی در محضر ایشون باعث افتخار هست