PDA

View Full Version : مبتدی: ساخت کنترلر دیتابیس و کنترل مکان اون



hamzehshabani
سه شنبه 13 بهمن 1388, 12:03 عصر
سلام.
1- دوستان عزیز من یه برنامه نوشتم که توش پایگاه داده رو با کلید های TDBNavigator کنترل میکنم.

میخواستم بدونم چطور میشه این کلید ها رو خودم بسازم؟

2- من از دیتابیس اکسس استفاده میکنم و اون رو از MyDocument وارد دلفی کردم. اگه من برنامه رو بصورت EXE در بیارم و بخوام ببرم رو یه سیستم دیگه پایگاه داده چی میشه؟ اصلا باید چیکار کنم؟

3- وقتی برنامه رو اجرا میکنم یه کادر میاد که یوزر نیم و پسورد دیتابیس رو میخواد، چیکار کنم که نیاد؟

ببخشید من خیلی مبتدیم و کمتر از 1 هفته است که با دلفی کار میکنم.

4- چطور میشه setup ساخت؟

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

خوشحال میشم جوابم رو بدید و اگه میشه خیلی ابتدایی توضیح بدید چون واقعا تخصصم تو دلفی پایینه.:ناراحت:

حسین شهریاری
سه شنبه 13 بهمن 1388, 12:43 عصر
سلام دوست عزیز هر سوالی محترم است....
1-برای رفتن به رکورد بعدی:

AdoTable1.Next
2-برای رفتن به رکورد قبل:

AdoTable1.Prior
3-برای رفتن به رکوردآخر:

AdoTable1.Last
4-برای رفتن به رکورد اول:

AdoTable1.First
5-برای درج رکورد جدید:

AdoTable1.Insert
6-برای ذخیره رکورد درج شده:

AdoTable1.Post
7-برای انصراف از درج:

AdoTable1.Cancel
8-برای حذف رکورد جاری:

AdoTable1.Delete
9-برای جستجو:

AdoTable1.locate('Field_Name',Value,[])

در ضمن اگر فایل اکسس را کنار فایل اجرایی کپی کنید و در زمان ایجاد کانکشن و اونجایی که نام پایگاه داده اکسس را باید مشخص کنید مسیر ثابتی ندید به طور پیشفرض مسیر کنار فایل اجرایی در نظر گرفته میشه و شما برنامتونا(فایل اجرایی+فایل اکسس+هرملزوماتی که توی برنامتون استفاده کردیدمثل DLLو...)روی هر سیستمی ببرید بدون اشکال اجرا میشه.

در ضمن اگه از Adoconnection استفاده کردهاید خاصیت LoginPrompt آنرا False کنید تا دیگه اون پنجره User و Pass را نبینید.

البته من ADO را مثال زدم ولی شما از هر Datasetی که استفاده کنید این موارد توی اونا نیز مشترک هست

موفق باشید

hamzehshabani
سه شنبه 13 بهمن 1388, 13:07 عصر
واقعا ممنونم عزیزم ایشالا خیر ببینی.

یه سوال دیگه هم داشتم خوشحال میشم جواب بدید.

من وقتی چندتا سطر رو حذف میکنم و یه سطر جدید میسازم ستون عدد (که تو اکسس از نوع AutoNumber انتخاب شده) عدد رو بعد از اون حذف شده ها میسازه مثلا اگه من اعداد 2 تا 10 رو حذف کنم وقتی یه رکورد جدید میسازم عددش میشه 11 در حالی که باید بشه 2!
چیکار باید بکنم که درست شه؟

hamzehshabani
سه شنبه 13 بهمن 1388, 13:28 عصر
دوستان عزیز نیشه راجع به کد جستجو یکم توضیح بدید؟

AdoTable1.locate('Field_Name',Value,[])من یه تکست باکس با نام edit1 دارم که میخوام مثلا اسم رضا رو از فیلد نام پیدا کنه، باید چی بنویسم؟

حسین شهریاری
سه شنبه 13 بهمن 1388, 13:38 عصر
سلام


درمورد سوال اولتون باید عرض کنم فیلدهای AutoNumber توی اکسس و IDENTITY در Sql فیلدهایی هستند که به ازای هر رکورد درجی کاربر یه شماره برمیگردانند.در اصل تابع هستند.پس همیشه شماره آخرین رکورد درجی را با یک جمع میکنند و برمیگردانند.از اینرو هوشمند نیست تا متوجه شود که کاربر اگه حتی تمام رکوردها را حذف کرده بیاد و از یک شروع کنه.
ولی راه حلهایی وجود داره مثلا این که جدول را به حالت ساختار اولیه ایجاد برگردونیم.(البته این برای مواردی هست که شما بخاین تمام رکوردها حذف شوند و دوباره از یک برای شما برگردونه).


دستورش توی SQl به شکل زیر هست ولی معادلش توی اکسس را نمیدونم!!

TRUNCATE TABLE TABLE_NAME


واما سوال دوم:با فرض اینکه فیلد نام شما توی تیبلتون Fname باشه!

Table1.locate('Fname',edit.text,[])

hamzehshabani
سه شنبه 13 بهمن 1388, 14:53 عصر
واقعا ممنون دوست عزیز کمک خیلی بزرگی بهم کردی.

hamzehshabani
چهارشنبه 14 بهمن 1388, 19:13 عصر
آقا یه سوال دیگه اگه من بخوام یه فرم جداگانه برای ورود اطلاعات بسازم که اطلاعات رو از Textbox ها بریزه تو اکسس باید چیکار کنم؟

hamzehshabani
پنج شنبه 15 بهمن 1388, 12:00 عصر
کسی نیست جواب بده؟

حسین شهریاری
شنبه 17 بهمن 1388, 09:42 صبح
سلام
اگه منظورتون این هست که از Edit بجای DBedit استفاده بشه.جوابتون این هست که باید دستی کد بنویسید.مثلا اگه جدولی با سه مشخصه Code#,Fname,Lname باشه بصورت زیر کد بنویسید:

adotable1.insert;
adotable1.fieldbyname('code#').asinteger:=strtoint (edit1.text);
adotable1.fieldbyname('Fname').asstring:=edit2.tex t;
adotable1.fieldbyname('Lname').asstring:=edit3.tex t
adotable1.post;

حتی میتونین توسط adoquery و با ساختن دستور Insert into و ارسال رشته هم این کار را بکنین.

hamzehshabani
شنبه 17 بهمن 1388, 09:58 صبح
خیلی خیلی ممنو واقعا لطف بزرگی بهم کردی.

hamzehshabani
شنبه 24 بهمن 1388, 23:34 عصر
آقا 2تا سوال دیگه داشتم.

البته فکر کنم جوابش ساده باشه اما خودم نتونستم از پسش بر بیام.

من توسط کد زیر مقدار موجود در Edit1 رو درون فیلد مورد نظرم جستجو میکنم حالا 2تا مشکل داشتم.


adotable1.locate('نام',edit1.text,[])


با این کد دقیقا همون چیزی رو که تو Edit مینویسم سرچ میکنه.
میخواستم بدونم چطور میشه کاربر فقط یه قسمتشو بنویسه و تو فیلد بگرده دنبالش؟

و اینکه اگه چیزی پیدا نکرد یه کاری بکنه مثلا از برنامه بیاد بیرون.

حسین شهریاری
یک شنبه 25 بهمن 1388, 14:33 عصر
سلام

یا از خاصیت Filter به همراه Like استفاده کنید یا کوئری بنویسید و از Like استفاده کنین.

pezhvakco
یک شنبه 25 بهمن 1388, 21:24 عصر
درود :
این سوا زیاد به این تایپیک مربوط نیست ..!
در دستور Locate دو خاصیت هست که کمک زیادی در جستجو ها می کنه :
Table1.Locate('family',Edit26.Text,[loPartialKey,loCaseInsensitive]);
loPartialKey : برای جستجوی مورد نظر شما یعنی موردی که شروعش با مقدار ورودی و ادامش با مقادیر هم خوان بانک
loCaseInsensitive : تاثیر حروف بزرگ و کوچک
ولی بهتره طبق گفته shahriar63 ، از filterیا دستورات sql دیگه استفاده کنی.