PDA

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



behzad_lover
جمعه 03 آبان 1387, 17:07 عصر
سلام.
دوستان عزیز من یک برنامه فرهنگ لغت درست کردم و تمام کاهاشو انجام دادم. فقط مونده من دیتابیسم(DATA) رو که تو access هست توی یک listbox نشون بدم و دو صورتی که در textbox کلمه مورد نظر نوشته شد اون گزینه توی لیست باکس نشون داده بشه.
لطفا کمکم کنید.خیلی ضروری یه.

با تشکر فراوان:بهزاد رسولی:ناراحت::ناراحت:

لطفا کمکم کنید

Mbt925
جمعه 03 آبان 1387, 19:41 عصر
شما در ارتباط با دیتابیس مشکل دارید؟
در بخش روش اتصال به دیتابیس، خوندن و نوشتن در اون و بقیه چیزای لازم توضیح داده شده.
جستجو کردن راحت تر از انتظار کشیدنه!

behzad_lover
جمعه 03 آبان 1387, 20:32 عصر
سلام
من نتونستم چیزی پیدا کنم.
یکی پیدا کردم:
list1.additem data1.recordset.fields(0)
لطفا یک نمونه برام بزارین.

Mbt925
جمعه 03 آبان 1387, 20:43 عصر
1. دیتابیس رو باز کنید.

2.رکوردها رو دونه دونه در لیست باکس قرار بدید:





For i=1 to rs.recordset
List1.Add rs.Field(0).Value
rs.MoveNext
Next




3.دیتابیس رو می بندید.

behzad_lover
جمعه 03 آبان 1387, 22:30 عصر
سلام.
من از این کد استفاده کردم:

For i = i To rs.Recordset
List1.Add rs.Field(0).Value
rs.MoveNext
Next

ولی اررور زیر رو میده:

Compile error
variable not defined

l3ai3ak
جمعه 03 آبان 1387, 22:48 عصر
روشی که شما استفاده می کنید مشکلات بسیار زیادی داره . مثل : سرعت کم . کد زیادتر . باگ زیادتر .

به نظر من از کنترل Data که به صورت پیش فرض وجود داره استفاده کن .

و کنترل Microsoft data bound list controls رو Add کن
بعد این لیست باکس رو به کنترل data لینک میکنی .

توی TextBox که کلمه رو نوشتن میتونی سرچ کنی . یعنی از متد Data1.Recordset.FindFirst استفاده کنی .
در این حالت شما نیاز بسیار کمی به کد نویسی داری و با استفاده از باند کردن سرعت بسیار زیادی را به دست خواهی آورد

behzad_lover
شنبه 04 آبان 1387, 00:20 صبح
دوست عزیز من از روشی که پیشنهاد کردید خیلی ممنونم.
ولی من می خوام که این عمل در combo obx انجام بشه.
به خاطر اینکه خیلی کدهای دیگه ای هم هست که من به این شی نسبت دادم.

behzad_lover
شنبه 04 آبان 1387, 12:15 عصر
دوستان لطفا به من کمک کنید.
من فقط می خوام که لیست کلماتی که من در دیتابیسم ذخیره کردم رو توی یک listbox یا combo نمایش بده.
خواهش میکنم در صورت ممکن یک نمونه بگزارید و یا سورسش رو به من بدین.خیلی ضروریه.

l3ai3ak
شنبه 04 آبان 1387, 12:42 عصر
اسم فیلد ها رو بگو من دقیقاً کد رو بنویسم برات :

behzad_lover
شنبه 04 آبان 1387, 12:47 عصر
از لطفتون ممنونم.
فعلا اگه این رو آزمایشی واسم بنویسین یاد می گیرم.
English_Word
دستتون درد نکنه.

parsajey
شنبه 04 آبان 1387, 12:48 عصر
دوستان لطفا به من کمک کنید.
من فقط می خوام که لیست کلماتی که من در دیتابیسم ذخیره کردم رو توی یک listbox یا combo نمایش بده.
خواهش میکنم در صورت ممکن یک نمونه بگزارید و یا سورسش رو به من بدین.خیلی ضروریه.

سلام دوست عزیز
دوست مون Mbt925 کاملا درست گفتند - یه جستجو هم می کردی چیز های خوبی پیدا می کردی
اینو ببین به دردت می خوره

http://barnamenevis.org/forum/showthread.php?t=127752

behzad_lover
شنبه 04 آبان 1387, 13:03 عصر
سلام پارسا جان.
من از روشی که شما گفتین استفاده کردم. ولی رکورد های من حدود 52374 هستند.
و این روش زمان زیادی صرف می کنه که برنامه لود بشه.
اگر روش دیگری وجود داره بهم بگین.
با تشکر فراوان:بهزاد

l3ai3ak
شنبه 04 آبان 1387, 13:08 عصر
Private Sub Combo1_Change()
Data1.Recordset.FindFirst ("English_Word like '" & Combo1.Text & "'*")

End Sub


در این روش فقط کلمه رو جستجو میلنه و اگه اون کلمه و یا مشابه اون موجود بود موقعیت رکورد رو به اون کلمه خواهد برد . برای جستوی بعدی باید از دستور Data1.Recordset.FindNext استفاده کنی .
یعنی شما باید یک Command به فرم اضافه نمائید و با آن Data1.Recordset.FindNext
را انجام دهید

behzad_lover
شنبه 04 آبان 1387, 13:41 عصر
دستت درد نکنه.
مرسی.مشکلم حل شد.
من از کد زیر استفاده کردم:

Dim i As Long
For i = 1 To 52374
Combo1.AddItem Data1.Recordset.Fields(0)
Data1.Recordset.MoveNext
Next
ولی همون طور که گفتم تعداد رکورد ها خیلی زیادن و برای لود فرم زمان زیادی صرف می شه.
هیچ راه حلی وجود نداره که زمان کمی صرف بشه.

l3ai3ak
شنبه 04 آبان 1387, 13:54 عصر
این روشی که شما استفاده می کنید کلاً ربطی به برنامه نویسی ADO و یا DAO نداره شما چیزی شبیه FoxPro می نویسی .

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

behzad_lover
شنبه 04 آبان 1387, 13:56 عصر
می شه یکم بیشتر توضیح بدی!!!

l3ai3ak
شنبه 04 آبان 1387, 14:03 عصر
ببین دوست من شما وقتی این کار رو میکنی تمامی فیلد ها رو باید مرور کنی . یعنی از رکورد اول تا رکورد آخر خود این عمل کار بسیار زمانبری هست در عین حال شما از دستور Additem برای لیست باکس نیز استفاده میکنید که این کار هم باعث میشه پردازش های زیادی انجام بشه و زمان بازم بالاتر میره .

بعضی وقتها من هم مجبور میشوم که این کار رو بکنم ولی نه برای دیتابیس و تنها راهی که برای بالا بردن سرعت در زمان add پیدا کردم False کردن Visable هست .

اما در رابطه با روش پیش نهادی که من گفتم بگم :
من پیش نهاد می کنم که شما از امکان DAO و Bound کردن استفاده کنید .

behzad_lover
شنبه 04 آبان 1387, 14:07 عصر
دوست من چنانچه که گفتم یک دیتابیس فرهنگ لغت هستش و حجم دیتابیس خیلی زیاده.من نمیتونم اون رو آپلود کنم.
شما نمیتونین یک نمونه برام بزارین.
اگه این لطف رو در حق من بکنید خیلی ممنون می شم.

l3ai3ak
شنبه 04 آبان 1387, 14:16 عصر
رکوردهای اون رو Delete کن فقط 10 تا بمونه . حجمش کم میشه .

behzad_lover
شنبه 04 آبان 1387, 14:23 عصر
این هم دیتابیس

l3ai3ak
شنبه 04 آبان 1387, 15:32 عصر
این دیتابیس که آپلود کردید فیلد معنی فارسی رو نداره ولی من به جای اون از فیلد دوم که فیلد اندیس هست استفاده کردم
درضمن رکوردهای شما همگی آخرشون Space دارند و این باعث میشه که مقایسه مستقیم انجام نشه .

به هر حال من اینو نوشتم :
http://www.box.net/shared/26kdcq1va1

به شکلی که شما وقتی حرف A رو میزنی تمامی فیلدهایی که با A شروع می شوند رو تولیست میاره .
تنها کاری که باید بکنی فایل دیتا بیس رو جایگزین کن . (Replace)

behzad_lover
شنبه 04 آبان 1387, 23:34 عصر
دوست عزیز دستتون درد نکنه.
من بعد از چندین ساعت تلاش تونستم برنامم رو تکمیل کنم.
از شما هم سپاس فراوان دارم که مرا در ساختن این برنامه کمک کردید.

shayesteh_arfa
یک شنبه 05 آبان 1387, 18:45 عصر
سلام دوست عزيز
براي انتقال داده ها از ركورد ست به ليست باكس از دستور زيز استعاده كن
with recordset
if .bof = false then .moveferst
do while .eof=false
list1.additem recordset!fildname
.movenext

end with

توجه :
در بين نام ركوردست و نام فيلد از علامت تعجب استفاده كنيد .
(!) اين علامت
قبل از كلمات كليدي eof و bof از نقطه (.) استفاده كنيد
اليته اگر از with و end with استفاده كرده ايد .