PDA

View Full Version : جلوگیری از ورود داده تکراری در تکست باکس



hamalous
سه شنبه 07 مرداد 1393, 23:20 عصر
سلام
من یه سورس دارم که با زدن کلید ایجاد عدد توی تکست باکس 1 رو درون یه عبارت ثابت قرار داده و درون تکست باکس 2 نمایش میده حالا من می خوام اگه عدد نوشته شده توی تکست باکس 1 تکراری باشه پیام بده که این داده قبلا وارد شده من از تابع instrاستفاده کردم ولی مشکل اینه که هرداده ایکه واردمی کنم چه تکراری باشه چه نباشه
این پیام رو نمایش میده مشکل کد من کجاست ؟ لطفا در این زمینه راهنمایی نمایید ممنون من سورس را ضمیمه کردم

ahmad abdoli
چهارشنبه 08 مرداد 1393, 01:09 صبح
سلام
به جای تکس باکس دوم از list box استفاده کن و بجای این کد

For i = 0 To UBound(r)
If InStr(Text2.Text, r(i)) = 0 Then MsgBox "Çíä ÏÇÏå ʘÑÇÑí ãí ÈÇÔÏ"
Exit Sub
Next
Text2 = Text2 + q + vbCrLf

از این کد استفاده کن

If List1.ListCount > 0 Then
For i = 0 To List1.ListCount
If Mid(List1.List(i), InStr(List1.List(i), "e=") + 2, 1) = Text1.Text Then
MsgBox "Çíä ÏÇÏå ʘÑÇÑí ãí ÈÇÔÏ"
Exit Sub
End If
Next
End If
List1.AddItem (q)

hamalous
چهارشنبه 08 مرداد 1393, 01:47 صبح
ممنون ولی بنا به دلایلی نمی تونم از listbox استفاده کنم و باید از textbox استفاده کنم

just4froum
چهارشنبه 08 مرداد 1393, 02:39 صبح
با سلام :

این ویرایش کد خودتون هست :


Private Sub Command1_Click()
Dim q As String
Dim r() As String
q = "a=8 b=2 d =1 e=" + Text1.Text + " f=14"
r() = Split(Text2, vbCrLf)
For i = 0 To UBound(r)
If InStr(r(i), "e=" & Text1.Text) <> 0 Then
MsgBox "Çíä ÏÇÏå ʘÑÇÑí ãí ÈÇÔÏ"
Exit Sub
End If
Next i
Text2 = Text2 + q + vbCrLf
Text1 = ""
End Sub

hamalous
جمعه 10 مرداد 1393, 15:08 عصر
یه سوال کوچیک ببخشیداینجا مطرحش کردم خواستم تایپک باز نکنم ،اگه بخوایم سطر به سطر یه فایل متنی روبخونیم ازدستور line input استفاده می کنیم سوال من اینه آیا میشه برای خوندن سطر به سطر تکست باکس هم از این دستور استفاده کرد؟اگه جوابتونمثبت هست لطفا شکل دستور اون رو برام بنویسید ممنون

karasystem
شنبه 11 مرداد 1393, 11:20 صبح
سلام

برای اجرای این فرمان بهتر است از بانک اطلاعات استفاده کنید
ماژولی برای تکراری بودن رکورد
Public Function isRecordExist(ByVal sTable As String, ByVal sField As String, ByVal sStr As String, Optional isString As Boolean) As Boolean
Dim rs As New Recordset

rs.CursorLocation = adUseClient
If isString = False Then
rs.Open "Select * From " & sTable & " Where " & sField & " = " & sStr, CN, adOpenStatic, adLockOptimistic
Else
rs.Open "Select * From " & sTable & " Where " & sField & " = '" & sStr & "'", CN, adOpenStatic, adLockOptimistic
End If
If rs.RecordCount < 1 Then
isRecordExist = False
Else
isRecordExist = True
End If
Set rs = Nothing
End Function

موفق باشید.

hamalous
شنبه 11 مرداد 1393, 12:58 عصر
ممنون دوست عزیز ولی مثل اینکه متوجه سوال من نشدی لطفا یک بار دیگه سوال من رو مطالعه فرمایید ممنون

hmbarnamenevis
شنبه 11 مرداد 1393, 23:07 عصر
من درست سوالتون رو نخوندم امیدوارم منظورتون رو خوب فهمیده باشم.

Dim q, q2 As String
Dim r() As String
q2 = "a=8 b=2 d =1 e="
q = q2 + Text1.Text + " f=14"
r() = Split(Text2, vbCrLf)
For i = 0 To UBound(r)
If (q2 + Text1.Text + " f=14" = r(i)) Then
MsgBox "Çíä ÏÇÏå ʘÑÇÑí ãí ÈÇÔÏ"
Exit Sub
End If
Next
Text2 = Text2 + q + vbCrLf
Text1 = ""

hamalous
شنبه 11 مرداد 1393, 23:41 عصر
دوست عزیز سوال من اصلا در مورد جلوگیری از تکرار شدن داده نیست اون سوال رو که یکی از دوستان لطف کردن و پاسخ دادن سوال من اینه:
اگه بخوایم سطر به سطر یه فایل متنی روبخونیم ازدستور line input استفاده می کنیم سوال من اینه آیا میشه برای خوندن سطر به سطر تکست باکس هم از این دستور استفاده کرد؟ اگه جوابتون مثبت هست لطفا شکل دستور اون رو برام بنویسید ممنون

hmbarnamenevis
دوشنبه 13 مرداد 1393, 10:41 صبح
فکر نکنم متد آماده برای این کار وجود داشته باشد؛ باید با توابع رشته ای و تکنیک های دیگر این کار را شبیه سازی کنی و خودت یه تابع LineInput برای خواندن سطر به سطر جعبه متن بنویسی.

vbhamed
سه شنبه 14 مرداد 1393, 17:59 عصر
سلام
اين يك نمونه، فقط توجه داشته باشيد كه اين برنامه جفت كاراكتر vbCrLf رو به عنوان آخر خط در نظر مي‌گيره و اگر يك خط خيلي طولاني داشته باشيد كه تو عرض تكست باكس جا نشه و خودش شكسته بشه به دو خط، كل اون رو يك خط در نظر مي‌گيره
Private Function GetLine(txt As TextBox, row As Integer) As String

Dim s() As String

s = Split(txt, vbCrLf)

If row < UBound(s) Then GetLine = s(row - 1)

End Function

Private Sub Form_Load()

MsgBox GetLine(Text1, 1)

End Sub