مشاهده نسخه کامل
: ساخت کلید اصلی
ali135ugd
04-01-2010, 08:22
با سلام به همه استادان و دوستان
میگم میخام برنامه ای بنویسم که مشخصات دانشجو را دریافت کردهو آنها رو سورت میکنه
ولی مهم اینجاست که باید کلیدی ساخت تا چک کند مشخصات وارده تکراری نباشه ضمنا دیتا بیس من paradox هست و نمیخواهیم از دکمهkey استفاده کنیم
romixery
05-01-2010, 12:34
اگه اينجوري پيش برين، خودتون رو مي كشيد. بهتره به اعصابتون مسلط باشين. در ضمن كسي اينجا موظف به پاسخ به سوال شما نيست.
و اما در مورد سوالتون. خيلي بد و نا مفهوم توضيح دادين. شما نمي خواين از كليد در ديتابيستون استفاده كنيد؟ اگه اينطوريه، مي تونم دليلش رو بپرسم؟ چون طبق استاندارد و قوانين پايگاه داده، هر جدولي ميبايستي حداقل يه فيلد كليد داشته باشه. و جدولي كه فيلد كليد نداره، استاندارد نيست.
و اما اگه از طريق كد نويسي بخواين بفهميد كه آيا مشخصات دانشجو تكراري هست يا خير، بايد ابتدا توسط دستورات SQL «كه احتمالاً بلدين ديگه» مثلاً نام و نام خانوادگي دانشجو رو در بانك جستجو كنه، و سپس بيان و خاصيت RecCount رو از ADOQuery رو چك كنيد. اگه مقداري غير از صفر بود، يعني اين نام قبلاً در بانك وجود داشته.
موفق باشين
ali135ugd
05-01-2010, 18:11
ممنون از اینکه جوابمو دادین 1.از کلید استفاده نباید کرد چون استادمون میخاد برنامه نویسی بلد شیم( بقول استادمون : اگه دست من بود مجبورتون میکردم با زبان ماشین برنامه بنویسید) 2. کوری یعنی تنبل بازی همچنین دستورات sql یعنی باید خودمون با استفاده از آرایه ها و رشته ها و خلاقیت خودمون این کار رو انجام بدیم 3.وگرنه که با چند حرکت ساده میشد برنامه رو نوشت
F A R H A D
05-01-2010, 20:53
از کلید استفاده نباید کرد چون استادمون میخاد برنامه نویسی بلد شیم
استادتون نگفته وقتی قراره از این جدول رکوردی حذف و یا ویرایش بشه پیغام خطا میگیرید!؟
همونطور که romixery هم گفتند در هر جدول باید کلید اصلی وجود دااشته باشه
البته از اونجا که قبلا شرح حال استادتون رو فرمودید درخواست شما زیاد جای تعجب نداره
برای راحت تر شدن کار خودتون شماره ی دانشجویی رو به عنوان فیلد یکتا در نظر بگیرید و قبل از ورود اطلاعات جدید، شماره دانشجویی رو چک کنید
romixery
05-01-2010, 22:43
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدمنظورتون چيه؟ مگه نميگيد كه داده ها در بانك Paradox هستش. آرايه واسه چي ميخواين؟ والا من كه نمي فهمم چي مي گين. اميدوارم استادتون حداقل فهميده باشه.
اگه ميخواين از آرايه استفاده كنيد، يه راه اينه، «البته ببخشيد ولي بايد بگم راه ابلهانه، ولي در اين مورد خاص چاره اي نيست» كه يه ركورد تعريف كنيد. و فيلدهاي ركورد رو همانند و همنوع فيلدهاي جدول داخل ديتابيستون طراحي كنيد. سپس آرايه اي به طول محدود، از اون ركورد بگيرين. بعد تمام بانك اطلاعاتي تون رو پيمايش كنيد، و دونه دونه ديتا رو داخل آرايه و فيلدهاي متناظر اون قرار دهيد.
متد جستجو ديگه كاري نداره. مي تونيد با جستجوي خطي ساده، چك كنيد و ببينيد كه آيا نامي كه جديداً مي خواهيد به بانك اضافه كنيد، قبلاً در آرايه هست يا نه، در غير اين صورت به جدولتون و هم آرايه، اضافش كنيد.
فكر مي كنم بتونيد با اين كار به اندازه كافي حس آدم آزاري استادتون رو ارضاء كنيد.
موفق باشين.
ali135ugd
06-01-2010, 08:07
استادتون نگفته وقتی قراره از این جدول رکوردی حذف و یا ویرایش بشه پیغام خطا میگیرید!؟<br />
همونطور که romixery هم گفتند در هر جدول باید کلید اصلی وجود دااشته باشه<br />
البته از اونجا که قبلا شرح حال استادتون رو فرمودید درخواست شما زیاد جای تعجب نداره<br />
<br />
برای راحت تر شدن کار خودتون شماره ی دانشجویی رو به عنوان فیلد یکتا در نظر بگیرید و قبل از ورود اطلاعات جدید، شماره دانشجویی رو چک کنید<br />
<br />
ببخشید ولی استادمون گفته اینا نباید شماره دانشجوئی داشته باشند و مثلا اول باید اسمها رو چک کنه اگه تکراری داشت بره فامیلی رو چک کنه اگه باز هم تکراری بود همینطور ادامه بده تا آخر . . . اگه آخر کار معلوم شد این تکراری هست ذخیره نکنه و پیام بده همش همین بود
فيلدهاي ركورد رو همانند و همنوع فيلدهاي جدول داخل ديتابيستون طراحي كنيد. سپس آرايه اي به طول محدود، از اون ركورد بگيرين. بعد تمام بانك اطلاعاتي تون رو پيمايش كنيد، و دونه دونه ديتا رو داخل آرايه و فيلدهاي متناظر اون قرار دهيد.ببین استادمون گفته رکورد ها بصورت بالونی حرکت کنند تا مرتب بشند و قبلش هم باید چک شده باشه که تکراری نداشته باشه یعنی فقط یک تیبل باید باشه
romixery
06-01-2010, 13:03
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
واقعاً نمي تونستين اينو توي پس اول بدين تا بيخود اينهمه تاپيك رو طولاني نكنيم؟!!!
خوب حالا بگين ببينم. مي تونيد از كلاسهاي دلفي استفاده كنيد يا خير. مي تونيد اين برنامه رو به صورت بازگشتي و با استفاده از TString حل كنيد.
ببينيد دوست عزيز، به طور كلي همه محدوديتهات و امكاناتي كه مي توني داشته باشي رو بگو تا بعد از اينكه برنامه رو نوشتيم، نگي كه "نه، اينطوري نمي خواستم، بايد ا...."
موفق باشين.
romixery
06-01-2010, 14:07
سلام. خوب نيازي نيست كه از كلاسهاي دلفي استفاده كني. برنامه رو برات نوشتم. البته توجه كن، من به جاي اينكه از ديتابيس استفاده كنم، از آرايه و ركورد استفاده كردم. تا بهتر بفهمي. برات يه كلاس نوشتم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
من فرض كردم كه توي جدول ديتابيست، سه فيلد به نامهاي name , family , age وجود داره. هيچ كدومم كليد نيست.
شرح توابع كلاسها:
تابع find با گرفتن سه پارامتر نام، فاميل و سال، مي گرده و مي بينه آيا چنين فردي در جدول وجود داره يا نه. در صورت وجود داشتن، True و در غير اينصورت False رو بر مي گردونه. اين تابع كار خاصي انجام نميده، فقط شكل public تابع tblFind هست كه اون رو فراخوني مي كنه. در استاندارد كلاس نويسي، بايد به اين شكل تابع نوشت.
تابع tblFind، ليست رو پيمايش كرده و در صورتي كه نام دو دانشجو برابر بود، براي جستجوي بقيه فيلدها تابع recessive رو صدا ميزنه.
تابع recessive، كار اصلي رو انجام ميده. و دونه دونه فيلدها رو مي گرده و در صورتي كه همه فيلدها يكي بود، true و در غير اين صورت false رو بر مي گردونه.
متد insert، براي وارد كردن يك ركورد در جدول به كار ميره.
شرح متغير ها:
Table، جدول ماست كه از نوع ركورد هستش.
TBLSize، تعداد ركورد موجود در جدول هستش.
Field_Number، تعداد فيلد جدول هست. در اينجا ما سه فيلد داريم.
نحوه مقدار دهي كلاس:
متد Create اين كلاس، يه ورودي داره كه به حداكثر تعداد ركوردهاي جدولت رو مشخص مي كنه. مثلاً كد زير:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حداكثر تعداد ركوردهاي جدولت رو 10 تا ميگيره. (فضا گيري پويا)
و اما شما چطور باهاش كار كني:
مي دونم كه شما ميخواي توي ديتابيس كار كني. پس به راحتي مي توني با استفاده از متدهاي TTable و يا ADOTable، مثل Record count يا Field از همين كلاس براي ديتابيست استفاده كني. خيلي خيلي سادست.
متن توابع رو ديگه خود تفسير كن. مشكلي داشتي بپرس:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشين.
ali135ugd
06-01-2010, 15:06
میگم دمت گرم romixery جان واقعا کمک خیلی بزرگی کردی من امتحانش میکنم اگه با مشکل مواجه شدم بازهم مزاحمتون میشم:20:
ali135ugd
06-01-2010, 17:26
میگم شرمنده ما اصلا کلاس کار نکردیم و نمیدونم متدهای ttable رو برا این کلاس چجوری باید استفاده کرد
میشه یه مثال کوچولو بزنی که این تعاریف بالا کجای برنامه و چجوری استفاده میشن:41:
آخه ما بلد شدیم یه دکمه یا چیزی مثل اون تعریف بشه بعد روی اونا تعاریف و دستورات پیاده بشن ولی کلاس رو نمیدونم چجوریه:13:
بازهم از اینکه وقت گزاشتین و منو قابل دونستین که جوابمو بدین ممنونم
ali135ugd
07-01-2010, 12:32
TtableRec = record
fields : packed array [0..2] of string;
end;
TSearcher = class
Table : array of TtableRec;
TBLSIZE : integer;
FIELD_NUMBER : integer;
function tblfind(info : TtableRec):boolean;
function recessive(info : TtableRec; ind : integer;
const field : integer = 0): boolean;
public
constructor Create(TABLE_MAX_SIZE : integer);
function find(name , family , age : string):boolean;
procedure insert(name , family , age : string);
end;اینو کجا باید بنویسمش؟؟؟
constructor TSearcher.Create(TABLE_MAX_SIZE: integer);
اینو باید کلید براش تعریف کرد یا فقط همین رو بنویسم کفایت میکنه
یا
function TSearcher.find(name, family, age: string): boolean;
ویا
procedure TSearcher.insert(name, family, age: string);
وهمچنین این یکی رو
function TSearcher.recessive(info: TtableRec; ind: integer;
const field: integer): boolean;
function TSearcher.tblfind(info: TtableRec): boolean;
اگه میشه یه توضیحی بدین اینا با دکمه یا چیز دیگری وصل میشه یا خودشون همینجوری کار میکنن
ورودیهامون چجوری باشه خوروجیمون چطوری
بازهم تشکرم
romixery
07-01-2010, 19:21
يه نمونه برنامه براتون آماده كردم. با دلفي 7 نوشتمش.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از چه كامپوننتي براي ارتباط با پايگاه داده استفاده مي كنيد. AdoConnection يا از Table خود دلفي (BDE)؟
ali135ugd
08-01-2010, 09:21
من از table خود دلفی باید استفاده بشه (bde)
بابت برنامه هم ممنون خیلی لطف کردین
من میرم امتحانش کنم دستت درد نکنه
ali135ugd
08-01-2010, 11:00
سلام
romixery جان میگم من چون هنوز نتونستم کلاس ها رو خوب یاد بگیرم میشه راهنمائیم کنی چطوری میتونم از این کلاس برای table و datasorce استفاده کنم (یعنی این کلاس چجوری فراخانی میشه و جوابش رو چطوری دریافت کنم
F A R H A D
08-01-2010, 23:16
سلام. با تشکر از romixery عزیز برای کدی که قرار دادند. شما برای رفع مشکلتون نیازی نیست دقیقا این کد رو با استفاده از کلاس پیاده سازی کنید. از توابع موجود، در برنامه خودتون استفاده کنید. مثلا تابع زیر رو خودتون در برنامه ایجاد کنید و استفاده کنید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ali135ugd
09-01-2010, 13:15
من یه سوالی برام پش اومده
اینinfo و ind چکارند یعنی این دو متغییر وضیفشون چیه؟
ali135ugd
09-01-2010, 16:12
فرهاد جان میترسم جداشون کنم توابع رو ؛ دیگه کار نده
من فقط میخام بدونم کجاها باید ورودی داشت و کجاها چه خوروجی میده البته اگه بشه بگین که برای استفاده با table دستورات چه تغییراتی میکنه چون خودم کمی باهاش کار کردم دیدم انگار خیلی از دستورات عوض میشه میخام بدونم همینطور هست یا نه
بازهم از همتون متشکرم
romixery
10-01-2010, 09:44
info يه ركورده كه نام، فاميل و سال فردي رو كه ميخواي توي جدولت، جستجوش كني، توش قرار داده شده. اگه به تابع find توجه كنيد، ميفهميد كه چي شده.
ind يه متغير هست كه از ركورد اول تا آخرين ركورد جدولت ميره، و دونه دونه اونها رو دستيابي مي كنه. براي مثال اگه ind=5 و [5]Table[ind]=Table يعني، ركورد ششم جدول «توجه كن كه جدول از 0 شروع ميشه. پس خانه 0، اولين خونه هست و ...»
بيشتر از اين توضيح مي خواد؟
ali135ugd
10-01-2010, 09:59
فقط کاشکی میگفتی چطور table1 توش تعریف میشه
ali135ugd
10-01-2010, 10:24
راسی یه سوال دیگه میگم شما برا چک کردن از علامت = استفاده میکنید اگه برا sort کردن بخوام از این توابع به کمک > یا < استفاده کنیم میشه یا نه
سلام
romixery جان میگم من چون هنوز نتونستم کلاس ها رو خوب یاد بگیرم میشه راهنمائیم کنی چطوری میتونم از این کلاس برای table و datasorce استفاده کنم (یعنی این کلاس چجوری فراخانی میشه و جوابش رو چطوری دریافت کنم
کسی میتونه جوابمو بده لطفا .....لطفا
من خواهش میکنم در این مورد کمکم کنید باورکنید ثواب داره
F A R H A D
10-01-2010, 20:00
کسی میتونه جوابمو بده لطفا .....لطفا
قبلا عرض کردم
با تشکر از romixery عزیز برای کدی که قرار دادند. شما برای رفع مشکلتون نیازی نیست دقیقا این کد رو با استفاده از کلاس پیاده سازی کنید. از توابع موجود، در برنامه خودتون استفاده کنید
یعنی کلاس رو کلا بیخیال بشید (با توجه به وضعیت استادتون)
کلاس رو یاد بگیرید اما نیازی به استفاده از اون برای این پروژه نیست
ali135ugd
11-01-2010, 14:58
راسی یه سوال دیگه میگم شما برا چک کردن از علامت = استفاده میکنید اگه برا sort کردن بخوام از این توابع به کمک > یا < استفاده کنیم میشه یا نه
لطفا اگه میشه از اساتید محترم خواهش میکنم یه نظری هم رو مطلب بالایی بدین ممنون دارتون میشم
ali135ugd
15-01-2010, 08:12
نقل قول:
راسی یه سوال دیگه میگم شما برا چک کردن از علامت = استفاده میکنید اگه برا sort کردن بخوام از این توابع به کمک > یا < استفاده کنیم میشه یا نه
لطفا اگه میشه از اساتید محترم خواهش میکنم یه نظری هم رو مطلب بالایی بدین ممنون دارتون میشم
ali135ugd
15-01-2010, 16:01
لطفا اگه میشه از اساتید محترم خواهش میکنم یه نظری هم رو مطلب بالایی بدین ممنون دارتون میشم
میگم دیگه داره مهلتم تموم میشه کسی نمیتونه سورت کردن تو خود تیبل رو بگه
ali135ugd
17-01-2010, 16:08
فرهاد جان ميگم استفاده از اين وابع نياز مند چه چيزهاي ديگري هست يعني چه چيزهايي رو بايد براش تعريف كرد؟
F A R H A D
17-01-2010, 22:23
فرهاد جان ميگم استفاده از اين وابع نياز مند چه چيزهاي ديگري هست يعني چه چيزهايي رو بايد براش تعريف كرد؟
شکل کلی تعریف توابع در دلفی:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای استفاده در رویدادهای مختلف(مثلا ButtonClick):
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
romixery
18-01-2010, 09:27
يه سوال فني. شما چقدر وقته دارين با دلفي كار مي كنيد؟ فكر نمي كردم ديگه توي اين انجمن نحوه تعريف توابع در دلفي مطرح بشه چون اينقدر آموزش و مطلب و مقاله اينجاست كه جايي براي اينجور چيزا نمي مونه. اينجا جا داره يه بار ديگه به امضاي زيباي دوستمون NoneForce عزيز رجوع كنيم:
انسانها به ١1 گروه تقسيم مي شوند. آنهايي كه باينري مي فهمند و آنهايي كه نمي فهمند و آنهايي كه نمي توانند Search كنند.
ali135ugd
18-01-2010, 14:49
حقیقتش از اول ترم تا حالا البته اگه باور کنید من از خودم سیستم ندارم و فقط در محل کار میتونم سر سیستم بشینم و برم تو اینترنت
از طرفی هم فکنم کلا 5 یا 6 جلسه دلفی داشتیم که بالا ترین کاری که کرده بودیم این بوده یه table بسازیم و توی فرم اطلاعاتش رو نشون بدیم و عمل در و حذف رو روش انجام بدیم
ولی برای پروژه استاد فرمودند با پارادوکس باید فلان کار را بکنین و تا 30 دیماه تحویل بدین
تازه جالبش اینجاست که بچه های کلاس هیچکدوم تمیرینات قبلی رو هم انجام ندادند ولی همه بجز من این یکی رو تحویل دادند حلا چطوریشو خدا میدونه آخه از هرکدوم هم پرسیدم چطوری برنامتو نوشتی میگفت نمی دونم بالاخره با اون اطلاعاتی که داشتیم تونسیم بنویسیم
اما باور کن از این 5 یا 6 کلاس کلا 3 جلسه آموزش داشتیم
حالا باید یکم متوجه شده باشی برا چی اینقده گیج میزنم ضمنا باور نمی کنی اگه بگم تو آزمایشگاه پایگاه داده هر کی میخاست بفهمه کجا کارش ایراد اره برنامشو میداد من چک میکردم
ali135ugd
18-01-2010, 16:25
میگم آخرش هیچکی نگفت چطوری سورتش کنم با کد نویسی
ali135ugd
18-01-2010, 18:07
میگم یکی میتونه بهم بگه چطور میتونم یک رکورد راجابجا کنم
ali135ugd
18-01-2010, 18:12
[romixery] جان شما چی شما نمی تونی بگی چطور با کد نویسی میشه یه رکورد را جابجا کرد یا حتی سلکت کرد
romixery
18-01-2010, 18:12
من نگفتم كه شما گيج ميزنين. هر كسي در ابتداي كار با اين مشكلات مواجه ميشه. ولي بحث سر اينه كه با يه جستجوي كوچيك، مي تونستين جواب اكثر اين سوالاتتون رو در اينترنت پيدا كنيد. چون شما تنها كسي توي دنيا نيستين كه با اين مشكل مواجه شدين. پس حتماً از ندانسته هاي ديگران، مي تونيد، جهت دانسته هاي خودتون استفاده كنيد.
و اما جواب سوالتون براي مرتب سازي جدول. ببنيند، يكي از راهها استفاده از SQL هست كه شما مي گيد نمي تونيد ازش استفاده كنيد. پس بايد راه ديگه اي رو انتخاب كرد. شما نمي تونيد ركورد هاي جدولتون در ديتابيس رو جابجا كنيد. پس نمي تونيد روي جدولي كه به بانك متصل هست، عمل مرتب سازي انجام بدين. چون شما از كامپوننت Table استفاده كردين، كارتون راحته و نيازي به كد نويسي براي مرتب سازي بر اساس فيلد خاصي نيست. چجوري؟ با استفاده از Index:
مرحله اول: ابتدا در بانك اطلاعاتيتون براي هر فيلد، يه ايندكس بسازين. اميدوارم بلد باشين اين كار رو انجام بدين.
مرحله دوم: ست كردن خاصيت IndexName از كامپوننت Table. با ست كردن اين خاصيت بر روي هر كدام از ايندكسهاي جدولتون، جدول بر اساس فيلد مورد نظر مرتب ميشه. اگه استادتون به اين گير داد بهش بگو، استاد خود همين الان برام بنويس ببينم خودت حاليته يا نه. بعد به دانشجو اينقدر گير بده..... مردم آزار
در مورد اينكه بقيه بچه ها هم چجوري اين برنامه رو نوشتن، خيلي خودت رو ازيت نكن. با 20-30 تومن، هر كسي اين برنامه رو براشون مي نويسه. اكثر دانشجوهاي ما همينجورين. دارم ميبينم.
موفق باشين
ali135ugd
18-01-2010, 18:16
فک کنم آموزش ایندکس رو بتونم پیدا کنم میرم ببینم چی میشه
ali135ugd
21-01-2010, 08:44
ما که پروژه رو تحویل دادیم ولی نتونستیم سورتش کنیم
romixery
21-01-2010, 09:28
خوب مباركه. البته اين موضوع حتماً خيلي مهم بوده كه براش يه پست دادين!!! اينكه مرتبش نتونستين بكنيد كه خوبه. شما دعا كنيد كه استادتون برنامه رو جايي اجرا كنه كه بانك پارادكس روش نصب باشه، و بانكهايي كه شما تعريف كردين هم داخلش باشه. وگرنه برنامتون سرشار از خطا خواهد بود ... به نظر نمياد كه شما يه برنامه نصاب براش نوشته باشين.
ali135ugd
21-01-2010, 14:45
بلد هستم تو پورژه هایی که قبلا بوردم سرکلاس با مشکل برخورده بودم و الان بلد بودم چه طور باید باشه
راسی بقیه بچه ها رو پرسیدم همشون با کوری سورتش کرده بودن که به درد نمیخوره
ضمنا از همه شما عزیزان که خیلی کمکم کردین مخصوصا شما دوست عزیز romixery جانم خیلی خیلی ممنون البته سعی میکنم این فرم دلفی رو ترک نکنم و تا جایی که بتونم ادامش بدم چون خیلی از دلفی و بیشتر از اساتید بی ادعای این سایت خوشم اومده:10:
شما دعا كنيد كه استادتون برنامه رو جايي اجرا كنه كه بانك پارادكس روش نصب باشه
براش یه هلپ گزاشتم
F A R H A D
21-01-2010, 16:36
سعی میکنم این فرم دلفی رو ترک نکنم
دیدار مجدد شما خوشحالمون میکنه
شاد باشید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.