ورود

View Full Version : استفاده از locate در جداول master / detail



namionlinne
دوشنبه 10 خرداد 1389, 12:08 عصر
سلام
اول تشکر از این که کمکم میکنید
دوم میرم سر اصل مطلب

یه فرم در نظر بگیرید که 3 تا dbgrid داره.

dbgrid 1 : نام و مشخصات کالا (adotable1)
dbgrid 2 : جدول مربوط به فاکتور ها (adotable2) (جدول مستر برای ADotable3)
dbgrid 3 : جدول مربوط به اقلام هر فاکتور (adotable3) (جدول دیتیل برای ADOtable2)

مشخصه که adotable2 در واقع master source برای adotable3 است. یعنی هر رکورد از جدول " فاکتور" میتونه در جدول "اقلام فاکتور" چندین رکورد داشته باشه.

فیلد اصلی (master fieldes) شماره فاکتور برای این دو جدول انتخاب شده که در بانک
اطلاعاتی sql ، فیلد شماره فاکتور جدول " فاکتور ها" بصورت خودکار اضافه میشه.

حالا کلیدی روی فرم قرار داره که موجود بودن اون کالا رو بررسی میکنه :
اگر موجود نبود : اون کالا رو به لیست اضافه میکنه و تعدادش رو 1 میزاره (در جدول "اقلام فاکتور" که جدول دیتیل است)
اگر موجود بود : یک واحد به تعداد اون کالا اضافه میکنه

اما یک مشکل وجود داره:
در اولین درج در جدول "فاکتور ها "بعد از این که اطلاعات مربوط به جدول مستر یعنی "فاکتور" تکمیل شد، شروع به اقلام کالا در جدول دیتیل میکنیم و مشکلی وجود ندارد.

دومین رکورد را در جدول "فاکتور ها" ایجاد میکنیم ، بعد از درج اولین رکورد در جدول دیتیل یا همان "اقلام فاکتور "، رکورد بدون نقص و با توجه به تعداد موجود در لیست درج می شود . اما رکورد هایی غیر از این رکورد بدون توجه به موجودیت در جدول درج می شود.
متد مورد استفاده locate می باشد.

ممنون میشم که راهنمایی کنید.
با تشکر

nami_online3@yahoo.com

حسین شهریاری
دوشنبه 10 خرداد 1389, 13:45 عصر
سلام

دوست عزیز پس مشکل کجاست؟ شما که همش گفتین هیچ مشکلی نیست!!!
مشکل اصلی را مختصر و مفید بفرمایید.

namionlinne
دوشنبه 10 خرداد 1389, 13:53 عصر
سلام دوست عزیز
ممنونم از توجه شما.

بعد از درج اولین رکورد در جدول دیتیل یا همان "اقلام فاکتور "، رکورد بدون نقص و با توجه به تعداد موجود در لیست درج می شود . اما رکورد هایی غیر از این رکورد بدون توجه به موجودیت در جدول درج می شود.

جمله بالا اشاره به مشکل میکنه، یعنی بعد از درج رکورد اول در جدول مستر، به غیر از اولین رکوردی که در جدول دیتیل درج می شه، بقیه بدون توجه به موجودیت اون آیتم تو لیست ، به جدول دیتیل اضافه میشه.
یعنی اگر 5 بار کتاب رو اضافه کنید ، 5 سطر با این عنوان و در قسمت فیلد تعداد موجودی 1 اضافه میشه نا یک سطر با عنوان کتاب و فیلد تعداد 5!

ofr.ir
سه شنبه 11 خرداد 1389, 12:42 عصر
سلام دوست عزیز

ایراد کار فکر می کنم در اینه که شما از ADOTable استفاده کردید. و بنظر میرسه که بانک اطلاعاتی شما SQL server باشه!
این کامپوننت در مواقعی که بانک های شما بانک های سطحی مثل اکسس ویا پارادوکس است خوب کار میکنه
اما در بانک اطلاعاتی SQL server بهتره که با جزء ساخت ADOQuery کار کنید.
شما میتونید به راحتی دو جدول رو با این کامپوننت بصورت Master / detail تنظیم کنید.

ParsaNM
سه شنبه 11 خرداد 1389, 13:08 عصر
دوست عزيز
به جاي اين همه سرو کله زدن بهتره همنطور که دوستمون گفت بري سراغ ارتباط Master/Detail در TDataSet يعني اگر کاملتر بگم هر DataSet مي تونه به يک DataSource وصل بشه که اين DataSource به Master وصل شده ...
فقط توجه کن که بر اساس نوع ارتباط (ADo/ BDE/...) و نوع dataset (ClientDataset/query/table/..) ارتباط فيلدهاي کليدي فرق مي کنه...

حسین شهریاری
چهارشنبه 12 خرداد 1389, 18:42 عصر
ایراد کار فکر می کنم در اینه که شما از ADOTable استفاده کردید. و بنظر میرسه که بانک اطلاعاتی شما SQL server باشه!
این کامپوننت در مواقعی که بانک های شما بانک های سطحی مثل اکسس ویا پارادوکس است خوب کار میکنه
اما در بانک اطلاعاتی SQL server بهتره که با جزء ساخت ADOQuery کار کنید.
شما میتونید به راحتی دو جدول رو با این کامپوننت بصورت Master / detail تنظیم کنید.

خیر اصلا فرمایش شما صحیح نیست!!

بهتره بجای حرف در آوردن برای کامپوننت ها عبارت MASTER/DETAILS را در سایت جستجو کنین چون بارها بحث شده...

موفق باشید

namionlinne
یک شنبه 16 خرداد 1389, 17:01 عصر
البته حسین جان دوستمون درست گفت!
هر جوری که امتحان کردم جواب نگرفتم. اما با راهنمایی دوسمون به نتیجه رسیدم.
بهرحال از همگی ممنونم