PDA

View Full Version : جایگذاری اطلاعات



farbod61
پنج شنبه 06 تیر 1392, 11:14 صبح
سلام دوستان - خسته نباشید
یک سوال داشتم
من یک بانک اطلاعاتی SQL دارم
توی این بانک دو تا تیبل هستش
توی تیبل اول من فیلد بارکد و فیلد شماره سریال دارم
توی تیبل دوم هم همینطور
مشکل من اینه که توی تیبل دومم به خاطر یه سهل انگاری ستون شماره سریال چیزی توش ثبت نشده
حالا من میخوام بگم که این دو تا جدول رو نگاه کن ( جدول شماره 1 کامل) ( جدول شماره 2 ناقص)
میخوام بگم تو جدول شماره 2 رو نگاه کن ، هرجا شماره سریال جاش خالی بود از جدول شماره یک اون رو برداره و تو این جدولم کپی کنه و بزاره تو جای خودش
نقطه مشترکشونم بارکد هستش دیگه
یعنی چی؟ تو جدول شماره دو میبینه شماره سریال نیست بارکدش رو نگاه کنه و از جدول شماره یک اون بارکد رو پیدا کنه و شماره سریالش رو برداره بزاره اینور تو جدول شماره 2
برای درک بهتر یه عکس گذاشتم


یک سوال دیگه هم داشتم
من میخوام بگم توی بانک اطلاعاتی بگرده ( یک تیبل ) و یک نام بهش بدم ، این نامها رو پیدا کنه و همشون رو با نامی که من میدم جایگذین کنه


سلام دوستان
این کد رو نوشتم، تست کردم ، درست کار کرد
فقط یه ایرادی داره از دیتاست و ... استفاده کردم که به دل خودم ننشست
دوستان اگه کسی راه بهتر و پدر مادر دارتر سراغ داره بزاره
ممنونم

For i As Integer = 0 To _1DataGridView.RowCount - 1
_1BindingSource.MoveNext()
Me._2TableAdapter.FillBy_barcode(Me.DataSet1._2, Me.BarcodeTextBox.Text)
Me.HospitalTextBox1.Text = Me.HospitalTextBox.Text
Me._2BindingSource.EndEdit()
Me._2TableAdapter.Update(Me.DataSet1._2)
Next

shahryari
پنج شنبه 06 تیر 1392, 13:42 عصر
سلام
دوست عزیز با یک دستور آپدیت ساده و حلقه میتوان تمامی این اطلاعات را اصلاح کرد به شر طی که فیلد بارکد رکورد تکراری نداشته باشد و مقدارهای جا افتاده هم به ترتیب باشند یعنی اگر مابین عدد 1003 و 1007 بیشتر و یا کمتر از 3 رکورد خالی باشد کل سیستم بهم میریزد
یک روش دیگر هم این است که خود فیلد سریال را برسی کنی و مقدار اولی را در یک متغیر ذخیره کنی و در زمانی که به رکورد خالی رسید (یعنی نال بود یا مقدار عددیش برابر صفر بود) مقداری را که در متغیر ذخیره کردی ، بعلاوه یک در همان سلول ذخره شود و الی اخر
بعدا اگر فرصت کردم کدهایش را نیز میگذارم

farbod61
پنج شنبه 06 تیر 1392, 17:26 عصر
تشکر
یعنی هیچ راهی نیست بر اساس جستجو بر اساس شماره بارکد این کار رو انجام بده؟
این که شما فرمودید یعنی به شماره بارکد نگاه نمیکنه؟ از همون بالا شروع میکنه کپی شماره سریال. درسته؟
من درمورد تکراری نبودن مطمئن هستم
ولی در مورد جا اقتادن بارکد یکم شک دارم
امکان داره یکی دو تا بارکد این وسط ثبت نشده باشه
میشه لطف کنی کد هم بزاری
ممنونم
راستی در مورد سوال دومم چی؟

h_a_m_i_d
پنج شنبه 06 تیر 1392, 17:54 عصر
داداش کار نشد نداره اینا همه یک سرچ و اپدیت ساده هست که
چیز خاصی وجود نداره
اول اطلاعات رو تو نشون میدی
یک حلقه تک تک خونه ها رو میری اگر نداشت سریال یک سلکت میکنی از دیتابیس اول میخونی و بعد اپدیت رکورد اول
سوال دوم هم مثل اول هست

shahryari
پنج شنبه 06 تیر 1392, 18:05 عصر
سلام مجدد
با این کد مشکل شما حل میشه ، اما به شرطها و شروطها
Imports System.Data.SqlClient
Public Class Form1
Public cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;User Instance=True"
Dim con As SqlConnection
Dim cmd As SqlCommand
Dim da As SqlDataAdapter
Dim dt As DataTable
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
con = New SqlConnection(cs)
da = New SqlDataAdapter("select * from table1 ", con)
dt = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
con = New SqlConnection(cs)
da = New SqlDataAdapter("select * from table1 ", con)
dt = New DataTable
da.Fill(dt)
Dim h As Integer = 0
For Each dr As DataRow In dt.Rows
If Val(dr.Item("serial").ToString) = 0 Then
h = h + 1
con = New SqlConnection(cs)
Dim sql As String = "update table1 set serial={0} where barcode={1}"
sql = String.Format(sql, h, Val(dr.Item("barcode").ToString))
cmd = New SqlCommand(sql, con)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Else
h = Val(dr.Item("serial").ToString)
End If
Next
Form1_Load(sender, e)
End Sub
End Class

و شرط اینه که:
1- اولین رکورد خالی نباشد
2- رکوردی حذف نشد باشد
3- من در این مثال مقدار عددی سلول خالی را شرط قرار داده ام که اگه نال بود شما میتونید از شرط "ایز دی بی نال" استفاده بکنید
موفق باشید

farbod61
پنج شنبه 06 تیر 1392, 18:45 عصر
آقای شهریاری ممنونم از پاسختون
تست میکنم جواب میدم
یه سوال
خود SQL این قابلیت رو نداره؟ که بدون برنامه بشه از داخل خودش این کار رو کرد؟

farbod61
پنج شنبه 06 تیر 1392, 19:03 عصر
آقای شهریاری عزیز
یک سوال
من الان توی اینجا هر چی اطلاعات میبینم مربوط به تیبل 1 هستش
پس تیبل 2 چی؟
اطلا اسمی ازش برده نشده
پس برنامه از کجا بفهمه از تیبل 1 برداره بریزه تو تیبل 2؟

farbod61
پنج شنبه 06 تیر 1392, 19:11 عصر
داداش کار نشد نداره اینا همه یک سرچ و اپدیت ساده هست که
چیز خاصی وجود نداره
اول اطلاعات رو تو نشون میدی
یک حلقه تک تک خونه ها رو میری اگر نداشت سریال یک سلکت میکنی از دیتابیس اول میخونی و بعد اپدیت رکورد اول
سوال دوم هم مثل اول هست

دوست عزیز ممنونم
میشه با کد راهنماییم کنید؟
ممنون میشم

shahryari
پنج شنبه 06 تیر 1392, 20:29 عصر
باسلام
البته اشتباه از بنده است که با دقت سوالتو نخوندم
این کد که من گذاشم در همون تیبل اول رکوردهارو بررسی و اصلاح میکنه
موفق باشید

farbod61
پنج شنبه 06 تیر 1392, 21:28 عصر
یعنی برای اونی که من میخوام کدی نیست آقای شهریاری؟
نمیشه؟

tooraj_azizi_1035
پنج شنبه 06 تیر 1392, 21:48 عصر
UPDATE Table2 t2
SET t2.Serial=t1.Serial
FROM Table1 t1
WHERE t1.BarCode=t2.BarCode

farbod61
جمعه 07 تیر 1392, 06:32 صبح
UPDATE Table2 t2
SET t2.Serial=t1.Serial
FROM Table1 t1
WHERE t1.BarCode=t2.BarCode



سلام دوست عزیز
ممنونم از پاسختون
ولی راستش متوجه نشدم این کد رو چیکار کنم؟
تو کجا استفاده کنم؟
میشه یه توضیحی بدید
ممنون میشم

farbod61
جمعه 07 تیر 1392, 20:09 عصر
سلام دوستان
کسی نیست در این مورد کمکم کنه؟
خیلی ضروریه

farbod61
جمعه 07 تیر 1392, 21:11 عصر
سلام مجدد
با این کد مشکل شما حل میشه ، اما به شرطها و شروطها
Imports System.Data.SqlClient
Public Class Form1
Public cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;User Instance=True"
Dim con As SqlConnection
Dim cmd As SqlCommand
Dim da As SqlDataAdapter
Dim dt As DataTable
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
con = New SqlConnection(cs)
da = New SqlDataAdapter("select * from table1 ", con)
dt = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
con = New SqlConnection(cs)
da = New SqlDataAdapter("select * from table1 ", con)
dt = New DataTable
da.Fill(dt)
Dim h As Integer = 0
For Each dr As DataRow In dt.Rows
If Val(dr.Item("serial").ToString) = 0 Then
h = h + 1
con = New SqlConnection(cs)
Dim sql As String = "update table1 set serial={0} where barcode={1}"
sql = String.Format(sql, h, Val(dr.Item("barcode").ToString))
cmd = New SqlCommand(sql, con)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Else
h = Val(dr.Item("serial").ToString)
End If
Next
Form1_Load(sender, e)
End Sub
End Class

و شرط اینه که:
1- اولین رکورد خالی نباشد
2- رکوردی حذف نشد باشد
3- من در این مثال مقدار عددی سلول خالی را شرط قرار داده ام که اگه نال بود شما میتونید از شرط "ایز دی بی نال" استفاده بکنید
موفق باشید
آقای شهریاری توی کدتون منظور از {0} و {1} چی هستش؟

farbod61
جمعه 07 تیر 1392, 21:31 عصر
دوستان در اصل میخوام این کار انجام بشه
توی جدول اول رو نگاه کنه
بیاد سریالها رو توی جدول دوم جایگذاری کنه
اجبارا نمیخوام سریال باشه ها ، میتونه یک نام بشه مثل همین A B C D

shahryari
جمعه 07 تیر 1392, 21:42 عصر
آقای شهریاری توی کدتون منظور از {0} و {1} چی هستش؟
سلام
این مقدار ها در دستور زیر مقدار دهی شده اند h بجای {0} مینشیند و Val(dr.Item("barcode").ToString بجای {1}
sql = String.Format(sql, h, Val(dr.Item("barcode").ToString))sql = String.Format(sql, h, Val(dr.Item("barcode").ToString))

farbod61
شنبه 08 تیر 1392, 06:54 صبح
سلام
این مقدار ها در دستور زیر مقدار دهی شده اند h بجای {0} مینشیند و Val(dr.Item("barcode").ToString بجای {1}
sql = String.Format(sql, h, Val(dr.Item("barcode").ToString))sql = String.Format(sql, h, Val(dr.Item("barcode").ToString))

سلام
میدونید برای چی میپرسم؟ آخه دیدم پاسخی داده نشد گفتم خودم یکم کد رو دستکاری کنم شاید درست بشه
به جای تیبل 1 دومی نوشتم تیبل 2 دیدم اومد از بالا شروع کرد شماره داد به تیبل دوم
بعد به جای {0} نوشتم {1} دیدم اومد جلوی هر بارکد متناظرش رو از جدول یک خوند و بارکدش رو آورد تو جدول دوم
نمیدونم ، گیج شدم ، لطفا یکی کمک کنه ، خیلی خیلی ضروریه

farbod61
شنبه 08 تیر 1392, 07:38 صبح
سلام دوستان
من بالاخره یه راهی پیدا کردم و یه کدی نوشتم ولی به دلم ننشست
از کد ویزاردی استفاده کردم
کسی راه بهتر سراغ داره؟

For i As Integer = 0 To _1DataGridView.RowCount - 1
_1BindingSource.MoveNext()
Me._2TableAdapter.FillBy_barcode(Me.DataSet1._2, Me.BarcodeTextBox.Text)
Me.HospitalTextBox1.Text = Me.HospitalTextBox.Text
Me._2BindingSource.EndEdit()
Me._2TableAdapter.Update(Me.DataSet1._2)
Next

سلام دوستان ، این کدی رو که نوشتم تست کردم ، خدا رو شکر جواب داد و بدون هیچ مشکلی همه رو درست کرد