# Native Code > برنامه نویسی در 6 VB > مطالب مرتبط با بانکهای اطلاعاتی در VB6 >  مقایسه دو جدول

## salam20

شلام دوستان
من میخوام یک کد بنویسم  اطلاعات حدول اول را در جدول دوم پیدا کنه و در جدول سوم رکورد مربوطه را اضافه کنه من این کد ر نوشتم ولی مشکل داره و درست عمل نمیکنه  خواهش میکنم اصلاح کنید
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

دوستان باید یگم که این کد حداکثر 30رکورد رو مقایسه میکنه در حالی که جدول اول 600 و جدول دوم data 1 تعداد 2000 رکورد داره
بعد از مقایسه پیغام no curent reord  برای جدول 600 رکوردی میده 
لطفا کمک کنید

----------


## xxxxx_xxxxx

سلام،
اول اینکه، طبیعی هست که جدول 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

ببینید 
فرض کنید جدول دوم دارای 600 رکورد ثابت هست ولی جدول اول رکورد هاش از یه فایل اکسل خونده میشه و تعدادش متغیره 
باید رکورد هایی که در حدول اول هست به جدول دوم مقایسه بشه اگه تو فیلد tool noمشترک بودند کل رکورد جدول اول در جدول سوم ذخیره شه که درنهایت جدول سوم میتونه 600 رکورد داشته باشه
یعنی کل جدول اول رکوردهاش باید با جدول دوم 600 رکوردی مقایسه شه تا رکورد های متناظر جدا شوند تا جدول سوم ساختشه
حالا این کد رو با این توضیحات در صورت امکان اصلاح کنید

----------


## xxxxx_xxxxx

پس به دو تا حلقه تو در تو نیاز دارید. یکی برای پیمایش جدول1 و یکی هم برای پیمایش جدول2
بعد؛ توی بدنه حلقه داخلی، مقایسه رو انجام بدید.

----------


## salam20

از 2 تا for هم برای پیمایش جداگانه جداول استفاده کردم ولی باز نتیجه نگرفتم میشه این کد موجود رو  اصلاح کنید

----------


## xxxxx_xxxxx

چون دیتابیس رو ندارم نمیتونم تست کنم. اینو همینطوری نوشتم. نوع متغیر 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

از شما سپاسگزارم ولی باز انجام نمیده
برای دیتای 2 که جدول 600 رکوردی هست پیغام no curent record میده

----------


## salam20

در ضمن اشکال این کد اینه که فقط رکورد اول را که برابر است در دیتای 3 قرار میده

----------

