ورود

View Full Version : مقایسه دو جدول



salam20
چهارشنبه 12 آبان 1389, 21:46 عصر
شلام دوستان
من میخوام یک کد بنویسم اطلاعات حدول اول را در جدول دوم پیدا کنه و در جدول سوم رکورد مربوطه را اضافه کنه من این کد ر نوشتم ولی مشکل داره و درست عمل نمیکنه خواهش میکنم اصلاح کنید

Data1.Recordset.MoveLast
Data1.Recordset.MoveFirst
For d = 1 To Data1.Recordset.RecordCount
If Data1.Recordset.Fields("Tool No").Value = Data2.Recordset.Fields("sh wagon").Value Then
Data3.Recordset.AddNew
Data3.Recordset.Fields("Tool No").Value = Data1.Recordset.Fields("Tool No").Value
Data3.Recordset.Fields("Nahie Descript").Value = Data1.Recordset.Fields("Nahie Descript").Value
Data3.Recordset.Fields("Station Descript").Value = Data1.Recordset.Fields("Station Descript").Value
Data3.Recordset.Fields("Station Exit Date").Value = Data1.Recordset.Fields("Station Exit Date").Value
Data3.Recordset.Fields("Wagon 7Digit Code").Value = Data1.Recordset.Fields("Wagon 7Digit Code").Value
Data3.Recordset.Fields("Source").Value = Data1.Recordset.Fields("Source").Value
Data3.Recordset.Fields("Destination").Value = Data1.Recordset.Fields("Destination").Value
Data3.Recordset.Update
Data1.Recordset.MoveNext
Data2.Recordset.MoveNext
Else
Data2.Recordset.MoveNext
Data1.Recordset.MoveNext

End If
Data1.Recordset.MoveNext
Data2.Recordset.MoveNext
Next d
Data3.Refresh
MsgBox "ÇäÌÇã ÔÏ", vbOKOnly, ""
دوستان من به این کد خیلی احتیاج دارم

salam20
پنج شنبه 13 آبان 1389, 10:28 صبح
دوستان باید یگم که این کد حداکثر 30رکورد رو مقایسه میکنه در حالی که جدول اول 600 و جدول دوم data 1 تعداد 2000 رکورد داره
بعد از مقایسه پیغام no curent reord برای جدول 600 رکوردی میده
لطفا کمک کنید

xxxxx_xxxxx
پنج شنبه 13 آبان 1389, 16:49 عصر
سلام،
اول اینکه، طبیعی هست که جدول 1 و جدول 2 باید تعداد رکوردهاشون یکسان باشه (اینطور که شما دارید مقایسه می کنید)

اصلاً شما قصد دارید چطور عمل مقایسه رو انجام بدید؟ یعنی چه رکوردهایی با هم مقایسه بشن؟
تو کد بالا، رکوردهای متناظر از جدول1 و جدول2 مقایسه میشه. البته یکی در میون!!!



این قسمت اشتباه هست:

Data1.Recordset.MoveNext
Data2.Recordset.MoveNext
Else
Data2.Recordset.MoveNext
Data1.Recordset.MoveNext

End If
کاری که داره در صورت درستی شرط انجام میشه در حالت عدم برقراری شرط هم انجام میشه!
و باز بدتر در ادامه اش:

Data1.Recordset.MoveNext
Data2.Recordset.MoveNext
Else
Data2.Recordset.MoveNext
Data1.Recordset.MoveNext

End If
Data1.Recordset.MoveNext
Data2.Recordset.MoveNext
Next d

!!!
قسمت های قرمز رنگ رو حذف کنید. اگر قرار هست یک دستور در هر دو حالت برقراری و عدم برقراری شرط انجام بشه بهتر این هست که اون دستور رو خارج از بلاک if بنویسیم.
در حال حاظر، در هر دور حلقه، دو بار Recordset ها MoveNext میشن. یعنی رکوردها یکی در میون مقایسه میشه.

salam20
پنج شنبه 13 آبان 1389, 20:05 عصر
ببینید
فرض کنید جدول دوم دارای 600 رکورد ثابت هست ولی جدول اول رکورد هاش از یه فایل اکسل خونده میشه و تعدادش متغیره
باید رکورد هایی که در حدول اول هست به جدول دوم مقایسه بشه اگه تو فیلد tool noمشترک بودند کل رکورد جدول اول در جدول سوم ذخیره شه که درنهایت جدول سوم میتونه 600 رکورد داشته باشه
یعنی کل جدول اول رکوردهاش باید با جدول دوم 600 رکوردی مقایسه شه تا رکورد های متناظر جدا شوند تا جدول سوم ساختشه
حالا این کد رو با این توضیحات در صورت امکان اصلاح کنید

xxxxx_xxxxx
پنج شنبه 13 آبان 1389, 20:15 عصر
پس به دو تا حلقه تو در تو نیاز دارید. یکی برای پیمایش جدول1 و یکی هم برای پیمایش جدول2
بعد؛ توی بدنه حلقه داخلی، مقایسه رو انجام بدید.

salam20
پنج شنبه 13 آبان 1389, 20:45 عصر
از 2 تا for هم برای پیمایش جداگانه جداول استفاده کردم ولی باز نتیجه نگرفتم میشه این کد موجود رو اصلاح کنید

xxxxx_xxxxx
جمعه 14 آبان 1389, 00:08 صبح
چون دیتابیس رو ندارم نمیتونم تست کنم. اینو همینطوری نوشتم. نوع متغیر ToolNo رو متناسب با فیلدتون توی جدول بزارید.


Data1.Recordset.MoveFirst
Data2.Recordset.MoveFirst

For i = 1 To Data1.Recordset.RecordCount
Dim ToolNo As Integer
ToolNo = Data1.Recordset.Fields("Tool No").Value

For j = 1 To Data2.Recordset.RecordCount
If ToolNo = Data2.Recordset.Fields("sh wagon").Value Then
Data3.Recordset.AddNew
Data3.Recordset.Fields("Tool No").Value = Data1.Recordset.Fields("Tool No").Value
Data3.Recordset.Fields("Nahie Descript").Value = Data1.Recordset.Fields("Nahie Descript").Value
Data3.Recordset.Fields("Station Descript").Value = Data1.Recordset.Fields("Station Descript").Value
Data3.Recordset.Fields("Station Exit Date").Value = Data1.Recordset.Fields("Station Exit Date").Value
Data3.Recordset.Fields("Wagon 7Digit Code").Value = Data1.Recordset.Fields("Wagon 7Digit Code").Value
Data3.Recordset.Fields("Source").Value = Data1.Recordset.Fields("Source").Value
Data3.Recordset.Fields("Destination").Value = Data1.Recordset.Fields("Destination").Value
Data3.Recordset.Update
End If
Data2.Recordset.MoveNext
Next j

Data1.Recordset.MoveNext
Next i
Data3.Refresh

salam20
جمعه 14 آبان 1389, 11:31 صبح
از شما سپاسگزارم ولی باز انجام نمیده
برای دیتای 2 که جدول 600 رکوردی هست پیغام no curent record میده

salam20
جمعه 14 آبان 1389, 11:46 صبح
در ضمن اشکال این کد اینه که فقط رکورد اول را که برابر است در دیتای 3 قرار میده