PDA

View Full Version : ثبت رکورد جدید یا به روز آوری همزمان از دیتاگرید



mitra285
پنج شنبه 19 خرداد 1390, 14:58 عصر
با سلام
من از طریق یک فایل TXT اطلاعات رو داخل یک دیتا گردید نمایش می دم و در بانک SQL ذخیره می کنم. این کار رو به صورت ثبت کلی می تونم انجام بدم اما مشکل الان این هست که می گم .
می خوام به صورت همزمان از اطلاعاتی که در دیتاگرید نمایش داده شده، اون دسته از رکوردهایی که در بانک اطلاعاتی SQL وجود داشت اون رکورد رو با مقادیر جدید آپدیت کنه و اگر نداشت اون رکوردها رو ثبت کنه.
می خوام بدونم چنین چیزی امکان پذیر هست یا خیر و اگر هست با چه دستوری می شه این کار رو کرد.
یعنی با یکبار کلیک بر روی دکمه ثبت در بانک اطلاعاتی تمامی موارد بالا انجام بشه.

mohsen gh
پنج شنبه 19 خرداد 1390, 16:45 عصر
سلام دوست من سوالتو میشه یه کم واضحتر بگی ؟؟ میخوای وقتی اطلاعات رو وارد میکنی اگر او اطلاعات وجود داشتن اطلاعات جدید جایگزین اونها بشه ؟؟؟؟

shervinrv
پنج شنبه 19 خرداد 1390, 20:52 عصر
میشه کدی که برای ثبت اطلاعات نوشتید رو بزارید تا راحتتر بشه نظر داد ؟

پ.ن :

من توی تاپیک مشکل مرخصی ساعتی جوابتونو دادم
بهتون پیغام خصوصی هم زدم ولی مثل اینکه ندیدید
البته پیگیری من بابت این پست واسه اینه که فرموده بودید یک هفتس کارتون لنگه این مطلبه گفتم شاید کارتون راه بیوفته

mitra285
پنج شنبه 19 خرداد 1390, 21:53 عصر
سلام دوست من سوالتو میشه یه کم واضحتر بگی ؟؟ میخوای وقتی اطلاعات رو وارد میکنی اگر او اطلاعات وجود داشتن اطلاعات جدید جایگزین اونها بشه ؟؟؟؟

بله دوست عزیز اگر وجود نداشت رکورد جدید ثبت بشه و اگر وجود داشت با اطلاعات جدید آپدیت بشه.


من توی تاپیک مشکل مرخصی ساعتی جوابتونو دادم
بهتون پیغام خصوصی هم زدم ولی مثل اینکه ندیدید
البته پیگیری من بابت این پست واسه اینه که فرموده بودید یک هفتس کارتون لنگه این مطلبه گفتم شاید کارتون راه بیوفته

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

اما در مورد کد و برنامه بذارید توضیح بیشتر ی بدم.

این کد فعلی من برای ثبت اطلاعات در بانک اطلاعاتی برنامه هست

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sqlCon As New SqlClient.SqlConnection("Integrated Security=SSPI;Data Source=.")
Dim sqlDtAdp As New Data.SqlClient.SqlDataAdapter("", sqlCon)
Dim sqlCom As New SqlClient.SqlCommand("", sqlCon)

sqlCon.Open()
Dim dataBaseName As String = "Personel"
Dim TableName As String = "salary"
sqlCom.CommandText = "INSERT INTO " & dataBaseName & ".dbo." & TableName & " (id,fullname,date,salary) " & _
"VALUES (@ID,@Per_id,@sal,@mah,@fullname,@salary)"

For i As Int16 = 0 To DG.Rows.Count - 2
With (sqlCom)
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
.Parameters.AddWithValue("@Per_id", DG.Item(1, i).Value)
.Parameters.AddWithValue("@sal", DG.Item(2, i).Value)
.Parameters.AddWithValue("@mah", DG.Item(3, i).Value)
.Parameters.AddWithValue("@fullname", DG.Item(4, i).Value)
.Parameters.AddWithValue("@salary", DG.Item(5, i).Value)
.ExecuteNonQuery()
End With
Next
MsgBox("اطلاعات با موفقیت ذخیره شد", vbOKOnly, "کاربرگرامی")
sqlCon.Close()
End Sub
با این کد من همه اطلاعات رو در داخل دیتا بیس ذخیره می کنم

این اطلاعات از طریق فایلی هست که واحد کارگزینی برای ثبت فایل بانک به ما می دهد.
حالا امکان داره این واحد فایل اصلاحیه ای به ما بده یکسری اطلاعات تغییر پیدا کرده یا رکورد جدیدی بهش اضافه شده که باید تغییرات و اضافات در بانک ثبت بشه.
توضیحات بیشتری هم اگر لازم هست ارائه بدم. ممنون می شم بنده رو راهنمایی کنید.

shervinrv
پنج شنبه 19 خرداد 1390, 23:17 عصر
خب ببینید اول باید ببینیم کدوم یکی از این پارامترا اصلی هست
ینی کدوم یکی از اینا اگه توی دیتابیس موجود باشه شما باید آپدیت کنی بجای اینزرت
من فرض کردم id اصلی هست
پس اول چک میکنیم اگه چنین id ای موجود بود ما بجای اینزرت آپدیت میکنیم
و اگر موجود نبود اینزرت میکنیم
فقط یه نگاه هم به کوئری ها بکن به نظرم ناقصه مثلا per-id الان میرسه به fullname در صورتی که شما یه @fullname هم دارید
یا مثلا هم 2@mah دارید و هم @sal ولی فقط یک date دارید
متوجه منظورم میشید ؟




Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sqlCon As New SqlClient.SqlConnection("Integrated Security=SSPI;Data Source=.")
Dim sqlDtAdp As New Data.SqlClient.SqlDataAdapter("", sqlCon)
Dim sqlCom,sqlcomcheck,sqlcomupdate As New SqlClient.SqlCommand("", sqlCon)

sqlCon.Open()
Dim dataBaseName As String = "Personel"
Dim TableName As String = "salary"
sqlCom.CommandText = "INSERT INTO " & dataBaseName & ".dbo." & TableName & " (id,fullname,date,salary) " & _
"VALUES (@ID,@Per_id,@sal,@mah,@fullname,@salary)"
sqlComcheck.CommandText = "Select id From " & dataBaseName & ".dbo." & TableName & " where id=@id"
sqlComUpdate.CommandText = "Update " & dataBaseName & ".dbo." & TableName & " set fullname=@Per_id , date=@sal , salary=@salary where id=@id"
dim exist as string
For i As Int16 = 0 To DG.Rows.Count - 2
With (sqlcheck)

exist=""
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
exist= .ExecuteScalar()
If exist ="" Then
With (sqlCom)
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
.Parameters.AddWithValue("@Per_id", DG.Item(1, i).Value)
.Parameters.AddWithValue("@sal", DG.Item(2, i).Value)
.Parameters.AddWithValue("@mah", DG.Item(3, i).Value)
.Parameters.AddWithValue("@fullname", DG.Item(4, i).Value)
.Parameters.AddWithValue("@salary", DG.Item(5, i).Value)
.ExecuteNonQuery()
End With
Else
With (Sqlupdate)
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
.Parameters.AddWithValue("@Per_id", DG.Item(1, i).Value)
.Parameters.AddWithValue("@sal", DG.Item(2, i).Value)
.Parameters.AddWithValue("@mah", DG.Item(3, i).Value)
.Parameters.AddWithValue("@fullname", DG.Item(4, i).Value)
.Parameters.AddWithValue("@salary", DG.Item(5, i).Value)
.ExecuteNonQuery()
End with
End If

End With
Next
MsgBox("اطلاعات با موفقیت ذخیره شد", vbOKOnly, "کاربرگرامی")
sqlCon.Close()
End Sub

mitra285
پنج شنبه 19 خرداد 1390, 23:46 عصر
با تشکر از شما دوست عزیز
همه چیز انگار درست هست البته اون مواردی هم که گفتید رو تصحیح کردم .
پیغام اطلاعات با موفقیت ذخیره شد رو هم می ده اما تو بانک چیزی ثبت نمی کنه.
لطف می فرمائید بررسی کنید. من کد شما رو دوباره با اصلاحات می زارم.
ممنون

Dim sqlCon As New SqlClient.SqlConnection("Integrated Security=SSPI;Data Source=.")
Dim sqlDtAdp As New Data.SqlClient.SqlDataAdapter("", sqlCon)
Dim sqlCom, sqlcomcheck, sqlcomupdate As New SqlClient.SqlCommand("", sqlCon)

sqlCon.Open()
Dim dataBaseName As String = "Personel"
Dim TableName As String = "salar"
sqlCom.CommandText = "INSERT INTO " & dataBaseName & ".dbo." & TableName & " (ID,fullname,date,salary) " & _
"VALUES (@ID,@fullname,@date,@salary)"
sqlcomcheck.CommandText = "Select id From " & dataBaseName & ".dbo." & TableName & " where ID=@ID"
sqlcomupdate.CommandText = "Update " & dataBaseName & ".dbo." & TableName & " set fullname=@fullname , date=@date , salary=@salary where ID=@ID"

For i As Int16 = 0 To DG.Rows.Count - 1
With (sqlcomcheck)
Dim exist As String
exist = ""
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
exist = .ExecuteNonQuery()
If exist = "" Then
With (sqlCom)
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
.Parameters.AddWithValue("@fullname", DG.Item(1, i).Value)
.Parameters.AddWithValue("@date", DG.Item(2, i).Value)
.Parameters.AddWithValue("@salary", DG.Item(3, i).Value)
.ExecuteNonQuery()
End With
Else
With (sqlcomupdate)
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
.Parameters.AddWithValue("@fullname", DG.Item(1, i).Value)
.Parameters.AddWithValue("@date", DG.Item(2, i).Value)
.Parameters.AddWithValue("@salary", DG.Item(3, i).Value)
.ExecuteNonQuery()
End With
End If
End With
Next
MsgBox("اطلاعات با موفقیت ذخیره شد", vbOKOnly, "کاربرگرامی")
sqlCon.Close()
End Sub

shervinrv
جمعه 20 خرداد 1390, 08:23 صبح
خب دو تا اصلاح هم من کردم
برای sqlcomcheck باید .executescalar باشه نه executenonquery
جای پیغام رو هم درست کردم

Dim sqlCon As New SqlClient.SqlConnection("Integrated Security=SSPI;Data Source=.")
Dim sqlDtAdp As New Data.SqlClient.SqlDataAdapter("", sqlCon)
Dim sqlCom, sqlcomcheck, sqlcomupdate As New SqlClient.SqlCommand("", sqlCon)

sqlCon.Open()
Dim dataBaseName As String = "Personel"
Dim TableName As String = "salar"
sqlCom.CommandText = "INSERT INTO " & dataBaseName & ".dbo." & TableName & " (ID,fullname,date,salary) " & _
"VALUES (@ID,@fullname,@date,@salary)"
sqlcomcheck.CommandText = "Select id From " & dataBaseName & ".dbo." & TableName & " where ID=@ID"
sqlcomupdate.CommandText = "Update " & dataBaseName & ".dbo." & TableName & " set fullname=@fullname , date=@date , salary=@salary where ID=@ID"
Dim exist As String
For i As Int16 = 0 To DG.Rows.Count - 1
With (sqlcomcheck)

exist = ""
.Parameters.Clear()
.Parameters.AddWithValue("@ID", DG.Item(0, i).Value)
exist = .ExecuteScalar()
If exist = "" Then
With (sqlCom)
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
.Parameters.AddWithValue("@fullname", DG.Item(1, i).Value)
.Parameters.AddWithValue("@date", DG.Item(2, i).Value)
.Parameters.AddWithValue("@salary", DG.Item(3, i).Value)
.ExecuteNonQuery()
MsgBox("اطلاعات با موفقیت ذخیره شد", vbOKOnly, "کاربرگرامی")
End With
Else
With (sqlcomupdate)
.Parameters.Clear()
.Parameters.AddWithValue("@id", DG.Item(0, i).Value)
.Parameters.AddWithValue("@fullname", DG.Item(1, i).Value)
.Parameters.AddWithValue("@date", DG.Item(2, i).Value)
.Parameters.AddWithValue("@salary", DG.Item(3, i).Value)
.ExecuteNonQuery()
MsgBox("اطلاعات با موفقیت آپدیت شد", vbOKOnly, "کاربرگرامی")
End With
End If
End With
Next

sqlCon.Close()

همون id که بعنوان پارامتر اصلی در نظر گرفتیم درسته دیگه ؟
ینی این id هست که معلوم میکنه پارامتر تکراریه یا نه ؟
قاعدتا الان باید درست باشه

اگه کار نکرد trace کن ببین چیکار میکنه
اگر بازم نشد اگر خواستید برنامه رو بذارید تا بررسیش کنم

mitra285
جمعه 20 خرداد 1390, 11:12 صبح
خیلی ممنون و سپاسگذارم دوست عزیز فقط جای پیامها رو باید عوض کنم چون تو حلقه قرار دارند و برای هر رکود تکرار می شن .
بازم تشکر می کنم از کمک ارزشمندتون و وقتی که گذاشتید.

shervinrv
جمعه 20 خرداد 1390, 14:29 عصر
خواهش میکنم
ینی الان حل شد ؟

mitra285
جمعه 20 خرداد 1390, 16:12 عصر
بله دوست عزیز با کمک شما حل شد مشکل بنده / تشکر