PDA

View Full Version : درج همزمان دو فیلد مشترک در 2تیبل را چطور میشه انجام داد



rahim_shirkhani
سه شنبه 17 آبان 1390, 15:10 عصر
من میخوام یک سند حسابداری ثبت کنم در اون یک فیلد کد سند دارم که در جدول اسناد ثبت میشه بصورت اتونامبر و میخوام همین کد سند که در جدول اسناد تولید شده را در یک جدول جزییات اسناد نیز بصورت همزمان ثبت کنم حالا نمیدونم چطور اینکار رو با کد نویسی انجام بدم
در ضمن بانک اطلاعاتی من اکسس2010هست لطفا کمکم کنید؟/

mgh64120
سه شنبه 17 آبان 1390, 23:39 عصر
سلام دوست عزيز. توي SQL از كد زير استفاده ميشه. بببين مي توني ازش استفاده كني. شايد سر نخي باشه!

INSERT INTO Sales.Customer ([TerritoryID],[CustomerType]) VALUES (8,'S')
GO
SELECT SCOPE_IDENTITY()

rahim_shirkhani
چهارشنبه 18 آبان 1390, 08:02 صبح
دوست عزیز میشه بیشتر راهنمایی کنی میدونم که با ید با دوتا دستور insertکنم یعنی اول درج در جدول اسناد بعد باید یه جوری کد سند را با دستور scope identityبرگردونم و داخل جدول دو درج کنم نمیدونم چطور اینکار رو بکنم.در ضمن فراموش کردم من با vs2008-و با vb.netکد نویسی میکنم لطفا راهنمایی کنید؟؟؟توی همین سایت در این مورد مطلب بود ولی درست کاربردش رو متوجه نشدم

mgh64120
چهارشنبه 18 آبان 1390, 23:43 عصر
سلام دوست عزيز
شما بايد ابتدا دستور Insert رو تو جدولي كه داراي فيلد Identity هست اجرا كني و بعد مقدار Select Scope_Identity رو در دستور Insert جدول دومي در قسمت Values فيلدي قرار بدي كه قراره اون مقدار در اون ذخيره بشه.
مثالي براي دستور Insert دومين جدول :

INSERT INTO Table2 (Id, Date, ...) VALUES (SELECT SCOPE_IDENTITY,2011/11/09,...)




در ضمن فراموش کردم من با vs2008-و با vb.netکد نویسی میکنم لطفا راهنمایی کنید؟؟؟توی همین سایت در این مورد مطلب بود ولی درست کاربردش رو متوجه نشدم


لطفا در اين مورد بيشتر توضيح بده كه در چه مورد راهنمايي ميخواي ؟
متشكرم! باي

rahim_shirkhani
دوشنبه 23 آبان 1390, 15:36 عصر
من میخوام بصورت همزمان در دو جدول به نام های foctorوasnad با فیلد های
CustomerID,[Date],Detail,IDFoctorکه در جدول foctor و در ضمن اینجا IDFoctorکلید اصلی و اتو نامبر هست و چنین فیلدهای
NoePardakht,Pricebedeh,Pricebestan,IDFoctorدر جدول asnad هست که اینجا IDFoctor کلید خارجی هستش.حالا مشکلم اینه چطور IDFoctor که در جدول foctorساخته میشه در جدول asnad هم ذخیره شه در هنگام درج .ممنون از توجه دوستان.

mgh64120
دوشنبه 23 آبان 1390, 23:55 عصر
سلام عزيزم
خوب كاري نداره ! دو دستور رو پشت سر هم بنويس و بين دو دستور علامت ; قرار بده.
اينجوري :


INSERT INTO Factor(Detail,[Date],CustomerID) VALUES(@Detail,@Date,@CustomerID);
INSERT INTO Asnad(IDFactor,Pricebestan,Pricebedeh,NoePardakhat ) VALUES(SELECT SCOPE_IDENTITY(),@Pricebestan,@Pricebedeh,@NoePard akht)

در دستور INSERT اول چون فيلد IDFactor به قول شما اتونامبر(Identity) هست لازم نيست بهش مقدار بديد و در دستور INSERT دوم، SELECT SCOPE_IDENTITY() مقدار ذخيره شده در فيلد IDFactor كه در جدول Factor در همان لحظه ذخيره شده را در فيلد IDFactor جدول Asnad ذخيره مي كند.
موفق باشيد.

rahim_shirkhani
چهارشنبه 25 آبان 1390, 07:59 صبح
سلام ماقعا ممنونم از کمکی که بهم میکنی این کدی که شما گفتین رو انجام دادم جوابی نگرفتم من کدم رو میذارم شما بگین چطور استفاده کنم

rivate Sub ADD1()
If txtcodebedeh.Text = "" Or txtcodebestan.Text = "" Then
MsgBox(" ", MsgBoxStyle.ApplicationModal, "")
Exit Sub
End If
Try
Dim strSQL As String = _
"INSERT INTO Foctor (CusomerID,[Date],Detail)" & _
"VALUES (@CusomerID,@Date,@Detail)"
Dim cmd As New OleDbCommand(strSQL, myconnection)
With cmd
.Parameters.Add(New OleDbParameter("@CusomerID", txtcodebedeh.Text))
.Parameters.Add(New OleDbParameter("@Date", Mtxtdate.Text))
.Parameters.Add(New OleDbParameter("@Detail", txtdetail.Text))

End With
myconnection.Open()
cmd.ExecuteNonQuery()
myconnection.Close()
Catch sqlExc As OleDbException
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch exc As Exception
End Try
MessageBox.Show(" ", _
"", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End Sub
Private Sub ADD2()
Try
Dim strSQL As String = _
"INSERT INTO Asnad (NoePardakht,Pricebedeh,Pricebestan,IDFoctor)" & _
"VALUES ([SELECT SCOPE_IDENTITY()],@NoePardakht,@Pricebedeh,@Pricebestan)"

Dim cmd As New OleDbCommand(strSQL, myconnection)
With cmd
.Parameters.Add(New OleDbParameter("@NoePardakht", txtnoesanad.Text))
.Parameters.Add(New OleDbParameter("@Pricebedeh", txtprice.Text))
.Parameters.Add(New OleDbParameter("@Pricebestan", "0"))
End With
myconnection.Open()
cmd.ExecuteNonQuery()
myconnection.Close()
Catch sqlExc As OleDbException
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch exc As Exception
End Try
MessageBox.Show(" ", _
"", MessageBoxButtons.OK, _
MessageBoxIcon.Information)

''''''''''''''''''''''''
End Sub

rahim_shirkhani
چهارشنبه 25 آبان 1390, 08:00 صبح
rivate Sub ADD1()
If txtcodebedeh.Text = "" Or txtcodebestan.Text = "" Then
MsgBox(" ", MsgBoxStyle.ApplicationModal, "")
Exit Sub
End If
Try
Dim strSQL As String = _
"INSERT INTO Foctor (CusomerID,[Date],Detail)" & _
"VALUES (@CusomerID,@Date,@Detail)"
Dim cmd As New OleDbCommand(strSQL, myconnection)
With cmd
.Parameters.Add(New OleDbParameter("@CusomerID", txtcodebedeh.Text))
.Parameters.Add(New OleDbParameter("@Date", Mtxtdate.Text))
.Parameters.Add(New OleDbParameter("@Detail", txtdetail.Text))

End With
myconnection.Open()
cmd.ExecuteNonQuery()
myconnection.Close()
Catch sqlExc As OleDbException
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch exc As Exception
End Try
MessageBox.Show(" ", _
"", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End Sub
Private Sub ADD2()
Try
Dim strSQL As String = _
"INSERT INTO Asnad (NoePardakht,Pricebedeh,Pricebestan,IDFoctor)" & _
"VALUES ([SELECT SCOPE_IDENTITY()],@NoePardakht,@Pricebedeh,@Pricebestan)"

Dim cmd As New OleDbCommand(strSQL, myconnection)
With cmd
.Parameters.Add(New OleDbParameter("@NoePardakht", txtnoesanad.Text))
.Parameters.Add(New OleDbParameter("@Pricebedeh", txtprice.Text))
.Parameters.Add(New OleDbParameter("@Pricebestan", "0"))
End With
myconnection.Open()
cmd.ExecuteNonQuery()
myconnection.Close()
Catch sqlExc As OleDbException
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch exc As Exception
End Try
MessageBox.Show(" ", _
"", MessageBoxButtons.OK, _
MessageBoxIcon.Information)

''''''''''''''''''''''''
End Sub

mgh64120
چهارشنبه 25 آبان 1390, 11:45 صبح
Private Sub ADD1()
If trim(txtCodeBedeh.Text).Length = 0 Then
MessageBox.Show("مقدار معتبر نيست.","خطا")
txtCodeBedeh.Select
Exit Sub
End IF
'
If trim(txtCodeBestan.Text).Length = 0 Then
MessageBox.Show("مقدار معتبر نيست.","خطا")
txtCodeBestan.Select
Exit Sub
End IF
'
Try
Dim Cmd As New OleDbCommad
With Cmd
.Connection = myConnection
.CommandText = "INSERT INTO Factor(CustomerID,[Date],Detail)"
.CommandText += " VALUES (@CustomerID, @Date, @Detail);"
.CommandText += "INSERT INTO Asnad VALUES(SELECT SCOPE_IDENTITY(),@PriceBestan,"
.CommandText += "@PriceBedeh,@NoePardakht)"
'
.Parameters.AddWithValue("@CustomerID",Trim(txtCodeBedeh.Text))
.Parameters.AddWithValue("@Date",Trim(MtxtDate.Text))
.Parameters.AddWithValue("@Detail",Trim(txtSerial.Text))
.Parameters.AddWithValue("@PriceBestan","0")
.Parameters.AddWithValue("@PriceBedeh",Trim(txtPrice.Text))
.Parameters.AddWithValue("@NoePardakht",Trim(txtNoeSanad.Text)
myConnection.Open
.ExecuteNonQuery()
catch ex As SqlException
MessageBox.Show(ex.Message,"خطا",MessageBoxButtons.Ok, MessageboxIcon.Error!)
Finally
MyConnection.Close
End Try
End Sub


موفق باشيد.

rahim_shirkhani
چهارشنبه 25 آبان 1390, 15:36 عصر
بازم از شما متشکرم به خاطره اینهمه کمک من این کد رو اجرا کردم .فقط اینجا یه مشکلی هست اونم اینکه ظاهرا تو اکسس نمی شه بصورت همزمان دو کوئری رو فرستاد درسته؟اگه نه کمک بدید؟
این ارور رو میدهCharacters found after end of SQL statement.

mgh64120
پنج شنبه 26 آبان 1390, 09:51 صبح
سلام دوست عزيز
من يه پروژه با بانك اكسس درست كردم و مشابه شما جداول رو تهيه كردم.
اما متاسفانه برنامه به دستور SCOPE_IDENTITY خطا گرفت.
اين دستور فقط مربوط به SQL SERVER ميباشد و شما بايد :
1. يا بدنبال دستور ديگري باشي كه در اكسس جواب بده
2. يا ديتا تايپ فيلد كليد اصلي رو از AutoNumber به Number تغيير داده و خودت مقدار دهي كني.
موفق باشي.