PDA

View Full Version : قرار دادن چند فيلد جدول در dbcombobox



shila_php
دوشنبه 19 مرداد 1388, 19:28 عصر
سلام من قبلا هم این سوال رو پرسیده بودم ولی به جواب نرسیدم:ناراحت:

من یه جدول بنام دانشجو دارم با 3 تا فیلد نام، نام خانوادگی و معدل.
حالا میخوام تو یه فرم با استفاده از DBcomboBox لیست افراد رو بیاره . ولی مشکل کار من اینجاست که کاربر میتونه یه نام رو با چندین نام خانوادگی انتخاب کنه."اینطوری کاربر میتونه رکوردهای جدیدی ایجاد کنه".
ولی من نمیخوام اینطوری باشه ، مثلا اگه یه اسم بنام علی وجود داشته باشه فقط و فقط نام خانوادگی اونو بیاره و از اوردن بقیه نام های خانوادگی چشم پوشی کنه
یا اگه من یه اسم علی با 100 تا نام خانوادگی متفاوت داشته باشم کاربر بتونه نام خانوادگی رو که میخواد متناسب با اسم علی انتخاب کنه.
بعد یه مسله ی دیگه ایم که هست، وقتی کاربر نام و نام خانوادگی رو انتخاب میکنه معدش رو هم نمایش بده.

ميشه بگين اينكار امکانپذير هست يا نه و اگه هست كد اونو چطور بايد بنويسم؟


با تشکر

HjSoft
دوشنبه 19 مرداد 1388, 21:50 عصر
براي سوال اولتون كه گفتين كاربر ميتونه به راحتي هر چي بخواد وارد كنه ، مقدار Style رو برابر dbcdropdownlist بزارين . در ضمن استفاده از دستورات sql و Filter ميتونه در اين زمينه كمكتون كنه .
همشون هم امكان پذيره .

shila_php
سه شنبه 20 مرداد 1388, 21:03 عصر
براي سوال اولتون كه گفتين كاربر ميتونه به راحتي هر چي بخواد وارد كنه ، مقدار Style رو برابر dbcdropdownlist بزارين . در ضمن استفاده از دستورات sql و Filter ميتونه در اين زمينه كمكتون كنه .
همشون هم امكان پذيره .

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

HjSoft
چهارشنبه 21 مرداد 1388, 12:45 عصر
خوب در Event مربوط به Lost Focus ، ميتونيد از تابع فيلتر استفاده كنيد :

rst.filter = "name = '" & cmb.text & "'"

shila_php
چهارشنبه 21 مرداد 1388, 14:15 عصر
خوب در Event مربوط به Lost Focus ، ميتونيد از تابع فيلتر استفاده كنيد :

rst.filter = "name = '" & cmb.text & "'"


میشه یه نمونه کد از این چیزای که گفتین بذارین منظورتونو کامل متوجه نمیشم!
مرسی

HjSoft
چهارشنبه 21 مرداد 1388, 21:04 عصر
يعني در combo_lostfocus كدي رو كه گفتم بزار .

shila_php
شنبه 24 مرداد 1388, 13:34 عصر
ببین من منظورتو میفهمم ولی کامل متوجه نمیشم حالا یه نمونه از برنامه رو میذارم.
امیدوارم منظورمو فهمیده باشی.

HjSoft
یک شنبه 25 مرداد 1388, 11:42 صبح
سلام ، ببخشيد چند روزي جوابتون دير شد .
سورس رو نگاه كردم ، اولا كه خيلي خيلي خيلي مشكل داشت .
1 - ديتابيس 2000 به بالا با data كار نميكنه .
2- بهتره در نام فيلد ها از فاصله استفاده نكنيد مثل last name
3- بهتره براي چسباندن دو مقدار به هم ديگه از + استفاده نكنيد ، چون براي جمع بيشتر كاربرد داره . از & استفاده كنيد
4- بهتره از Adodc استفاده كنيد ، چون راحت تره .
5- بهتره براي استفاده از فيلد ها در كمبو از dbcombobox استفاده نكنيد . البته مشكلي پيش نمياد ولي پيشنهاد من اينه كه استفاده نكنيد يا به صورت ديناميك وصل بشيد .
6-دركل ساختار برنامه شما اشتباه . توضيحات بيشتر به صورت خصوصي ارسال شد .
تغييرات :
1- تعويض بانك برنامه به 2000
2-ساخت مجدد جدول همراه با Id و PrimaryKey
3-تعويض data با adodc
4-كانكت شدن ديناميك و عدم نياز به كپي بانك در مسير خاص
5-استفاده از كمترين اكتيو ايكس ( يعني حذف dbcombobox )
6- ريختن اطلاعات به صورت ديناميك در combo
پيشنهادات : به صورت خصوصي ارسال شد .

shila_php
یک شنبه 25 مرداد 1388, 17:35 عصر
از راهنماییت ممنون
همین اول گقته باشم برنامه رو خوب نوشتی ولی شاید من خیلی جوجه برنامه نویسم:خجالت:
من برنامه رو دیدم ولی بعضی جاهاشو متوجه نشدم مثلا کدی که برای کومبوها نوشتی نامفهومه
ولی در کل برنامه اجرا میشه ولی جواب نمیده
بعد یه مساله دیگه ای هم هست اینکه کدهاتو تست کن فکر کنم بعضی جاهاش مشکل داشته باشه
قرار بود که نام همراه نام خانوادگی نمایش داده بشه بخصوص (قبلا هم اینا رو گفتم)میخوام برنامه طوری باشه که رکورد جدید تولید نشه(مثلا وقتی یه نام رو انتخاب میکنم فقط نام خانوادگی اون رو نمایش بده و بقیه نام خانوادگی ها نمایش داده نشه) یعنی فکر کنم تابع فیلتر ایراد داره
کد اسکی 13 واسه چیه
یه فایل متنی هم هم همراه پروژه هست ،که اونم نامفهومه...
در کل مرسی که کمکم کردی.:قلب:

HjSoft
سه شنبه 27 مرداد 1388, 17:18 عصر
سلام ، فكر نكنم كد هاي من مشكل داشته باشه .و مشكل همونطور كه در پيغام خصوصي گفتم ، مشكل از سيستمتونه ، شما بايد نام و نام خانوادگي رو در يك فيلد ثبت كنيد ، اينطوري خيلي بهتره . در ضمن باشه تا چند ساعت آينده برنامه رو تغيير ميدم و براتون ميزارم . در ضمن لازم نيست ار بانك ديگه اي استفاده كنيد بلكه از بانك داخل پوشه استفاده كنيد كافيه .در ضمن هيچ فايل تكستي همراه برنامه نيست و الان هم داره درست كار ميكنه يعني شما براي مثال Hamed Jafarzadeh رو انتخاب كني اگر وجود داشته باشه ، معدلش رو مياره . يه امتحان بكن
كد اسكي 13 منظور Enter است يعني شما اگر روي كامبو فاميل كليد اينتر را بزنيد معدل را خواهيد ديد .
كد مربوط به كمبو نا مفهوم نيست ، شما تازه كاري ! :چشمک:
اون كد دقيقا اين كار ها رو ميكنه .

adodc1.Recordset.MoveFirst
cmb_name.Clear
For i = 0 To adodc1.Recordset.RecordCount - 1
cmb_name.AddItem adodc1.Recordset.Fields("name")
lastname.AddItem adodc1.Recordset.Fields("lastname")
adodc1.Recordset.MoveNext
Next i
به اولين ركورد ميره .
كمبو مربوط به نام ها پاك ميشه البته ، يادم رفت كمبو ديگرم پاك كنم . البته توي برنامه مشكلي پيش نمياره .
يك حلقه For به تعداد ركورد هاي جدول ايجاد ميشه . 1 واحد هم كم ميشه چون از 0 ميخواد شروع كنه . البته ميتونيد 0 رو به يك تغيير بدين تا -1 نخواد.
.
بعد اولين ركورد رو اسم و فاميل رو در كمبو هاي مربوطه ميريزه .
.
ميره ركورد بعدي
.
كار ها مجددا تكرار ميشه .

تو كد هاتون دقيقا اين رو Paste كنيد تا به محض انتخاب نام ، فاميل هاي مربوطه به نمايش در بياد .

Private Sub cmb_name_Click()
adodc1.Recordset.Filter = "name ='" & cmb_name.Text & "'"
If adodc1.Recordset.RecordCount <> 0 Then
adodc1.Recordset.MoveFirst
lastname.Clear
For i = 0 To adodc1.Recordset.RecordCount - 1
lastname.AddItem adodc1.Recordset.Fields("lastname")
adodc1.Recordset.MoveNext
Next i
End If
End Sub

shila_php
سه شنبه 27 مرداد 1388, 20:38 عصر
سلام و ممنون از اینکه کمکم کردین:تشویق:

کدها رو تست کردم و جواب داد الان مشکلی نداره ولی اگه من فایل exe این برنامه رو بسازم مشکلی واسه بانک اطلاعاتی پیش نمیاد؟

HjSoft
سه شنبه 27 مرداد 1388, 20:58 عصر
نه ، البته طبيعتا نبايد مشكلي پيش بياد . اگر مشكلي پيش اومد از اون راهايي كه براتون فرستادم ، اقدام كنيد تا سريعتر به جواب برسيد .

shila_php
چهارشنبه 28 مرداد 1388, 20:54 عصر
سلام ببخشد من مزاحم میشم دوباره:بامزه:
من اصلا از کدهای sql استفاده نکردم و چیزیم نمیدونم تا اینجا هم که فهمیدم خودش کلیه.
این یه قسمت از قطعه کد برنامه هستش که توی form_load نوشته شده.
تا اینجا تونستم یه جدول رو روی فرمم بیارم ولی من میخوام از چندتا جدول که همشون از یک بانک اطلاعاتی هستن استفاده کنم:اشتباه:
مثلا میخوام جدول ostad رو هم اضافه کنم حالا تو قسمت form_load چی باید به کدها اضافه کنم؟



Private Sub Form_Load()


Dim dbPath As String
Dim SQl As String
dbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\nemoneh.mdb;Persist Security Info=False"

SQl = "SELECT * FROM daneshjo"
With adodc1
.ConnectionString = dbPath
.CommandType = adCmdText
.RecordSource = SQl
.Refresh
End With

adodc1.Recordset.MoveFirst
cmb_name.Clear
For i = 0 To adodc1.Recordset.RecordCount - 1
cmb_name.AddItem adodc1.Recordset.Fields("name")
lastname.AddItem adodc1.Recordset.Fields("lastname")
adodc1.Recordset.MoveNext
Next i
Exit Sub

HjSoft
پنج شنبه 29 مرداد 1388, 08:53 صبح
شما اين كد رو جايگزين كنيد :

Private Sub Form_Load()


Dim dbPath As String
Dim SQl As String
Dim SQl_1 As String
dbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\nemoneh.mdb;Persist Security Info=False"

SQl = "SELECT * FROM daneshjo"
SQl = "SELECT * FROM ostad"
With adodc1
.ConnectionString = dbPath
.CommandType = adCmdText
.RecordSource = SQl
.Refresh
End With
With adodc1
.ConnectionString = dbPath
.CommandType = adCmdText
.RecordSource = SQl_1
.Refresh
End With

adodc1.Recordset.MoveFirst
cmb_name.Clear
For i = 0 To adodc1.Recordset.RecordCount - 1
cmb_name.AddItem adodc1.Recordset.Fields("name")
lastname.AddItem adodc1.Recordset.Fields("lastname")
adodc1.Recordset.MoveNext
Next i
Exit Sub

shila_php
پنج شنبه 29 مرداد 1388, 09:36 صبح
[quote=wolf-sky;784950]شما اين كد رو جايگزين كنيد :
[code]Private Sub Form_Load()


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



Private Sub Form_Load()

Dim dbPath As String
Dim SQl As String
Dim SQl_1 As String
dbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\nemoneh.mdb;Persist Security Info=False"
SQl = "SELECT * FROM daneshjo"
SQl_1 = "SELECT * FROM ostad"
With adodc1
.ConnectionString = dbPath
.CommandType = adCmdText
.RecordSource = SQl
.Refresh
End With
With Adodc2
.ConnectionString = dbPath
.CommandType = adCmdText
.RecordSource = SQl_1
.Refresh
End With

HjSoft
پنج شنبه 29 مرداد 1388, 17:35 عصر
خوب اين كد كه اشكالي نداره . شما گفتي يك جدول به نام استاد در بانكت داري و ميخواي وصل كني به يك گريد خوب اين كار كانكشن رو انجام ميده و شما كافيه يك adodc و يك grid روي فرمتون بذاريد و به هم وصل كنيد . ( فكر ميكردم اينقدر ميدونيد كه دوتا شي روي فرمتون بذارين . آخه كد خودش داره داد ميزنه كه يك adodc2 ميخواد ) بالاخره باز هم موفق باشي :اشتباه: