View Full Version : کار با ado به صورت کامل
farzad_az_shiraz
یک شنبه 24 تیر 1386, 10:19 صبح
با سلام خدمت همه کسانی که اینجا زحمت می کشن
من چند تا سوال دارم که از ساده ترینش شروع میکنم خواهشن به من کمک کنید چون من تازه کارم .
1) ado چی هست ؟ ( من با ado کار کردم ولی راستش اصلا نمی دونم چی هست ؟منظورم یه تعریف علمی هست؟)
2) طریقه کار کردن با ado به صورت کامل ؟ فرض کنید که یه بانک اطلاعاتی توی sql serverداریم که اسم دیتا بیسمون d1 هست و یه جدول به نام t1 هم داریم من چطوری می تونم به وسیله دستورات sql ( البته نوشتن query) از طریق edit هایی که روی فرم دارم اطلاعات را به جدولم بدم و حذف و جستجو را نیز به کمک ado و دستورات sql انجام بدم.
البته نیازی به گفتن ارتباط نیست چون ارتباط ado با sql را بلد هستم.
ممنون میشم هر چه سریعتر پاسخ بدید.
در ضمن من زیاد توی سایت گشتم ولی چیزی پیدا نکردم.
با تشکر فراوان
vcldeveloper
یک شنبه 24 تیر 1386, 11:02 صبح
سلام،
به سایت برنامه نویس خوش آمدید
) ado چی هست ؟ADO یک رابط برنامه نویسی برای اتصال به انواع داده ها هست. در واقع ADO یک رابط یکسان برای شما بوجود میاره که می تونید فارق از نوع بانک اطلاعاتی که بهش وصل میشید، ازش استفاده کنید. نتیجه اش هم این میشه که برای بانک های اطلاعاتی مختلف مجبور نیستید روش های مختلفی برای دریافت یا ارسال داده ها استفاده کنید. شما توابع ارائه شده در ADO را فراخوانی می کنید، و ADO متناسب با نوع بانکی که استفاده می کنید، توابع اختصاصی مربوط به آن بانک را از طریق درایوری که آن بانک برای ADO ارائه کرده، فراخوانی می کند.
من چطوری می تونم به وسیله دستورات sql ( البته نوشتن query) از طریق edit هایی که روی فرم دارم اطلاعات را به جدولم بدم و حذف و جستجو را نیز به کمک ado و دستورات sql انجام بدم.نحوه نوشتن Query ها بیشتر از اینکه به ADO مربوط بشه، به زبان SQL که توسط موتورهای بانک اطلاعاتی استفاده میشه، مربوط میشه. بهتره در این زمینه یک کتاب آموزش SQL مطالعه کنید.
برای اطلاعات جامع درباره ADO، نحوه عملکرد آن، و نحوه استفاده از آن، می تونید Microsoft Data Access SDK را مطالعه کنید.
می تونید به تصویر ضمیمه شده هم یک نگاهی بندازید.
farzad_az_shiraz
یک شنبه 24 تیر 1386, 18:55 عصر
نحوه نوشتن Query ها بیشتر از اینکه به ADO مربوط بشه، به زبان SQL که توسط موتورهای بانک اطلاعاتی استفاده میشه، مربوط میشه. بهتره در این زمینه یک کتاب آموزش SQL مطالعه کنید.
ممنون از لطفتون ولی من دستورات sql را بلدم می خوام بدونم چطوری ازش با ado استفاده کنم.
واستون مثال میزنم تا منظورم را متوجه بشید.
ببینید وقتی می خوایم از query توی دلفی استفاده کنیم این جوری مینویسیم :
Query1.SQL.Clear;
Query1.SQL.add('select * from film where code=:a');
Query1.ParamByName('a').AsString:=Table2.FieldValu es['codefi'];
Query1.Open;
حالا با ado چطوری این کارو می کنیم ؟
یا مثلا وقتی می خوایم از یه edit یه مقدار را وارد جدول کنیم ترتیب دستورات adoquery چی هستش ؟
همین طور در مورد سرچ و حذف یک رکورد با توجه به یکی از فیلدهای آن رکورد که اون فیلد از طریق edit گرفته می شه؟؟؟
mzjahromi
یک شنبه 24 تیر 1386, 19:36 عصر
دستورات AdoQuery هم تا 90 درصد شبیه دستورات Query هست.
SQL نویسیش که 100 درصد شبیه Query هست
farzad_az_shiraz
دوشنبه 25 تیر 1386, 08:43 صبح
دستورات sql که آره 100 درصد مثل هم هست ولی خوب به قول شما من همون 10 درصد را نمی دونم.ممنون می شم کمک کنید.
vcldeveloper
دوشنبه 25 تیر 1386, 13:52 عصر
در دلفی برای استفاده از ADO یک سری کلاس های Wrapper ایجاد شده (به نام dbGO) که سعی می کنند نحوه کار با ADO را برای برنامه نویس های دلفی مشابه BDE کنند تا برنامه نویس هایی که به BDE عادت کردند، نیازی به یادگیری مجدد کدهای ADO نداشته باشند.
پس همونطور که دوستمون آقای جهرمی گفتند، برای کار با کامپوننت های تب ADO لازم نیست خیلی کار خاصی انجام بدید. مثلا بجای Query از AdoQuery استفاده می کنید و مثل همون از خصوصیت SQL برای نوشتن کدهای SQL استفاده می کنید و با Active کردنش DataSet را باز می کنید.
farzad_az_shiraz
چهارشنبه 27 تیر 1386, 10:38 صبح
ADOQuery1.Close;
ADOQuery1.SQL.add('insert into mmoshtari where id=:a ,fname=:b,lname=:c,tel=:d,mobile=:e,address=:f');
ADOQuery1.Parameters.ParamValues['a']:=trim(edit1.text)+'%';
ADOQuery1.Parameters.ParamValues['b']:=trim(edit2.text)+'%';
ADOQuery1.Parameters.ParamValues['c']:=trim(edit3.text)+'%';
ADOQuery1.Parameters.ParamValues['d']:=trim(edit4.text)+'%';
ADOQuery1.Parameters.ParamValues['e']:=trim(edit5.text)+'%';
ADOQuery1.Parameters.ParamValues['f']:=trim(edit6.text)+'%';
ADOQuery1.Open;سلام من کاری که شما گفتید انجام دادم.ولی مثلا در مورد کد بالا در خط دوم با sintax error مواجه شدم.ممنون می شم کمکم کنید.
farzad_az_shiraz
چهارشنبه 27 تیر 1386, 17:40 عصر
ممنون می شم جواب منو هر چه سریعتر بدید.
SYNDROME
چهارشنبه 27 تیر 1386, 22:14 عصر
با سلام
ADOQuery1.Close;
ADOQuery1.SQL.add('insert into mmoshtari where id=:a ,fname=:b,lname=:c,tel=:d,mobile=:e,address=:f');
ADOQuery1.Parameters.ParamValues['a']:=trim(edit1.text)+'%';
ADOQuery1.Parameters.ParamValues['b']:=trim(edit2.text)+'%';
ADOQuery1.Parameters.ParamValues['c']:=trim(edit3.text)+'%';
ADOQuery1.Parameters.ParamValues['d']:=trim(edit4.text)+'%';
ADOQuery1.Parameters.ParamValues['e']:=trim(edit5.text)+'%';
ADOQuery1.Parameters.ParamValues['f']:=trim(edit6.text)+'%';
ADOQuery1.Open;سلام من کاری که شما گفتید انجام دادم.ولی مثلا در مورد کد بالا در خط دوم با sintax error مواجه شدم.ممنون می شم کمکم کنید.
دستوری که نوشته اید اشتباه است.
شما می خواهید جستجو کنید باید از به شکل زیر بنویسید :
Select * From mmoshtari Where id=:a ,fname=:b,lname=:c,tel=:d,mobile=:e,address=:f
موفق باشید
farzad_az_shiraz
پنج شنبه 28 تیر 1386, 08:19 صبح
سلام من نمی خوام جستجو کنم .دستورات که واضح هست دارم اضافه می کنم . در واقع
از توی 6تا edit اطلاعاتمو میگیرم و وارد جدولم می کنم. خط دوم به من این error را می ده
. "incorrect syntax near the keyword 'where
ممنون میشم جواب منو هر چه سریعتر بدید.
ADOQuery1.SQL.add('insert into mmoshtari where id=:a ,fname=:b,lname=:c,tel=:d,mobile=:e,address=:f');
vcldeveloper
پنج شنبه 28 تیر 1386, 09:58 صبح
چرا برای دستور INSERT از گزاره WHERE استفاده کردید؟! باید از گزاره VALUES به شکل زیر استفاده می کردید:
INSERT INTO Moshtari VALUES(:a,:b,:c,:d,:e,:f)
البته این در صورتی هست که بخواید به تمام فیلدهای جدول مقدار بدید، وگرنه باید نام فیلدهایی که باید مقدار داشته باشند را بعد از نام جدول بنویسید و به همون ترتیب هم در گزاره Values به فیلدها مقدار بدید.
در ضمن، برای همچین دستوراتی که Recordset برنمی گردونند (مثل Insert, Update, Delete) بهتره از AdoCommand استفاده کنید. در صورت استفاده از AdoDataSet یا AdoQuery هم برای این منظور از ExecSql بجای Open استفاده کنید.
نکته آخر هم اینکه، اگر قراره مقدار پارامترها از Edit های مختلف خونده بشه، استفاده از کنترل های Data-Aware مثل DBEdit کار شما بسیار راحتتر می کنه و نیازی نیست همچین مواردی را خودتون هندل کنید، البته استفاده کردن یا نکردن از کنترل های Data-Aware بستگی به نوع کاری که می خواید روی داده ها انجام بدید و نحوه ارسال/دریافت داده ها به/از بانک هم داره.
farzad_az_shiraz
پنج شنبه 28 تیر 1386, 13:32 عصر
ممنون از اینکه به خوبی به سوالم جواب دادید.
راستش همونطر که گفتم من تازه کارم این مواردی را که شما گفتید چند تا سوال واسه من بوجود آورده .ممنون می شم جواب بدید :
1 )
در صورت استفاده از AdoDataSet یا AdoQuery هم برای این منظور از ExecSql بجای Open استفاده کنید فرق open و execsql چی هست ؟
2 ) به چه کنترلهایی Data-Aware می گن؟ و مگه در کل دارای امکانات بیشتری هست ؟
3 ) منظورتون از اینکه می گید رکوردست بر نمی گردونه چی هست ؟
با تشکر
vcldeveloper
جمعه 29 تیر 1386, 09:58 صبح
به چه کنترلهایی Data-Aware می گن؟ و مگه در کل دارای امکانات بیشتری هست ؟
به کنترل هایی که امکان اتصال به یک DataSet را دارند و می تونند بطور خودکار محتوی DataSet (یا یکی از فیلدهای آن) را نمایش دهند، یا ویرایش کنند. مثل DBGrid, DBEdit, DBMemo و... که در تب Data Controls از Components Pallet دلفی قرار دارند.
منظورتون از اینکه می گید رکوردست بر نمی گردونه چی هست ؟
RecordSet یعنی نتیجه انجام اون عملیات بصورت یک جدول شامل رکوردها و فیلدهای هر رکورد برگشت داده میشه. مثلا دستور SELECT یک RecordSet برمیگرونه، یعنی یک جدول برمیگردونه، البته ممکنه جدول مربوطه خالی باشه، ولی مثلا INSERT فقط رکرودهای مربوطه را در جدول مورد نظر وارد میکنه و یک عدد که نشان دهنده رکوردهایی که عملیات بر رویشان انجام شده بر می گردونه.
فرق open و execsql چی هست ؟
فرق Open و ExecSQL هم در همون ایجاد کردن RecordSet هست. ExecSQL رکوردستی ایجاد نمیکنه، در نتیجه سریعتر انجام میشه، ولی فقط برای دستوراتی کاربرد داره که RecordSet برنمی گردونند. Open رکوردست ایجاد میکنه، می تونه هر دو نوع دستور را اجرا کند، ولی ایجاد RecordSet برای دستوری که RecordSet برنمی گردونه فقط باعث کاهش کارایی برنامه میشه.
Batman
جمعه 29 تیر 1386, 12:42 عصر
توی دستور insert کلمه where اشتباه هستش
باید به جای where از values استفاده کنی
adoquery1.sql.add('insert into tablename values(:name,:family)');
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.