آموزش قدم به قدم ساخت دفترچه تلفن ( دلفی )

Silver PC

Well-Known Member
*** مرحله اول : ساخت بانک اطلاعاتی پارادوکس

اول از BDE شروع ميكنم و بعد يك سري توضيحات هم درباره Access ميدم
براي شروع از خود Databe Desktop كه با خود دلفي ريخته ميشه شروع ميكنم
داخل اين برنامه شويد و File / New / Table را انتخاب كنيد
ليستي از انواع ديتابيس وجود داره كه از بين اونها Paradox 7 رو انتخاب كنيد

صفحه اي ظاهر ميشه كه بايد نام فيلدها رو معرفي كنيد
فيلد اول رو Name و جنس اون رو S به معنای String تعريف نماييد
فيلد دوم رو Tel و جنس اون رو هم S بگذاريد . توجه نماييد كه تلفن از جنس N به معناي عدد نميباشد. چون محاسباتي رو آن صورت نميگيرد

سپس دكمه Save As را زده و فايل مورد نظر خود را به نام Tel.db ذخيره نماييد

به اين ترتيب شما يك فايل بانك اطلاعاتي پارادوكس ايجاد نموديد
 

Silver PC

Well-Known Member
*** مرحله دوم : ساختن کامل بخش دیتابیس برنامه

در مرحله قبلي ديتابيس شما ساخته شد
اكنون به سراغ دلفي ميرويم. در ابتداي امر يك بخش براي قرار گيري ديتابيس براي استفاده در برنامه طراحي ميكنيم
به اين بخش Data Madule ميگويند و بايد از File -> New گزينه DataModule رو انتخاب كنيد
صفحه سفيدي شبيه به فرمهاي عادي ظاهر ميگردد . البته بزرگترين تفاوتي كه با فرم عادي دارد عدم امكان قرار دادن كامپوننتهاي نمايشي ميباشد
حالا از بخش BDE كامپوننت Table و از تب Data Access كامپوننت DataSource رو روي فرم جديد قرار دهيد

كل برنامه را ذخيره نمائيد و بعد هم بايد مشخصات داخلي اين ديتابيسها رو تنظيم نمائيد
1. نام فرم Datamodule را به DM تغيير دهيد
2. در بخشTable -> DatabaseName مقدار . (نقطه) را وارد كنيد
3. ديتابيسي كه قبلا ايجاد كردين را كنار برنامه اصلي (كنار فايل .dpr) كپي كنيد
4. مقدار Table -> TableName را با مقدار Tel.db پر كنيد
5. از Datasource ->DataSet مقدار Table1 رو انتخاب نمائيد

تغييرات را ذخيره نمائيد در اين شرايط بخش ديتابيس برنامه را ايجاد كرده ايد
 

Silver PC

Well-Known Member
*** مرحله سوم : بخش ورود و تغییر اطلاعات

در اين قسمت ميخوام يك راه سخت تر براي ورود و تغيير اطلاعات را پيگيري كنيم
چون راه هاي ساده زيادي وجود داره ولي من ترجيه ميدم راه سخت رو بگم كه بعدا به دردتون بخوره

بر روي فرم اصلي برنامه چندتا دكمه قرار دهيد كه عناوين زير ايجاد كنيد :
1."اضافه كردن"و 2."تغيير اطلاعات"و 3."حذف اطلاعات" و 4."جستجو بر حسب نام"و 5."جستجو بر حسب تلفن"

كدهاي هر يك را به ترتيب توضيح خواهم داد. نوع فرم و شكل آن را مطابق ميل خود انتخاب و مرتب نمائيد

قبل از ورود اطلاعات و كارهاي شبيه به اين ، يك فرم اضافي ايجاد نمائيد و نام آن را Hlp بگذاريد و روي آن دو Edit و دو دكمه قرار دهيد
يكي از دكمه ها را OK و ديگري را Cancel بگزاريد و روي دكمه OK دبل كليك كنيد. در بخش ONClick كد زير را وارد نمائيد :
کد:
if hlp.tag = 0 then begin
  dm.table.append;
  dm.table.fieldvalues['Name'] := edit1.text;
  dm.table.fieldvalues['Tel'] := edit2.text;
  dm.table.post;
end;
لبته بعدا به اين كد مقادير ديگري نيز اضافه ميشود و دليل اينكه شرط tag = 0 را متوجه خواهيد شد

روي رويداد OnShow فرم نيز موقتا كد زير را وارد نمائيد :
کد:
if hlp.tag = 0 then begin
  edit1.text := '';
  edit2.text := '';
end;
 

Silver PC

Well-Known Member
*** مرحله چهارم : تکمیل سازی برنامه

حال به سراغ فرم اصلي رفته و روي دكمه 1 دابل كليك كنيد و كد زير را وارد نمائيد :
کد:
 hlp.showmodal;
روي دكمه 2 دابل كليك كنيد و كدهاي زير را بنويسيد :
کد:
var s : string;
begin
  if InputQuery('اطلاعات,'لطفا نام مورد نظر را وارد نمائيد',S) then begin
    dm.table.filter := 'name = '''+s+'*''';
    dm.table.filtered := true;
    if dm.table.eof then messagedlg('اين مورد پيدا نشد',mtinformation,[mbok],0)
    else begin
      hlp.tag := 1;
      hlp.edit1.text := dm.table.fieldvalues['name'];
      hlp.edit2.text := dm.table.fieldvalues['tel'];
    end;
  hlp.showmodal;
  end;
end;
البته طبق اين كد نامهاي مشابه در نظر گرفته نميشوند و راه هايي براي رفع اين موضوع وجود داره

يكي از راه ها استفاده از يك فرم دست ساز است كه يك Edit و يك DBGrid خواهد داشت و جستجو در آن صورت ميگيرد كه اين مسئله در اين قسمت در نظر گرفته نشده است و شايد در اواخر اين برنامه به آن بپردازيم

اين كدها يك مقدار را دريافت ميكنن (براي مثال "علي") و در ديتابيس به دنبال اولين موردي كه با اين موضوع هم خواني داشته باشد ميگردد. با اين تفاوت كه حتي تركيبات اين كلمه نيز در نظر گرفته ميشود ( براي مثال "عليرضا")
اين كار را علامت "*" كه در فرمان ----- قرار داده شده ، انجام ميدهد
براي دكمه 3 هم تمام كدهاي بالا را تكرار نمائيد با اين تفاوت كه :
1. به جای :
کد:
hlp.tag := 1;
این کد قرار بگیرد :
کد:
hlp.tag := 2;
2. به جای :
کد:
hlp.showmodal
این کد قرار بگیرد :
کد:
hlp.show <;
برنامه شما در حال حاضر شرايط خوبي دارد ولي بايد يك سري كد به آن اضافه شود تا كاملا درست عمل نمايد
 

Silver PC

Well-Known Member
*** مرحله پنجم : پاک کردن یک مورد از دیتابیس برنامه

حالا دوباره به سراغ فرم HLP برويد و روي دكمه OK كد زير را اضافه نمائيد
کد:
if hlp.tag = 1 then begin
  dm.table.edit;
  dm.table.fieldvalues['name'] := edit1.text;
  dm.table.fieldvalues['Tel'] := edit2.text;
  dm.table.post;
end;
كدهاي بالا عمل تغييرات را كامل ميكنند
حال براي اينكه بتونين دكمه سوم فرم اصلي يعني پاك كردن رو كامل نمائيد چند روش وجو دارد
من روش زير را پيشنهاد ميكنم
كدهاي زير را بعد از فرمان hlp.show اضافه نمائيد :
کد:
if messagedlg('آيا ميخواهيد اين اطلاعات را پاك كنيد ؟',mtconfirmation,[mbyes,mbno],0) 
= mryes then begin
  hlp.close;
  dm.table.delete;
end;
به اين ترتيب شما امكان پاك كردن يك مورد را نيز از دفت تلفن ايجاد نموديد
در بخش بعدي درباره جستجوها و ... صحبت ميكنيم
 

Silver PC

Well-Known Member
*** مرحله ششم : ساخت موتور Search برای برنامه

معمولا برای سرچ از فرمان Locate استفاده میشود ولی در بعضی موارد که دفتر تلفن هم یکی از آنهاست به نظر من بهتر از فرمان Filter استفاده شود
یک فرم جدیدبا نام Find ایجاد کنید و روی آن یک Edit و یک DBGride قرار دهید
در رویداد OnChange کامپوننت Edit کدهای زیر را بنویسید :
کد:
if find.tag = 0 then dm.table.filter := 'Name = '''+edit.text+'*'''
else dm.table.filter := Tel = '''+edit.text+'*'''
dm.table.filtered := true;
حالا تغییرات زیر را بدهید تا برنامه کامل شود :
1. مقدار دیتاسورس DBGrid رو با دیتاسورستون که اول طراحی کردین یکی کنید
2. بر روی دکمه 4 دبل کلیک کنید و کد زیر را بنویسید :
کد:
find.tag := 0;
find.showmodal;
3. برای دکمه 5 کدهای فوق را عینا تکرار کنید با این تفاوت که tag := 1 باشد
 

Silver PC

Well-Known Member
*** مرحله هفتم
دوستان برنامه به صورت مبتدی تموم شده ولی میشه خیلی چیزای دیگه بهش اضافه کرد که ما ادامه میدیم ( روشی دیگر )

ارتباط به كمك ADO
برنامه دقيقا مطابق توضيحاتي كه در بالا گفته شده ساخته ميشود
ولي يك تفاوت وجود دارد. در ديتاماژول قبلا Table قرارداده بوديد
در حالتي كه بخواهيد به ديتابيسي شبيه به اكسس كانكت بشيد ، از تب ADO ميتوانيد ADODataset و يا ADOTable رو انتخاب كنيد. ADOQuery براي حالتي كه از فراميت SQL استفاده ميكنيد كاربرد زيادي دارد
بر روي هر كدوم از اين كامپوننتها كه برويد دو مشخصه زير را ميبينيد :
1. ConnectionString
2. CommandText
البته توسيه ميشود كه اگر بيش از 1-2 تا تيبل داريد از يك ADOConnection استفاده كنيد كه برنامه يك بار به بانك اطلاعاتي كانكت شود و كليه اطلاعات را در اختيار ساير ابزارهاي ADODataset,ADOTable,ADOQuery) ADO) قرار خواهد گرفت و در آن شرايط ميتوانيد بايد از خاصيت Connection اين كامپوننتها استفاده نمود

مقادير بسيار زياد و متغييري وجود دارد كه در شرايط مختلف به ConnectionString تخصيص داده ميشود. ولي در حالت ساده و براي ارتباط به فايل اكسس بايد مراحل زير را انجام دهيد :
کد:
Press ... Btn in ConnectionString
Build
Microsoft Jet
Select File Name
OK
به اين ترتيب شما به بانك متصل خواهيد شد و شما بايد تيبل مورد نظر خودتان را به كمك فرامين SQL انتخاب نماييد
اگر هم بلد نيستيد فقط در بعضي مسائل كارتون خيلي سخت خواهد شد. ولي ميتوانيد از فرمان زير استفاده كنيد :
کد:
select * from YourTableName
البته اگر از دكمه ... هم استفاده كنيد به راحتي ميتوانيد به همين نتيجه برسيد

منبع : اینجا
 

farhad110

Member
ظاهرا در سایتی که بالا به عنوان منبع معرفی کردید، خود شما سرپرست سایت و نویسنده ی این مطلب هستید!!!
اما حقیقت امر اینه که این آموزش اولین بار در تاریخ 05-13-2007 توسط دوست عزیزم مرد مباح در p30world قرار داده شده. وجالب اینجاست که خود شما یکی از کاربران p30 هستید و این مطلب رو کاملا میدونید (ssalek عزیز مجبورم لینک سایت دیگه رو بذارم)
http://forum.p30world.com/showthread.php?t=125162
با کپی یک آموزش و تمام کردنش به نام خودتون کار جالبی انجام ندادید دوست عزیز
 

saalek110

Well-Known Member
سلام.
خوشحال شدم که آموزش خوبی نوشته شده.
اگر آقا فرهاد درست گفته باشد بایستی این مسئله را هم رعایت می کردید. رعایت حقوق جزو اخلاق است و در کنار علم آموزی لازم است.
بهرحال اگر نقل هم باشد نوعی انتشار است و جای تشکر و تقدیر دارد.

جناب مرد مباح را هم تا حد زیادی می شناسم و از بحثهای ایشان و دوستانش در آن فروم همه استفاده کرده ایم. با تشکر از ایشان.
از تاپیک (( دلفی و دیتابیس)) به این تاپیک لینک می دهم.
 

farhad110

Member
بهرحال اگر نقل هم باشد نوعی انتشار است و جای تشکر و تقدیر دارد.
البته اگر نقل به درستی ذکر شده باشد جای تقدید و تشکر دارد! در اینجا نقل شده اما: نقل از نقل در جایی که کپی برداری محض، بدون ذکر نام نویسنده ی اصلی (مرد مباح) توسط نویسنده محترم (silver pc) بوده
 

saalek110

Well-Known Member
فرهاد جان حق با شماست. باید منبع ذکر شود. که شما ذکر کردید.

Silver PC جان گویا کاربر فعال شده اید. تبریک می گویم. من اطلاع نداشتم.
 

farhad110

Member
ssalek جان فقط اینجا حرف مرد مباح رو هم میذارم و بحث از طرف من تمامه. چون فکر میکنم در دفاع از دوستم و همه افرادی که به نحوی مورد کم لطفی دیگران قرار میگیرند، حق مطلب ادا شده باشه. موفق باشید.
مرد مباح:
من این آموزش رو برای یادگیری همه نوشتم و مشکلی نیست که اونجا باشه. ولی حداقل حق صاحب مطلب رو در نظر داشته باش و وقتی مینویسی حداقل میتونی اشاره ای به اسم من بکنی اگه حتی نمیخوای لینک سایت رو بزاری.
 

Silver PC

Well-Known Member
معدرت میخوام من چون انو خودم ادیت رده بودم یه خورده !
یه جاش من اسوشن رو آوردم ولی انگار اون پست ها رو نزدم !
ما اهل اینکارا نیستیم !
چند تا پست دیگه هست
منتظر باشید ... !
 

جدیدترین ارسال ها

بالا