PDA

View Full Version : سوال: جستجوی کتاب های گرفته شده در نرم افزار کتابخانه



blackroz_66
سه شنبه 24 دی 1387, 12:02 عصر
سلام من كمك فوري در مورد برنامه
من برنامه كتابخانه نوشتم فقط در گزارش گيري انخابي كمك مي خوام
مي خوام كتاب هايي كه توسط يك نفر تا كنون برده شده اند را به دست آورم
پايگاه داده ي برنامه اكسس بوده و داراي3 table است لطفا كمك كنيد

Mask
سه شنبه 24 دی 1387, 13:28 عصر
بیشتر توضیح بده

blackroz_66
سه شنبه 24 دی 1387, 15:44 عصر
بیشتر توضیح بده

من سعی کردم کل برنامه رو upload کنم اما جون حمش حدودا 1.5mb سایت اجازه upload نداد
شرح برنامه = یک نام رو از جدول امانت جستجو کنه بعد از پیدا کردن شخص کد اون شخص رو تو یه متغیر قرار بده بعد با استفاده از فیلتر کتابهای مربوط به آن شخص رو از جدول بوک به صورت report نمایش بده

hedi
سه شنبه 24 دی 1387, 16:21 عصر
با سلام به دوست عزیز
از چه رابطی برای وصل شدن به بانک اطلاعاتی استفاده می کنی ؟ ADO یا BDE
اگر از ADO استفاده می کنی یا حتی BDE می توانی از خاصیت Filter استفاده کنی اما بهترین روش استفاده از دستورات TSQL است . فرض کن جدول دریافت و برداشت DVB است باید این طوری کد آن را بنویسی :
Select * From DVB Where MCode=108

blackroz_66
سه شنبه 24 دی 1387, 16:48 عصر
از ADO استفاده می کنم دستورات SQL رو بلد نیستم و پایگاه داده ی برنامه اکسس هست نمی دونم جور در می یاد یا نه ؟

bmanfy
سه شنبه 24 دی 1387, 17:21 عصر
خوب با همون فیلتر این رو بنویس بهتره . چون سریعتر عمل میکنه و نیازی به واکشی مجدد اطلاعات نیست .
فض کنیم که شما کد طرف رو در متغیری با نام Person_Id ذخیره کردی . و در جدولی که کتابهای امانت گرفته شده را ذخیره کردی کد فرد درون فیلدی با نام Id ذخیره شده . با فرض بر اینکه جدول هم به AdoTable1 وصل شده (برای BDE ) هم به مین شکل کد زیر رو میتونی بنویسی .



AdoTable1.Filter = 'id=' + Person_id ;
AdoTable1.Filtered := True ;

اگه مقداری که میخوای فیلتر بشه باید درون تک کتیشن هم قرار بدی که یک تابع داره اسمش یادم نیست تنها یادمه با Q شروع میشه . اما کد بالا باید کارت رو راه بندازه .
موفق باشی

blackroz_66
سه شنبه 24 دی 1387, 19:11 عصر
تشکر از لطفت اما مهم ترکیب قسمت جستجو بااین کد هستش لطفا همهی کد این قسمت با هم بنویس (جستجو وفیلتر وگزارش)

بازم ممنون

bmanfy
سه شنبه 24 دی 1387, 20:35 عصر
منظورت از گزارش : گزارش برای چاپه :
خوب ببین دوست عزیز شما تا اینجا گفتی که کد شخص رو توی یک متغیر ریختی .
حالا اصلا فرض میکنیم روی رکورد مورد نظر اون شخص وایسادی و حالا میخوای کتابهایی رو که برده رو نشون بدی .
البته با وشتن SQl هم میشه . اما من یکی این رو توصیه نمیکنم .
خوب باز هم با فرض بر اینکه جدول امانات به AdoTable1 وصل شده و جدول اشخاصت هم به AdoTable2 وصل شده .
که توی هر دو جدول هم اسم فیلدت Id باشه اینجوری مینویسی .



AdoTable1.Filter := 'id=' + AdoTable2['id'] ;
AdoTable1.Filtered := True

با این کد بالا جدول امانات فیلتر میشه به اون شخصی که انتخاب کردی .
حالا اگه مخوای چاپش کنی همین AdoTable1 رو چاپ کن .
حالا با استفاده از کوییک رپورت یا هرچیزی کافیه DataSet اونها به دیتا سورسی وصل باشه که به AdoTable1 وصله .
و مثلا اگه از کویک رپورت برای ساخت گزارش استفاده کردی کد زیر رو هم مینویسی تا اون رو نشون بده .


QuickReport1.ShowPrewiew

همین .
این برداشت من از سوال تو بود . حالا اگه سوالت یه چیز دیگست لطفا واضخ تر توضیح بده .

blackroz_66
سه شنبه 24 دی 1387, 22:08 عصر
من تا قسمت رو می دونم اما بعد این قسمت رو کمک کنید تا قسمت فیلتر و ریپورت رو که یاد گرفتم
ADOTable1.Locate('Title',Edit1.Text,[loPartialKey]);

vcldeveloper
چهارشنبه 25 دی 1387, 02:09 صبح
برای تاپیک هایی که ایجاد می کنید عنوان مناسب انتخاب کنید، وگرنه حذف می شوند!

عنوان تاپیک اطلاح شد.

bmanfy
چهارشنبه 25 دی 1387, 11:07 صبح
من تا قسمت رو می دونم اما بعد این قسمت رو کمک کنید تا قسمت فیلتر و ریپورت رو که یاد گرفتم

خوب آیا از اینجا به بعد چیزی هم میمونه یا نه ؟
دقدیق بگو کجا گیر کردی شاید یه فرجی شد .
اخه اگه گزارشت رو هم شاخته باشی کافیه دیگه بعد از باز شدنش کاغذ بدی به چاپکر و تمام .
نکنه توس ادامه ی ساختن گزارش با کویک رپورت و ... گیر کردی ؟:متفکر:

lena abbaszadeh
چهارشنبه 25 دی 1387, 13:58 عصر
سلام
چرا از adoquery استفاده نمی کنی؟
چرا انقدر کارو سخت می کنی؟

blackroz_66
چهارشنبه 25 دی 1387, 15:26 عصر
منظورم قسمت ما بین جستجو و فیلتر که من موندم و نمی نونم بنویسم

blackroz_66
چهارشنبه 25 دی 1387, 15:34 عصر
ADOTable1.Locate('Title',Edit1.Text,[loPartialKey]);



AdoTable1.Filter := 'id=' + AdoTable2['id'] ;
AdoTable1.Filtered := True
QuickReport1.ShowPrewiew

bmanfy
چهارشنبه 25 دی 1387, 17:31 عصر
اها فکر کنم حالا فهمیدم چی میخوای .
تو میخوای کاربر یه کد بده . اون کد رو جستجو کنی اون وقت اگه بود بره و گزارش رو نشون بده .
امیدوارم این دفه دیگه درست متوجه شده .
با فرض بر اینکه کاربر کد شخص رو تو Edit_Id وارد میکنه . و فیلدهای کد هم نامشون id باشه . و جدول اشخاص هم یه AdoTable_Person و جدول امانات هم به AdoTable_Give وصل باشه چنین مینوسیم .



AdoTable_Person.Locate('Id' , Edit_id.text , [])
if AdoTable_Person['id'] = strtoint(edit_id.text) then
begin
adoTable_Give.Filter := 'Id=' + Edit_id.text ;
AdoTable_Give.Filtered := True ;
GuickReport1.ShowPreview
end ;


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

blackroz_66
چهارشنبه 25 دی 1387, 20:28 عصر
تقریبا همین طوریه فقط به جای کد شخص می خوام اسم طرف رو وارد کنه یعنی وقتی اسم وارد شد بره بر اساس اسم کد طروف رو پیدا کنه و بقیه وارد عینا تو گفتی می شه در این مورد هم کمکم کنی ؟

blackroz_66
پنج شنبه 26 دی 1387, 14:44 عصر
bmanfy کجایی که بهم کمک کنی ؟ کسی نیست مشکله من و حل کنه ؟

vcldeveloper
جمعه 27 دی 1387, 02:06 صبح
AdoTable_Person.Locate('Id' , Edit_id.text , [])
if AdoTable_Person['id'] = strtoint(edit_id.text) then
begin
adoTable_Give.Filter := 'Id=' + Edit_id.text ;
AdoTable_Give.Filtered := True ;
GuickReport1.ShowPreview
end ;

وقتی یک از Locate استفاده می کنید، نیازی نیست که یک بار هم بعد از آن مقدار فیلد جستجو را مجددا چک کنید، پس بجای دو خط Bold شده باید می نوشتید:

if AdoTable_Person.Locate('Id' , Edit_id.text , []) then

vcldeveloper
جمعه 27 دی 1387, 02:09 صبح
تقریبا همین طوریه فقط به جای کد شخص می خوام اسم طرف رو وارد کنه یعنی وقتی اسم وارد شد بره بر اساس اسم کد طروف رو پیدا کنه
کدهای موجود به اندازه کافی شما را راهنمایی می کنند. تغییر نام فیلد از ID به یک چیز دیگه کاری نیست که بابت از کسی راهنمایی بخواید. روی هر کدام از اون متدها هم که F1 بزنید، راهنمای دلفی درباره شون بهتون توضیحات مفصلی میده.

bmanfy
شنبه 28 دی 1387, 11:52 صبح
سلام .
شرمنده کمی دیر شد .
فیلتر کردن بر اساس متن و عدد مثل همه با یه تفاوت کوچک . بایبد متن رو درون علامت تک کتیشن هم قرار بدی . و چون علامت رشته ای پاسکال هم تک کتیشن هست نمیتونی به صورت زیر انجام بدی :



... Filter = 'name= 'ali' ' ;

این دستور در حالت عدی غلطه . اما باید در انتها رشته ای که توی Filter قرار میگیره به صورت زیر باشه :



Name = 'ali'


خوب یک تابعی هست که مقدار رشته ای رو که به اون میدی دروت تک کتیشن قرار میده . که البته الان اسمش یادم نیست . فقط یادمه که با Q شروع میشه . البته Q رو که بزنی خودش میاد و به راحتی میتونی پیداش کنی .
حالا من اسم تابع رو یادم نیست و در کد پایین به جای ایم تابع Q... میزارم .
تمام کد شبیه همون کد قبلیه به جز قسمت فیلترش که اون رو فقط برات مینوسیم .
با فرض براینکه فیلد نام Name باشه و نام رو درون edit1 ریخته باشی :


AdoTable1.Filter := 'Name=' + Q..(Edit1.text) ;


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

lena abbaszadeh
یک شنبه 29 دی 1387, 16:20 عصر
quetedstr
:لبخند: