ورود

View Full Version : پیدا کردن رکوردهای تکراری



evilboy
یک شنبه 07 مرداد 1386, 16:46 عصر
من توی برنامم یک فرم ثبت مشتری دارم که کد - نام - نام خانوادگی - نام پدر - و غیره ثبت می شه چجوری می تونم رکوردهای تکراری رو پیدا کنم که یک مشتری دو بار ثبت نشه
دیتابیس من اکسس
ممنون

majidghost
یک شنبه 07 مرداد 1386, 16:56 عصر
شما باید یکی از فیلد هارو به عنوان پرایمری کی تعریف کنی

evilboy
یک شنبه 07 مرداد 1386, 17:11 عصر
فیلد کد من پرایمری کی تعریف شده
دوست عزیز منظورم اینه که مثلا توی ثبت مشتری ممکنه نام و نام خانوادگی تکراری باشه و ثبتشم موردی نداره ولی اگر نام و نام خانوادگی و نام پدر و شماره تلفن تکراری باشه مشخص می شه که مشخصات این فرد قبلا ثبت شده و نباید کد جدید بگیره
ممنون

majjjj
یک شنبه 07 مرداد 1386, 20:28 عصر
فیلد کد من پرایمری کی تعریف شده
دوست عزیز منظورم اینه که مثلا توی ثبت مشتری ممکنه نام و نام خانوادگی تکراری باشه و ثبتشم موردی نداره ولی اگر نام و نام خانوادگی و نام پدر و شماره تلفن تکراری باشه مشخص می شه که مشخصات این فرد قبلا ثبت شده و نباید کد جدید بگیره
ممنون
میشه بیشتر توضیح بدید که میخواهید چکار کنید
بالاخره شما باید از یک فیلد استفاده کنید که منحصر به فرد باشه مانند شماره ملی

evilboy
یک شنبه 07 مرداد 1386, 23:16 عصر
آخه دوست عزیز توی برنامه حسابداری و ثبت مشتری، شماره ملی رو که ثبت نمی کنن
معمولا کد- نام - نام خانوادگی - نام پدر - تلفن - و آدرس. معمولا اینا رو ثبت می کنن. ممکن هم هست که هر کدوم از این فیلدها تکراری ثبت بشه مثلا دو تا مشتری با نام مهدی ثبت بشه و یا با نام خانوادگی مشترک ثبت بشه ولی ممکن نیست که دو تا مشتری نام مشترک، نام خانوادگی مشترک، نام پدر مشترک و تلفن مشترک داشته باشند که اگر اینطور باشه یعنی این فرد تکراریه و قبلا ثبت شده
امیدوارم تونسته باشم منظورم رو رسونده باشم

j.farazani
دوشنبه 08 مرداد 1386, 00:21 صبح
سلام
فایل رو باز کن TABLE1 رو Design کن و از نوار ابزار Indexes رو کلیک کن فکر کنم مشکلت رو حل کنه

باز هم اگه مشکلی داشتی و کاری از دستم بر اومد در خدمتم

evilboy
دوشنبه 08 مرداد 1386, 06:58 صبح
دوست عزیز توی پست های بالایی نوشتم که فیلد کد من پرایمری کی است

atenaa
دوشنبه 08 مرداد 1386, 14:25 عصر
اگه در نظر بگیریم که شما نام و نام خانوادگی و تلفن رو دارید با تکست باکس از ورودی می گیرید و می خواید چک کنید که اگه وجود داره دو باره اضافه نکنید چاره اون یک سلکت سادست

Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
a = (name.Text)
b = (family.Text)
c = (tel.Text)
cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=first;Data Source=(local)"
strsql = "select * from userpass2 where name like '" & a & "' and family like '" & b & "' and tel like '" & c & "'"
rst.Open strsql, cn, 1, 3
If rst.EOF = False Then
MsgBox ("تکراری")
else
msgbox("غیر تکراری")
end if
If cn.State = adStateOpen Then cn.Close
If rst.State = adStateOpen Then rs.Close
من اینجا فقط نام و نام خانوادگی و تلفن رو چک کردم ولی شما همه فیلدهاتون رو چک کنید

evilboy
دوشنبه 08 مرداد 1386, 17:18 عصر
دوست عزیز من با DataEnvironment کار می کنم. اگر می تونید، این کدها رو با DataEnvironment بنویسید در غیر اینصورت لطفا یک توضیح مختصری راجع به این کدها بدید تا خودم بنویسم
ممنون

atenaa
سه شنبه 09 مرداد 1386, 08:09 صبح
ببخشید یعنی ازdata enviroment برای اتصال استفاده می کنید؟
در مورد کدوم خطهای کد توضیح بدم ؟اتصال به پایگاه داده از طریق ado منظورتونه؟

evilboy
سه شنبه 09 مرداد 1386, 14:10 عصر
بله من ازdata enviroment برای اتصال استفاده می کنم
دوست عزیز من اصلا ADO کار نکردم برا همن با کدهاش آشنا نیستم
شما فقط توضیح بده که این کدها چیکار می کنن
ممنون

atenaa
سه شنبه 09 مرداد 1386, 21:55 عصر
در مورد توضیح کدها از con که از نوع adodb.connection تعریف شده برای اتصال به پایگاه داده استفاده میشه و connection string رو باید با اون open کنید بعد strsql هم دستور sqlتون که باید به جای userpass2 که تو پست 8 نوشتم اسم table خودتون رو بنویسید و به جای فیلدهای name , family , tel که من نوشتم اسم فیلدهای خودتون رو بنویسید(در کل دستور sql مورد نظر خودتون رو بنویسید)و از recordset هم برای انتخاب رکوردها یا جداول مورد نظرتون می تونید استفاده کنید که اینجا چون شما گفتید می خواید چک کنید تکراری نباشه من تو اون کد select ای رو نوشتم که چک کنه آیا رکوردی با نام , نام خانوادگی و تلفن که از ورودی می گیرید از قبل وجود داره یا نه
اگه از قبل این موارد وجود داشته باشه بعد اینکه rst رو open می کنیم حد اقل باید یک رکورد رو بر گردونه پس rst.eof ما false میشه
البته به جای چک کردن rst.eof می تونید از rst.RecordCount استفاده کنید(تعداد رکوردهایی که با select انتخاب شدن رو بر می گردونه) به این صورت
که اگر rst.RecordCount=-1 پس تکراری نیستند و هیچ رکوردی انتخاب نشده , ولی اگه مخالف -1 باشه حتما یک رکورد با این مشخصات از قبل وجود داره
امیدوارم زیاد توضیح نداده باشم d:

oskarimbns
سه شنبه 29 مرداد 1387, 07:19 صبح
دوست عزيز من با ado و datagrid با اكسس ارتباط برقرار كردم و كد بالا را امتحان كردم جواب نداد لطفا بيشتر توضيح بدهيد.متشكرم

vbhamed
سه شنبه 29 مرداد 1387, 08:59 صبح
سلام

كدي كه دوستمون atenaa نوشتن درسته فقط ايشون براي Sql Server نوشتن كه با اجازشون من يكم تغيير مي دم تا براي اكسس و با Ado به شكل زير در بياد
ضمنا هر چهار تا فيلد از نوع متني در نظر گرفته شده
txtName و ... نام TextBox هاي مربوطه، DatabaseName نام بانك اطلاعاتي و Table_Name نام جدول مربوطه هست



Private Sub Form_Load()

On Error Resume Next

Dim x As ADODB.Connection

Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim dbase As String, n$, f$, fa$, t$, Sql$

n = Trim$(txtName)
f = Trim$(txtFamily)
fa = Trim$(txtFather)
t = Trim$(txtTel)

dbase = Replace(App.Path & "\DatabaseName.mdb", "\\", "\")

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbase & ";Persist Security Info=False"
Sql = "Select * From Table_Name Where Trim(name) = '" & n & "' and Trim(family) = '" & f & "' and Trim(Father) = '" & fa & "' and Trim(Tel) = '" & t & "'"

rst.Open Sql, cn, 1, 3

If rst.RecordCount > 0 Then
MsgBox "Repeat"

Else
MsgBox "Not Repeat"

End If

If cn.State = adStateOpen Then cn.Close
If rst.State = adStateOpen Then rst.Close

End Sub