دلفی و دیتابیس

saalek110

Well-Known Member
http://www.1padideh.com/index_files/essay27.htm

آموزش دلفی— درس 1
امید ولی محمدی

در این مقاله سعی شده بطور کاربردی نحوه ارتباط با یک دیتابیس ( Access) و دیدن رکوردهای جدول مورد نظر و امکان حذف , اضافه و ویرایش رکوردهای آن آموزش داده شود . برای ارتباط ما از تکنولوژی ADO استفاده کرده ایم .

از برگه ADO کامپوننت ADOConnection را انتخاب و بر روی فرم قرار می دهیم . خاصیت ConnectionString کامپوننت یاد شده را انتخاب و از پنجره Data link properties گزینه Mocrosoft Jet 4.0 OLEDB provider را انتخاب و دکمه next را کلیک می کنیم .

d1.gif

در قسمت بعد که همان برگه Connectin پنجره data link properties می باشد , دیتابیس خود را انتخاب می کنیم ( گزینه اول ) . قسمت username و password را خالی می گذاریم . در صورت کلیک کردن دکمه test connection و برقرار بودن ارتباط پیغام test connection successed خواهد آمد .

بعد از بستن پنجره data link properties خاصیت Login promt کامپوننت ADOConnetcion1 را False می کنیم تا در هنگام True کردن خاصیت Connected پنجره username و password ظاهر نشود . حالا Connected را True می کنیم .

d2.gif

سالک : می توانید در عکس بالا فقط shop.mdb را باقی بگذارید تا با انتقال پوشه پروژه به همراه فایل دیتابیس مشکل آدرس دهی پیدا نشود.

-----------------------------------------
از برگه ADO کامپوننت ADOTable را بر روی فرم قرار می دهیم .

خاصیت Connection را ADOConnection1 انتخاب می کنیم . حال خاصیت Tablename شامل جداول دیتابیس ما می باشد . جدول مورد نظر را انتخاب می کنیم .

سالک: بله. باید ADOTable اضافه شود و صفت Connection آن برابر ADOConnection1 شود و صفت تیبل آن به یکی از تیبل های دیتابیس تنظیم شود.(اگر ADOConnection1 درست وصل شده باشد اتوماتیک نام تیبلها ها لیست می شود و ما فقط انتخاب می کنیم.) و صفت Active ابزار ADOTable را در آخر اگر True کنیم نباید اررور دهد.



d3.gif

می توانستیم برای ارتباط با یک جدول از ADOQuery هم استفاده کنیم . انتخاب ADOQuery این مزیت مهم را دارد که می توانستیم از دستورات SQL هم استفاده کنیم . استفاده از ADOQuery را در مقاله بعدی آموزش خواهیم داد.
سالک : در حقیقت در این حالت ADOQuery به جای ADOTable نقش بازی می کند. در ADOTable ما صفت Table را تنظیم کردیم ولی در ADOQuery می آییم صفت SQL را مثلا به :
کد:
select * from table1
تنظیم می کنیم و بعد صفت Actice را True می کنیم.
بعد هم DataSource را به ADOQuery وصل می کنیم(قبلا به ADOTable وصل بود.)
صفت Active ادوکوئری بعد دستکاری دیتاسورس ممکنه فالس بشه که مجدد ترو کنید.


***************************************
تا اینجا ما با دیتابیس ارتباط برقرار کرده ایم . همینطور به کمک ADOTable توانسته ایم به جدول مورد نظر متصل شویم . برای دیدن رکودهای جدول انتخاب شده ساده ترین و معمول ترین راه استفاده از DBGrid می باشد .

***************************************
برای اینکار به برگه Data Access رفته و کامپوننت Datasource را روی فرم قرار می دهیم . خاصیت DataSet کامپوننت یاد شده را ADOTable1 انتخاب می کنیم .

d4.gif

و حالا سراغ برگه Data Contorol می رویم . کامپوننت Dbgrid را بر روی فرم قرار می دهیم و اندازه آنرا تنظیم می کنیم . خاصیت DataSource کامپوننت Dbgrid را DataSource1 انتخاب می کنیم . اگر خاصیت Active کامپوننت ADOTable را True کنید رکوردهای جدول خود را در DBGrid خواهید دید .

d5.gif

=========================================

اما چند کار دیگر لازم است که انجام دهیم . اول خاصیت BIDImode کامپوننت DBGrid را dbRightToLeft انتخاب می کنیم , تا نمایش رکوردهای ما از راست به چپ شود . بر روی DBGrid1 کلیک راست می کنیم و از menu گزینه اول یعنی Columns Editor را انتخاب می کنیم , تا پنجره مربوط به آن ظاهر شود .

Add All Fields را انتخاب می کنیم تا تمامی فیلدهای جدول مورد نظر نمایش داده شود . این قسمت در شکل زیر با فلش نمایش داده شده است .

d6.gif

بعد از اضافه کردن فیلدها , هر کدام را که انتخاب کنیم خاصیت های آنرا می توانیم مشاهده و تغییر دهیم . برای مثال ما Caption Title فیلدهای جدول مان را در اینجا فارسی کرده ایم . شکل بالا

شما می توانید color , Width و دیگر مشخصات فیلد انتخاب شده را هم تغییر دهید .

برای حذف و اضافه و ویرایش می توانیم از کامپوننت DBNavigator که در همان برگه Datacontorols است استفاده کنیم . برای متصل کردن DBNavigator که در همان برگه Datacontorols است استفاده می کنیم .

برای متصل کردن DBNavigator به DBGrid کافیست Datasource DBNavigator1 را Datasource1 انتخاب کنید .

همانطور که دیدید در هیچ کدام از قسمت های فوق از کد نویسی استفاده نکردیم .

حالا برنامه ما برای نمایش , حذف , اضافه و ویرایش رکوردهای جدول آماده است . فقط مانده RUN کردن برنامه .

موفق باشید .
 

saalek110

Well-Known Member
سالک: پروژه بالا تمام شد و تشکر می کنم از نویسنده آن جناب امید ولی محمدی.
ولی چند تا نتیجه گیری شخصی من می کنم و شما خودتان با بررسی ها یا مطالعات بعدی ببینید درست گفتم یا نه.

اولی این که وقتی به یک فایل اکسس وصل بشیم یک فایل در هارد ما کنار آن ایجاد می شود که شکل قفل دارد. شاید این فایل که بعد دیس کانکت خودبخود محو می شود یک راهنما باشد. حتی در موقعی که پروژه دلفی run نشده و در حالت طراحی است این کانکت شدن را داریم. وقتی با نرم افزار اکسس میکروسافت هم وصل شویم همین قفل می آید.

دومین نتیجه گیری این است که کنترلهای ADOConnection و ADOTable حکم رابط بین نرم افزار ما و دیتابیس است و DataSource حکم مثلا مرکز سرویس دهی است که با کنترلهای ADOConnection و ADOTable پشتیبانی می شود.
ابزار DataGrid و کلا همه ابزارهای تب Data Controls برای نمایش هستند.

d7.gif
 

saalek110

Well-Known Member
در ادامه بحث پروژه بالا نگاهی می کنیم به پنجره Object TreeView

e1.gif

من در پروژه جناب امید ولی محمدی آمدم (( ادو کوئری )) هم اضافه کردم و دیتاسورس را به آن وصل کردم.

نگاه کنید که (( ادو کانکشن )) چون ساقه درخت عمل می کند و (( ادو کوئری)) و (( ادو تیبل)) دو شاخه آن هستند.
و (( دیتاسورس)) هم چون میوه ای روی شاخه (( ادو کوئری )) نشسته.

حالا من این میوه را از این شاخه جدا می کنم و روی شاخه دیگر قرار می دهم. با تغییر صفت DataSet ابزار مذکور یعنی ((دیتاسورس)).- شکل زیر:


e2.gif

می بینید که حالا ((دیتاسورس )) وابسته به (( ادو تیبل )) است و نه (( ادو کوئری)).

در شکل بالا همچنین می بینید که (( DBGrid )) را وارد این شاخه ها نکرده اند. احتمالا برای اینکه شلوغ نشه ولی می دانید که این ابزار هم توسط صفت DataSource خود به DataSource1 وصل است.
 

saalek110

Well-Known Member
اما بیاییم درخت خود را کمی تغییر دهیم.
هم (( ادو کوئری)) و هم (( ادو تیبل)) دارای صفت ConnectionString هستند.
پس بیایید صفت Connection آنها را که قبلا به ADOConection وصل بود را برداریم و کانکشن استرینگ را تنظیم کنیم.
حالا درخت ما به این شکل در می آید:

e3.gif

و اگر یکی را فقط جدا می کردیم به این شکل میشد:


e4.gif



c1.gif
عکسی از :
Teach Yourself Borland Delphi 4 in 21 Days
http://www.cesis.lv/learn/delphi/ch16.htm
 

saalek110

Well-Known Member
در تمامی مباحث بالا ما کدنویسی نداشتیم و با تنظیم صفات ابزارها آنها را به هم وصل می کردیم.

در (( ادو کوئری)) یک خط دستور sql استفاده شد. در زیر آورده می شود:
کد:
select * from table1
معنای آن این است که :
انتخاب کن( select )
تمامی فیلدها(ستونها) ( * ) را
از ( from )
تیبل 1 .
در تاپیک :

آموزش و سوالات مربوط به استفاده از دستورات Sql در دلفی

که فرهاد عزیز زحمتش را کشیده اند می توانید به طور پیشرفته تری این مباحث را دنبال کنید.
همچنین کتاب زیر را می توانید مطالعه کنید:

راهنمای دستورات sql
http://www.divshare.com/download/3948201-8e1
صد کیلو.
فارسی.
---------------------------
Sams Teach Yourself SQL in 10 Minutes, Third Edition

حجم : 320 کیلو.
http://www.divshare.com/download/4479634-4c0
-------------------------
کار با mysql و آموزش دستورات sql :
http://www.divshare.com/download/4403335-91a
نیم مگا.
96 صفحه.
فارسی.
=============================================
دو تا فایل کوچک پیدا کردم آپلود کردم. شاید به مباحث این تاپیک مربوط باشه. دویست سیصد کیلو هستند.
-------------------
http://www.divshare.com/download/4396185-0ed
adosql.rar

-------------------
http://www.divshare.com/download/4396269-156
odbcsql.rar

-=====================
یکی دیگه:
363 KB
Transact SQL Cookbook.rar
http://www.divshare.com/download/4396417-093
------------------
این شاید همون باشه ولی آپلود کردم.
حجمش دقیقا همونه یعنی 363 .
Oreilly.Transact.Sql.Cookbook.eBook-LiB.rar
http://www.divshare.com/download/4396448-adc
--------------------------
Oracle Database 10G Sql.rar
حجم : 837 کیلو
http://www.divshare.com/download/4396605-71d
--------------------------
Oreilly.SQL.Tuning.eBook-LiB.rar
حجم : 977 کیلو.
http://www.divshare.com/download/4396647-d4c
کلی کتاب sql هم اینجا هست.
http://www.flazx.com/category7.php
این صفحه مخصوص sql است.
برای mysql اینجا را ببینید:
http://www.flazx.com/category63.php

سایت دیگر هم که نمی تونم لینک بدهم مستقیم pdfchm دات کام است که باید عضو بشید تا لینک دانلود مجانی آشکار بشود. که خودش هم کتابهای جدید را ئی میل می زنه برای شما.
http://www.developercenter.ir/forum/showthread.php?t=1587

راهنمای استفاده از پایگاه داده Mysql (به زبان فارسی)
 

saalek110

Well-Known Member
منبع:
http://www.aachp.ir/post.aspx?no=84

کار با بانکهای اطلاعاتی در دلفی - ارائه شده توسط مسعود اقالیمی


در این بخش می خواهیم به پر كاربردترین و پراستفاده ترین مبحث در دلفی، یعنی برنامه نویسی بانك های اطلاعاتی، بپردازیم. امید است كه با آموزش گام به گام بتوانیم به طور كامل و كاربردی این بحث طولانی و سنگین را توصیح دهم.

مروری بر ADO
ADO و یا به عبارتی ActiveX Data Object رابط كاربری سطح بالای مایكروسافت برای دستیابی به بانك های اطلاعاتی است. ADO - كه بر اساس فناوری OLE DB مایكروسافت پیاده سازی شده است - علاوه بر دستیابی به بانك های اطلاعاتی رابطه ای و غیر رابطه ای، دستیابی به پست الكترونیكی و فایل سیستمها و اشیاء شخصی را فراهم می سازد. اگر بخواهیم از Access یا از Sql Server مایكروسافت استفاده كنیم، ADO قطعا مزایای بسیاری برای ما خواهد داشت. اما نكته منفی در مورد ADO آنست كه در Linux یا سیستم های عامل دیگر قابل استفاده نیست.

مدل برنامه سازی ADO بر پایه چند شیء استوار است، كه روشهایی را برای دستیابی به انواع منابع داده ای فراهم می سازند. برخی از این اشیاء به قرار زیرند:
شیء Connection كه نمایانگر اتصال به منابع داده ای با استفاده از رشته های اتصال است.
شیء Command كه امكان كار بر روی منابع داده ای را فراهم می سازند. مانند: عملیات حذف، درج، پرس و جو، بروز رسانی و . . .
شیء Recordset كه نتیجه فرمان Query است. هر Recordset را می توان یك جزء ساخت Table یا Query در نظر گرفت.
چند جزء ساخت كه در برنامه ها و مثالهای آتی استفاده خواهیم كرد را به طور خلاصه معرفی می كنیم:

اجزای ساخت تب Data Control

این اجزای ساخت كه Data-Aware نامیده می شوند، اجزای ساختی هستند كه عموما مشابه آنها را در تب standard می بینیم. اما به گونه ای تغییر یافته اند تا محتوای داده های یك Dataset را نمایش یا تغییر دهند. به عنوان مثال از DBEDIT و DBDEMO برای نمایش یك ركورد استفاده می شود. اما از DBGRID زمانی استفاده می شود كه بخواهیم محتـوای كل یك Dataset را نمایش دهیم.

بیـــشتر این اجزای ساخت را می توان به وســـــیله همان اجزا ساخت موجود در تب Standard پیاده سازی كرد. لذا از آنها به جز DBGRID كمتر استفاده خواهیم كرد.

اجزا ساخت تب Dataset

دلفی برای ایجاد برنامه های كاربردی مبتنی بر ADO چهار جزء Dataset معرفی كرده است:
TADODataset
TADOTable
TADOQuery
TADOStoredProc​

تمام این اجزا برای بازیابی، نمایش و تغییر داده ها طراحی شده اند، که می توانند از طریق خصوصیت Connection string خود مستقیماً با منبع داده ها ارتباط برقرار كنند.

جزء ساخت Data Source

این جزء ساخت مكانیزمی برای مرتبط كردن اجزای ساخت Dataset به اجزا ساخت Data-Aware - كه داده ها را نمایش می دهند - فراهم می سازد.

برقراری اتصال با بانك اطلاعاتی
همانطور كه عنوان شد اگرچه هر جزء ساخت Dataset خود مستقیماً می تواند به بانك اطلاعاتی وصل شود، اما ما برای این منظور از جزء ساخت ADOConnection موجود در تب ADO استفاده می كنیم. در این صورت اجزاء Dataset به جای برقراری ارتباط مستقیم با بانک اطلاعاتی به این جزء متصل می شوند. این عمل فواید بسیاری دارد. از جمله اینکه در صورت تغییر پپدا کردن رشته ارتباطی بانک اطلاعاتی تنها کافیست این جزء منفرد را تغییر دهیم. در حالت قبلی باید رشته ارتباطی تک تک اجزای Dataset را تغییر می دادیم.

روال كار بدین صورت است:

یک - ابتدا یك جزء ساخت ADOConnection روی فرم قرار داده، و روی آن دو بار كلیك می كنیم.

دو - سپس روی Build كلیك می كنیم تا پنجره شماره 2 ظاهر شود. فرض می کنیم از پایگاه داده Microsoft Access استفاده می كنیم. در صفحه جدید گزینه Microsoft jet 4.0 Ole DB Provider را انتخاب می كنیم.

سه - Next را كلیك كرده، در صفحه بعد - که در شكل 3 نمایش داده شده - از طریق دكمه Browse فایل mdb مربوط به Microsoft Access را انتخاب می كنیم.

چهار - برای آنكه از اتصال موفق پایگاه داده مطمئن شویم دكمه Test Connection را كلیك می كنیم.

پنج - در تب Advanced طریقه دستیابی به پایگاه داده را - مانند شکل ۴ - مشخص می كنیم.

شش - اكنون OK را كلیك می كنیم.

هفت - روی ADOConnection كلیك كرده، و از طریق Object Inspector خاصیت LoginPrompt را False، و ارزش خاصــیت Connected را True می كنیم.

هشت - اكنون از تب ADO یك ADOTable، از تب DataAccess یك DataSource، و از تب DataControl یك DBGrid روی فرم قرار می دهیم.

نه - از طریق Object Inspector مقدار خاصیت Connection جزء ADOTable1 را ADOConnection1 قرار داده، و در خاصیت Table Name یكی از جداول پایگاه داده را برمی گزینیم.

ده - بر روی DataSource كلیك كرده، خاصیت DataSet آنرا به ADOTable1 تغییر می دهیم.

یازده - بر روی DBGrid كلیك كرده خاصیت DataSource آنرا به DataSource1 تغییر می دهیم.

دوازده - بالاخره ADOTable1 را انتخاب كرده و ارزش خاصیت Active آنرا True قرار می دهیم. اگر جدول مورد نظر دارای داده باشد، آن داده ها در DBGrid نمایش داده می شوند.
 

saalek110

Well-Known Member
از همان منبع :
http://www.aachp.ir/post.aspx?no=84


در بخشهای بعدی مطالبی در مورد شبوه نوشتن در منبع داده، خواندن از منبع داده، و نمایش اطلاعات بحث خواهیم كرد.

موتور بانك اطلاعاتی JET معمولا با بانك اطلاعاتی Microsoft Access مرتبط است، و از MS Access 97 , 2000 , 2003 و نرم افزارهای راه اندازی ISAM (اختصار Index Sequential Access Method) پشتیبانی می كند. لذا این موتور شامل نرم افزارهای راه اندازی Paradox, dBase, Access و Excel بوده، و از متن نبز پشتیبانی می كند. برای آنكه این موتور را با هر بانك اطلاعاتی به غیر از Microsoft Access به كار ببرید، كافیست در پنجره Data Link Properties و در تب All خاصیت Extended Properties را مقدار دهی كنید. مثلا برای استفاده از Excel آنرا به Excel 8.0 و برای استفاده از متن به Text تغییر دهید.

به عنوان یک مثال ساده حالت برای متن، یك فایل متنی با محتویات زیر ایجاد كنید:
کد:
Amin  , Amani

Reza  , Sadegi

Mohammad , Azimi
یك ADOTable، یك DBGrid، و یك DataSource روی فرم قرار داده و خواص آنها را مطابق دستورالعمل ارائه شده در بالا تنظیم کنید. با این تفاوت که به جای Access از فایل متنی (Text) استفاده کنید(شكل ۲). البه باید در قسمت مسیر فایل فقط مسیر دایركتوری حاوی متن را بنویسید، و نام فایل را ننویسید. و بالاخره در تب All مقدار خاصیت Extended Properties را Text قرار دهید. حال اگر خاصیت Active جزء ADOTable1 را True كنیم DBGrid حاوی داده های فایل متنی خواهد شد.

 

saalek110

Well-Known Member

منبع :
http://www.drlearn.ir/programing/7.html
-------------------------------------------------------------
كار با بانكهای اطلاعاتی در دلفی - قسمت دوم

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

1. استفاده از DBNavigator:
================
این جزء ساخت که در پالت DataControls قرار دارد علاوه بر قابلیتهای پیمایشی، راهکاری را برای انجام عملیاتی چون افزودن، حذف یا لغو را فراهم می کند. وجود دکمه ها اختیاری بوده و با استفاده از خاصیت VisibleButtons می توان هر ترکیبی از دکمه ها را انتخاب نمود. برای استفاده از این جزء ساخت آن را روی فرم قرار داده و در قسمت Object Inspector خاصیت DataSource آنرا به DataSource مورد نظر مقدار دهی می کنیم. چهار دکمه اول دکمه های پیمایشی هستند که با استفاده از آنها می توان به اولین و آخرین رکورد انتقال یافت، یا بین رکوردها حرکت کرد. دکمه های بعدی عبارتند از افزودن، حذف کردن، ویرایش، تایید، لغو و Refresh.

وقتی DataSet را در حال ویرایش یا Edit قرار داده ایم و اقدام به تغییر داده ها می کنیم تا زمانیکه عمل تایید یا Post را انجام ندهیم، تغییرات مورد نظر در پایگاه داده اعمال نخواهد شد.

سالک: به یکی از پروژه هایتان ناویگیتور را اضافه کنید. و صفت دیتا سورسش را به دیتاسورس برنامه وصل کنید.
این ابزار یک سری دکمه دارد.
دکمه آخر ((دکمه رفرش است)) .
من پروژه ام به اکسس وصل بود. بعد تغییرات در DBGrid تا دکمه رفرش را نمی زدیم فایل دیتابیس که در هارد قرار دارد تغییر نمی کند.
اما ((دکمه ادیت)) و ((دکمه ok )) ( شبیه تیک است شکلش) مجموعا باعث تغییر فایل در هارد میشد.
من فایل را با اکسس میکروسافت باز می کردم.

نکته بعدی راجع به (( دکمه اینسرت)) است. با وجودی که هر جا دکمه را می زدیم همان جا ردیف باز می شد ولی بعد رفرش می رفت سطر آخر. البته تیبل من ستون اتونامبر داشت. شاید هم به خاطر این بوده.


b5.gif
 

saalek110

Well-Known Member

2. با استفاده از کدنویسی:
===============

با این روش متدهای مورد نظر یک DataSet را فراخوانی می کنیم. این متدها دقیقا همنام با دکمه های جزءساخت DBNavigator هستند. یکی از عملیات پیمایشی که جزء ساخت DBNavigator فراهم نمی کند حرکت رو به جلو یا عقب به اندازه چند رکورد است. از متد MoveBy یک DataSet برای انتقال نشانه رو یک رکورد نسـبت به رکورد فعال استفاده می شود. مـــثلا دسـتور (MoveBy(2 باعث حرکت با گامهای 2 تایی رو به جلو می شود، و دستور (MoveBy(-2 موجب حرکت رو به عقب با گام هایی به طول 2 می شود.

اکنون تغییر و اصلاح داده ها را با هم مرور می کنیم. برای انجام هر کاری روی DataSet ها ابتدا باید DataSet مورد نظر باز باشد. در غیر اینصورت هیچ عملیاتی را روی داده ها نمی توان انجام داد. برای اینکار یا باید خاصیت Active را برای DataSet مورد نظر در حالت True قرار دهیم و یا از متد Open استفاده کرده و قطعه کدی مانند ;Adotable1.Open بنویسیم. برای بستن DataSet هم باید متد Close را فراخوانی کنیم.

برای آگاهی یافتن از وضعیت جاری یا State یک DataSet می توانیم از متد State یا رویداد (Event) به نام OnStateChange استفاده کنیم که هر بار به هنگام تغییر وضعیت DataSet متناظرش فعال می شود. مثلا اگر قطعه کد زیر را در قسمت پاسخگویی به رویداد OnStateChange بنویسیم سبب می شود تا وضعیت جاری AdoTable1 در Edit1 نمایش داده شود:
کد:
Var
St : String ;

Begin
     Case AdoTable1.State of

dsInactive: st := ' closed ' ;
dsEdit: st := ' Editing ' ;
dsInsert: st:= ' Inserting ' ; 
Else st := ' other state ' ;

     End ;

form1.caption := 'AdoTable1 state :' + st ;

End ;
سالک:
رویداد OnStateChange را در بین رویدادهای ADOTable من پیدا نکردم.
ولی دیتاسورس دارای این رویداد بود.
من کد زیر را امتحان کردم:
کد:
procedure TForm1.DataSource1StateChange(Sender: TObject);
   var
St : String ;

begin

  Case AdoTable1.State of

dsInactive: st := ' closed ' ;
dsEdit: st := ' Editing ' ;
dsInsert: st:= ' Inserting ' ;
Else st := ' other state ' ;

   end ;

Edit1.text :=  st ;

end ;
b6.gif

در شکل بالا با زدن دکمه ادیت می بینید که داخل ادیت نوشته Editing و همین طور با زدن دکمه اینسرت(دکمه دارای شکل بعلاوه) هم ی نویسد Inserting .

با استفاده از متد های First و Last می توان به ترتیب نخستین یا آخرین رکورد را به عنوان رکورد جاری تعیین کرد. متد Next و Prior برای رفتن به رکوردهای بعدی و قبلی است. خصوصیت BOF و EOF نشان می دهد نشانه رو در آخرین سطر یا نخستین سطر DataSet است.


 

saalek110

Well-Known Member
ادامه از :
http://www.drlearn.ir/programing/7.html



به دست آوردن مقدار فیلدها


قبل از اینکه عملیات دیگر را معرفی کنیم باید ببینیم که چگونه می توانیم مقدار یک فیلد از یک رکورد را بدست بیاوریم؟ وقتی شیء های DataAware نظیر DBGrid به یک DataSet متصل می شود مقادیر فیلدها در آن شیء های کنترلی نمایش داده می شود. اگر بخواهیم همان مقادیر را مستقیما در برنامه به کار ببریم باید شیوه خواندن آنها را بدانیم. برای دستیابی به مقدار داده یک فیلد چندین روش وجود دارد:
کد:
1. ADOTable1.Fields[x].Value
در کد بالا X شماره فیلد است، که از صفر شروع می شود. تمام فیلدهای یک DataSet در آرایه Fields ذخیره می شود و X نمایانگر موقعیت فیلد در آرایه است.
کد:
2. ADOTable1.FieldByName('name_of_field').Value
در این روش به مقدار فیلد با نام آن دستیابی پیدا می کنیم.

در هر دو این روشها چون Value از نوع Variant است، هنگام نیاز به مقدار فیلدها باید آن را به نوع مورد نظر تبدیل کنیم. مثلا اگر مقدار فیلدی به صورت رشته باشد، از خصوصیت AsString استفاده می کنیم.

سالک: در برنامه من فیلدهای دوم و سوم عددی و فیلد آخر یعنی چهارمی متنی است.
برای همین تبدیلاتی لازم بوده که در کد خود من انجام داده ام.
در عکس زیر کدها روی باتون ها هست و نیازی به درج کد دیگه نیست ولی باز می آورم:
کد:
 edit2.Text :=ADOTable1.Fields[3].value ;
edit3.Text := ADOTable1.FieldByName('Field1').AsString ;
b8.gif



ویرایش یک رکورد:


برای اینکه بتوان داده های یک DataSet را ویرایش نمود، DataSet باید در وضعیت Edit باشد. رفتار شیء های DataAware نظیر DBGrid - هنگامیکه مقدار True به خاصیت AutoEdit آنها تخصیص می یابد - این است که وقتی کاربر روی یکی از فیلدها کلیک می کند تا آنرا ویرایش کند، وضعیت DataSet از حالت Browse به حالت Edit تغییر می یابد. باید دقت کرد که پس از Edit باید عمل Post را هم انجام دهیم. مثلا در کد زیر:


کد:
ADoTable1.Edit ;

AdoTable1.name_of_field.AsString := 'delphi' ;

Adotable1.Post ;


در سطر نخست dataset در وضعیت Edit قرار می گیرد. در سطر دوم رشته Delphi به فیلد name_of_field تخصیص می یابد، و در سطر آخر هم داده ها Post می شوند. جالب است بدانید که در اثر اجرای سه دستور بالا رویدادهای زیر فعال می شوند:



AdoTable1 BeforeEdit

DataSource1 StateChange

Datasource1 DataChange

AdoTable1 AfterEdit

Adotable1 name_of_field Validate

Adotable1 name_of_field Change

DataSource1 StateChange

Datasource1 DataChange

AdoTable1 BeforePost

DataSource1 StateChange

AdoTable1 AfterPost
سالک: من با کد زیر توانستم کار کنم:
کد:
ADOTable1.Edit;
ADOTable1.FieldByName('Field3').AsString := 'hamed';
ADOTable1.Post;
اگر بخواهیم مثلا محتوای یک ادیت را به جای اسم حامد به کار ببریم. به این شکل میشه:
کد:
ADOTable1.FieldByName('Field3').AsString := edit1.text;
و برای فیلدهای عددی کد زیر:
کد:
ADOTable1.Edit;
ADOTable1.FieldByName('Field2').value := 6677;
ADOTable1.Post;
 

saalek110

Well-Known Member
ادامه از :
http://www.drlearn.ir/programing/7.html


افزودن یک رکورد:


برای اینکار از دو متد مربوط به DataSet می توانیم استفاده کنیم. اولین متد Insert و دومین متد Append است. هردو این متدها یک رکورد جدید خالی در جدول ایجاد کرده و رکورد جدید را به عنوان رکورد فعال (Active) در نظر می گیرند. تنها تفاوت ما بین این دو دستور اینست که متد Append این رکورد جدید را در انتهای DataSet ایجاد می کند (به انتهای جدول اصافه می کند)، اما در متد Insert این رکورد جدید ممکن است در هر جایی از DataSet اضافه شده باشد. قطعه کد زیر نحوه انجام این عمل را نشان می دهد:
کد:
With AdoTable1 Do

Begin

Append ;

FieldByName('name').Value.AsAtring := 'ali' ;

FieldByName('Email').Value.AsString := ' [email][email protected][/email]' ;

FieldByName('id').Value.AsString := '50' ;

Post ;

End ;
البته جزء ساخت AdoTable متدی به نام InsertRecord دارد که از آن می توان برای ایجاد یک رکورد خالی جدید در Dataset، پر کردن فیلدهای این رکورد جدید و Post کردن مقادیر به بانک اطلاعاتی استفاده نمود. کد زیر نحوه انجام این عمل را نشان می دهد:
کد:
AdoTable1.InsertRecord ( ' ali' ,' [email][email protected][/email] ' , '50' ) ;
باید توجه داشت که ترتیب داده ها با ترتیب قرار گرفتن آنها در فیلدهای مورد نظر یکسان باشد.
سالک : من با کدهای زیر کار کردم:
کد:
  With AdoTable1 Do
 Begin

Append ;

FieldByName('Field1').value := 21 ;
FieldByName('Field2').value := 45000 ;
FieldByName('Field3').AsString := 'javid' ;

Post ;
  end;
فیلد اولی از نوع autonumber بود که مقدار ندادم.
کد:
  AdoTable1.InsertRecord ([nil,'20' ,'72000' , 'sadegh'] ) ;
فیلد اولی از نوع autonumber بود که nil نوشتم.

حذف یک رکورد:


برای اینکار متد Delete مربوط به DataSet مورد نظر را فراخوانی می کنیم و نیازی به فراخوانی متد Post پس لز فراخواندن Delete نیست. با استفاده از رویداد BeforeDelete می توان جهت جلوگیری از حذف رکورد از جدول اقدام کرد. برای اینکه کاربر را از اینکه می خواهد رکوردی را حذف کند آگاه کنیم یا در حقیقت از کاربر بخواهیم که عمل حذف را تایید کند چندین راه وجود دارد. اولین روش استفاده از تابع MessageDlg است. این تابع در کتابخانه Dialogs به صورت زیز تعریف شده است :

کد:
Function MessageDlg ( Const Msg : String ; DlgType : TMsgDlgType ; Buttons : TMsgDlgButtons ; HelpCtx : Longint )
پارامتر اول پیامی است که می خواهیم به کاربر نشان داده شود. پارامتر دوم نوع پیام و پارامتر سوم ترکیب دکمه هایی است که در پیام می خواهیم ظاهر شود. MsgDlgBtn می تواند یکی از مقادیر mbOK, mbCancel, mbYes, mbNo, mbRetry و . . . را بپذیرد. برای اینکه بفهمیم کاربر کدامیک از دکمه ها را کلیک کرده است مثل کد زیر عمل می کنیم:
کد:
If messagedlg ( 'Are you sure you want to delete book?' , mtWarning , mbOKCancel , 0 ) = mrOk Then

AdoTable1.Costumer.Delete ;
سالک : من با کد زیر کار کردم:
کد:
  AdoTable1.Delete ;

b9.gif

کد Append1 در عکس بالا اینه:
کد:
  With AdoTable1 Do
 Begin

Append ;

FieldByName('Field1').value := 21 ;
FieldByName('Field2').value := 45000 ;
FieldByName('Field3').AsString := 'javid' ;

Post ;
  end;
کد state هم این است:
کد:
procedure TForm1.DataSource1StateChange(Sender: TObject);
   var
St : String ;

begin

  Case AdoTable1.State of

dsInactive: st := ' closed ' ;
dsEdit: st := ' Editing ' ;
dsInsert: st:= ' Inserting ' ;
Else st := ' other state ' ;

   end ;

Edit1.text :=  st ;

end ;
یک نکته کوچک هم بگم: در موارد خاصی از تغییر صفات ادوکانکشن و دیتاسورس خودبخود صفت Active ادوتیبل False میشه که باید True کنید.
گاهی هم برای اینکه در حالت طراحی اطلاعاتی که در DBGrid می بینید رفرش بشه همین صفت یعنی صفت Active ادوتیبل را False و دوباره True کنید.

این قسمت تمام شد.
 

saalek110

Well-Known Member
از :
http://forum.p30world.com/showthread.php?t=52758
-------------------------------------------------------------

درس1 : آشنایی با بانک اطلاعاتی
دوستان اول به نظرم لازم بود که درباره معنای بانک اطلاعاتی بدونین.
برای فهم راحت این موضوع یک مثال میزنم.
فرض کنید یک دفترچه تلفن خریدید.
معمولا 3 بند در آن مشترک است
1. نام
2. تلفن
3. آدرس
که زیر آنها کلی جای خالی برای نوشتن تلفن و اسم هست.
در مفهوم بانک اطلاعاتی به هر یک از این بخشهای 1-2-3 یک فیلد گفته میشود.
به هر یک از اسم و فامیلی که مینویسیم یک رکورد گفته میشود.
در ساخت بانک اطلاعاتی همیشه تعداد فیلدها محدود است و نوع آنها مشخص میباشد.
ولی رکوردها تا اندازه ای که هارد شما ضرفیت دارد امکان ذخیره اطلاعات را دارد.
به مخموعه ای از فیلدها و رکوردها یک بانک اطلاعاتی گویند.

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

saalek110

Well-Known Member
از :
http://forum.p30world.com/showthread.php?t=52758
-------------------------------------------------------------
درس2 : معرفی دیتابیس به دلفی
برای این منظور در دلفی یک سری کامپوننت وجود دارد که در بخش Data Access و Data control قرار دارد.
در بخش اول معمولترین کامپوننت هایی که استفاده می شود Table و Datasource است.
Table برای معرفی دیتابیس استفاده میشود
شما میتوانید در بخش DataBaseName اسم فایل دیتابیس طراحی شده خودتون رو وارد کنید
پیشنهاد من اینه که همیشه فایل دیتابیستون رو اونجایی قرار بدین که فایا EXE شما قرار داره. چون به این ترتیب نیازی به تعریف مسیر ندارید.
در بخش TableType شما میتوانید نوع دیتابیسی که باهاش کار می کنید رو معرفی کنید.
بعد از این دو مورد مهمترین مسائلی که وجود داره اول بخش فیلتر کردن آن است که میتوانید با ساختار زیر عمل کنید.

(FieldName1) = 'String' and (FieldName2) = number
منظور از (FieldName1&2) اسم فیلدی هست که شما در دیتابیس معرفی کردید و جنس فیلد اول کاراکتری و جنس فیلد دوم عددی میباشد.

و دوم بخشی برای استفاده چند کاربره از دیتابیس که در صورتی که مقدار CachedUpdate برار True باشد, امکانپذیر است.
درباره طرقه استفاده از آن در درسهای بعدی توضیح میدم.

بعد از تعریف Table شما میتوانید Datasource را روی فرم گذاشته و به راحتی Table رو به Datasource مرتبت کنید.

دلیل استفاده از دیتاسورس در درس بعدی قرار دارد.
 

saalek110

Well-Known Member
از :
http://forum.p30world.com/showthread.php?t=52758
-------------------------------------------------------------

درس 3 : ارتباط دادن دیتابیس به فرم
دوستان دو موردی که در درس قبلی مطرح شدند ، اشیا غیر نمایشی هستند.
یعنی اگر این دو بر روی یک فرم قرار داشته باشند ، اگر برنامه اجرا شود چیزی بر روی فرم ظاهر نمیشود.
البته معمولا بر روی DataModul قرار میگیرند که بعدا درباره آن صحبت میشود.
در واقع این دو یک رابط بین دیتابیس و اشیا نمایشی هستند.

اشیا نمایشی در بخش DataControl وجود دارد که در این در به توضیح DBText و DBEdit می÷ردازیم و در درس بعدی توضیحات را کاملتر می کنیم.

DBText : این شی برای نمایش یک مقدار که در درون دیتابیس وجود دارد استفاده میشود.
در خصوصیات تمام زیر مخموعه DataControl یک بخش به نام DataSource وجود دارد که اگر آن را انتخاب کنید ، لیستی از Datasource هایی که قبلا ایجاد کردید را در آن میبینید.
یک خصوصیت مهم دیگر نیز وجود دارد که DataField میباشد.
این خصوصیت یکی از فیلدها را برای DBText مشخص مینماید تا به نمایش درآورد.
باقی خصوصیات را قاعدتا میشناسید. و هیچ چیز خاص و مهمی ندارد.
DBEdit : این شی درست مثل DBText میباشد با این تفاوت که امکان تغییر نیز وجود دارد.
Event های این شی بیشتر از DBText است ولی تمام این Event ها در سایر اشیا دلفی مشترک است.

DBComboBox هم دقیقا مشابه با DBEdit است با این مزیت که میتوان مقادیر را نیز محدود کرد.
سایر اشیا هم مانند DBImage و DBMemo برای دسترسی به فیلدهای عکسی و یادداشتی استفاده میشوند.
برای اینکه این مبحث خیلی طولانی نشد DBGrid در درس بعدی آموزش داده میشود.
 

saalek110

Well-Known Member
از :
http://forum.p30world.com/showthread.php?t=52758
-------------------------------------------------------------
درس 4 : در این بخش میخوام درباره DBGrid صحبت کنم.
این شی جز قویترین و در بعضی جاها مهمترین شی در طراحی یک برنامه به حساب میاد که امکانات متنوعی داره. یکی از مهمترین کارهایی که در فرم انجام میدهد نمایش یک مجموعه فیلتر شده خاص است که حتی فیلدهای آن نیز مشخص شده است.
برای توضیح کامل این شی با یک مثال جلو میروم.
فرض کنید که با یک دیتابیس دارین کار میکنین که یک جدول داره و دارای فیلدهای زیر است :
1. کد کارمندی 2.نام 3.آدرس 4.تلفن 5.حقوق 6. وظیفه در کارگاه

حال فرض کنید که یک گزارش ساده از افرادی میخواین که مثلا مورد 6 آنها "کارگر" است.
در این گزارش که روی مونیتور هم هست لزومی برای نمایش "آدرس"و"حقوق"و"کد کارمندی" نیست.
مراحل زیر را انجام میدهیم.

1. DBGrid را روی فرم قرار میدهیم.
2. DataSource آن را مشخص میکنیم.
3. روی DBGrid دبل کلیک می کنیم و یک صفحه سفید ظاهر میشود.
4. دکمهای در بالای این صفحه است. (ADD NEW)
5. یک آیکون به لیست سفید اضافه میشود. آن را انتخاب کنید
6. در خاصیت FieldName نام فیلد مورد نظرتان را انتخاب کنید.
7. بخش Title را انتخاب کرده و در بخش Caption نامی که برای فیلد مد نظرات است را برای نمایش روی مونیتور وارد کنید. این بخش معمولا برای برنامه های فارسی استفاده میشود.
8. سایر مشخصات مربوط به ستون را تعیین کنید. سایر مشخصات واضح هستند و خیلی کاربردی نمیباشند.

اگر مراح 3 به بعد را انجام ندهید کل فیلدها نمایش داده میشوند. ولی اگر این کارها انجام شود و فیلدهای مورد نظرتان را انتخاب کنید فقط آنها را نشان خواهد داد.
حال اگر Table را فیلتر کنید ، تغییرات آن بلافاصله بر روی DBGrid اعمال میشود.

کمی هم درباره DBImage صحبت کنم.
چون گویا دوستان کمی مشکل داشتند.
برای استفاده از این شی به راحتی میتوان عکس را ارد بانک اطلاعاتی کرد.
درست مثل تمامی اشیا این صفحه ابتدا باید DataSource و فیلد آن مشخص گردد.
برای انتفال عکس از روی هارد به درون دیتابیس هم میتوان به هر روشی (برای مثال Dialogs) نام و مسیر فایل را بدست آورد و با کد زیر آن را وارد کرد:
کد:
DBImage.Picture.LoadFromFile(……)
منظور از ... هم همان انتخاب شما برای یافتن نام و مسیر فایل است.
حتی به صورت مستقیم می توان نام فایل را نوشت.
برای مثال :
کد:
DBImage.Picture.LoadFromFile(‘c:\window\art.jpg’)
 

saalek110

Well-Known Member
از :
http://forum.p30world.com/showthread.php?t=52758
-------------------------------------------------------------
درس 5 : دیتا ماژول
دوستان اگر تا اینجای بحث را پیگیری کرده باشی الان باید بتوانید که یک دیتابیس تک جدوله را کنترل و در یک برنامه استفاده کنید.
برای اینکه در یک برنامه کاربردی همیشه بیش از یک فرم است که با جدول در تماس میباشد ، تعریفات دیتابیس و جدول را در بخش دیگری به نام دیتا ماژول انجام میدهیم.
این بخش همانند یک فرم اضافی برای برنامه میباشد و هر فرمی که به اطلاعات جدول لینک باشد را به آن اتصال میدهیم. این ماژول را میتوان از طریق File/New…/DataModual اضافه نمود.
سایر کارکردهای این بخش همانند فرم است وتنها فرق آن در عدم نمایش همیشگی آن برای کاربر است.
یعنی امکان نمایش (Form.ShowModal) را ندارد.

تاکید میکنم که روی درس 3 و 4 خیلی کار شود که مطالب آنها برای تمامی ساختارهای دیتابیسی در دلفی کاربر دارد. اکثر کامپوننتهایی که در بخش DataSource وجود دارند کار معرفی جدول را به عهده دارند ، البته با تفاوتهایی نسبت به Table و چون حجم مطالب خیلی زیاد میشود از توضیح درباره آنها صرف نظر کردم.
 

saalek110

Well-Known Member
سالک : منظور از این دو صفحه آشنایی با روش وصل شده با دیتابیس و آشنایی با بعضی ابزارها بود.
 

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

بالا