ورود

View Full Version : سوال: چه طور تکست باکس های برنامه رو به طور خودکار پر کنیم؟



Shadow Dancer
پنج شنبه 21 شهریور 1387, 22:43 عصر
با سلام خدمت همگی دوستان
یه سوال از خدمت دوستان داشتم که اگه جواب بدن خیلی ممنون میشم

یه فرم داریم که توش چند تا تکست باکس هست و این تکست باکس ها هم به یک دیتابیس Access وصل هستن. میخوام طوری برنامه طوری باشه که وقتی یکی از تکست باکس ها رو پر میکنیم بقیشون هم بر اساس سایر مقادیر رکورد مربوط به مقدار وارد شده وارد شده پر بشن. یه نمونه هم توی سایت پیدا کردم اما همین کار رو فقط تو محیط خود Database انجام داده بودن
http://barnamenevis.org/forum/showthread.php?t=30639&highlight=%D8%B4%D8%AF%D9%86+%D8%A7%D8%AA%D9%88%D9 %85%D8%A7%D8%AA%DB%8C%DA%A9
ولی توی محیط VB نمیدونم چه طور این کار رو انجام بدم؟ اگه Sample هم کسی داره بذاره یک دنیا ممنون میشم

xxxxx_xxxxx
پنج شنبه 21 شهریور 1387, 22:49 عصر
اگه بانکتون زیاد بزرگ نیست می تونید تو رویداد change هر textbox یه بار بانکو فیلتر کنید/

Shadow Dancer
پنج شنبه 21 شهریور 1387, 22:58 عصر
اگه بانکتون زیاد بزرگ نیست می تونید تو رویداد change هر textbox یه بار بانکو فیلتر کنید/
ممنون دوست عزیز
متاسفانه بانک نسبتا بزرگیه. مربوط به برنامه تاکسی سرویس میشه. میخوام مثلا طرف شماره اشتراک رو که وارد کرد قسمتهای آدرس،شماره تلفن و ... از رکورد مربوط به مشترک خونده بشه و پر بشه. تعداد رکورد ها بسته به تعداد مشترکینی که طرف ثبت میکنه تغییر میکنه. اگه بخوام با فیلتر این کار رو انجام بدم فکر میکنم نیاز باشه که تعداد رکورد ها از اول مشخص باشه

NewFoxStudent
پنج شنبه 21 شهریور 1387, 23:03 عصر
میتونی با یه Select رکوردی رو که یکی از مقادیرش وارد شده توی یه ecordset بریزی و بعد به تکست باکسها بدی

Shadow Dancer
پنج شنبه 21 شهریور 1387, 23:11 عصر
میتونی با یه Select رکوردی رو که یکی از مقادیرش وارد شده توی یه ecordset بریزی و بعد به تکست باکسها بدی
ممنون دوست عزیز
خب من الان یک رکوردست تعریف کردم. دستور Select رو چه جور بنویسم که بتونه کل فیلدهای یک رکورد رو که مقدار یکی از فیلدهاشو داریم انتخاب کنه و بریزه توی رکوردست؟ اگه راهنماییم کنید ممنون میشم. بقیه دوستان هم اگه نظری دارن دریغ نکنن

NewFoxStudent
پنج شنبه 21 شهریور 1387, 23:18 عصر
با فرض این که فیلدی رو که مقدارش رو داری recID هست و نام جدول TableName و مقدار فیلد cValue

Select * From TableName Where recID = cValue

NewFoxStudent
پنج شنبه 21 شهریور 1387, 23:26 عصر
اگه مشکلی داری فرمت رو بزار اینجا تا برات درستش کنم

Mohya_z332
جمعه 22 شهریور 1387, 01:50 صبح
باید دیتا فیلد تکست های دیکه رو با دیتا ست کنی بعد این کد رو تو تکست مورد نظر بنویس.
توی key press تکست بنویس
if keyascii=13 then
Data2.Recordset.FindFirst "NoeKhodro ='" & (text1.text) & " '"
Do While Data2.Recordset.NoMatch = False
Data2.Recordset.FindNext "NoeKhodro ='" & (text1.text) & " '"
Loop
end if
حالا به محضی که enter رو بزنی همه تکست ها رو با تکست اصلی ست میکنه .

xxxxx_xxxxx
جمعه 22 شهریور 1387, 02:13 صبح
باید دیتا فیلد تکست های دیکه رو با دیتا ست کنی بعد این کد رو تو تکست مورد نظر بنویس.
توی key press تکست بنویس
if keyascii=13 then
Data2.Recordset.FindFirst "NoeKhodro ='" & (text1.text) & " '"
Do While Data2.Recordset.NoMatch = False
Data2.Recordset.FindNext "NoeKhodro ='" & (text1.text) & " '"
Loop
end if
حالا به محضی که enter رو بزنی همه تکست ها رو با تکست اصلی ست میکنه .


این کار زمان زیادی میگیره. در صورتی که دستورات sql بهینه تر هستند.

کد مشترک در اکثر برنامه ها می بایست محدود باشد( مثلا 4 یا 5 کاراکتر)
خب حالا تو رویداد change همون textbox کد باید چک کنی اگر Len تکست 4 شد اونوقت بانک فیلتر بشه با مقدار وارد شده. (با دستور select). کاربر هم دو سه بار که با برنامه کار کنه می فهمه که وقتی کد رو به طور کامل وارد کرد باید چند میلی ثانیه صبر کنه تا نتایج رو ببینه. اگر شما ده هزار رکورد هم داشته باشید که بعید می دونم باز هم حداکثر 3 تا چهار ثانیه طول می کشه تا بانک فیلترشه.

من خودم تو برنامه هام همین کارو می کنم. کاره خوبیه دیگه نیازی نیست کاربر کار اضافی انجام بده.

موفق باشید/

Shadow Dancer
جمعه 22 شهریور 1387, 02:36 صبح
باید دیتا فیلد تکست های دیکه رو با دیتا ست کنی بعد این کد رو تو تکست مورد نظر بنویس.
توی key press تکست بنویس
if keyascii=13 then
Data2.Recordset.FindFirst "NoeKhodro ='" & (text1.text) & " '"
Do While Data2.Recordset.NoMatch = False
Data2.Recordset.FindNext "NoeKhodro ='" & (text1.text) & " '"
Loop
end if
حالا به محضی که enter رو بزنی همه تکست ها رو با تکست اصلی ست میکنه .
ممنون دوست عزیز
علاوه بر توضیحاتی که جناب xxxx_xxxx دادن ذکر این کنته هم خالی از لطف نیست :
متدهای FindFirst و FindNext مربوط به کنترل Data هستن و این کنترل هم تا اونجا که من میدونم برای اتصال به بانک Acceess بالاتر از Access 97 رو پشتیبانی نمیکنه. اگه بخواین دیتابیسی رو که با نسخه ای بالاتر از Access 97 درست شده بهش وصل کنین با پیغامی مبنی بر عدم شناسایی فرمت دیتابیس روبرو میشین. البته این مشکل هم راه حل داره که راه حل اون نصب یک سرویس پک از مایکروسافته که در اون صورت هم برای انتقال برنامه مشکلات زیادی به وجود میاد. در هر صورت ممنون از زحمتی که کشیدین

Shadow Dancer
جمعه 22 شهریور 1387, 03:05 صبح
این کار زمان زیادی میگیره. در صورتی که دستورات sql بهینه تر هستند.

کد مشترک در اکثر برنامه ها می بایست محدود باشد( مثلا 4 یا 5 کاراکتر)
خب حالا تو رویداد change همون textbox کد باید چک کنی اگر Len تکست 4 شد اونوقت بانک فیلتر بشه با مقدار وارد شده. (با دستور select). کاربر هم دو سه بار که با برنامه کار کنه می فهمه که وقتی کد رو به طور کامل وارد کرد باید چند میلی ثانیه صبر کنه تا نتایج رو ببینه. اگر شما ده هزار رکورد هم داشته باشید که بعید می دونم باز هم حداکثر 3 تا چهار ثانیه طول می کشه تا بانک فیلترشه.

من خودم تو برنامه هام همین کارو می کنم. کاره خوبیه دیگه نیازی نیست کاربر کار اضافی انجام بده.

موفق باشید/
من برای رویداد Keypress تکست باکس وقتی که دکمه Enter زده بشه دستور Filter رو به این صورت نوشتم اما برنامه خطا میده. اگه بفرمایید مشکلش کجاست ممنون میشم


Adodc1.Recordset.Filter = "SELECT * FROM Sample WHERE Sample_ID = IDString"

IDString هم یک متغیر رشته ای هستش که مقدار موجود در تکست باکس توی اون ذخیره میشه

xxxxx_xxxxx
جمعه 22 شهریور 1387, 03:26 صبح
Adocdc.Recordsource="Select * from Sample Where Sample=' " & IDString & " ' "

Shadow Dancer
جمعه 22 شهریور 1387, 05:19 صبح
نوشتمش. دقیقا همون چیزی شد که میخواستم. خیلی خیلی ساده تر از اونی که فکرشو میکردم . بدون استفاده از دستورات SQL و حتی فیلتر کردن بانک. به این صورت که با یک حلقه While مقدار وارد شده با مقدار متناظر فیلدش تو اولین رکورد مقایسه میشه اگه برابر بود مقادیر بقیه فیلد ها از همون رکورد کپی میشن توی تکست باکس های مربوطه و بقیه رکوردها بررسی نمیشن در غیر اینصورت با متد Movenext به رکورد بعدی میریم و بار این مقایسه انجام میشه تا به آخر رکوردست برسیم. سمپلش رو هم گذاشتم تا اگه کسی خواست استفاده کنه. یه باگ کوچیک هم داشت که وقتی رکوردست یک بار تا آخر پیمایش میشد و مقدار جدیدی وارد میکردیم تکست باکس ها با مقدار درستی پر نمیشدن که اون رو هم رفع کردم. از راهنمایی های عزیزان xxxx_xxxx ، Mohya_z332 و NewFoxStudent هم خیلی خیلی ممنون