View Full Version : كپي كردن ركوردهاي يك جدول در جدولي ديگر بااستفاده از دستورات SQL
rezankh
سه شنبه 14 آبان 1387, 15:34 عصر
با سلام
2 سئوال در مورد SQL دارم.
الف)آيا ميشه با دستورات SQL كل ركوردهاي يك جدول رو در جدولي ديگر كپي كرد؟ اگه مي شه مثال يا سورس كد.
ب) من جدولي با 6 تا فيلد عددي A , B, C و D و E و F دارم و جدول هم حدود 10000 ركورد داره قبلا براي اينكه اين فرمول رو
e0 = ((A * B * C * D*1.2) / (24 * E
(
e1 = e0 * 0.01
e2 = Int(e1)
b3 = e2 * 100
e4 = e0 – e3
If e4 < 25 Then
e5 = 0
Else
If 75 <= e4 Then
e5 = 100
Else
If 25 <= e4 < 75 Then
e5 = 50
Else
e5 = 0
End If
End If
End If
e6 = e3 + e5
If e6 = 0 Then
e7 = 50
F = e7
(مقادير حاصله براساس اعداد 0 ، 50 ، 100 ، 150 و ... روند ميشوند.)
انجام بدم از حلقه DoWihleNot استفاده ميكردم كه حداقل 1 تا 2 دقيقه وقت ميبرد كه همه ركوردها رو با هم جمع بزنه حالا با دستورات SQL ميشه در مدت زمان خيلي كمتري اين كارو انجام داد؟
farzad_vb62
سه شنبه 14 آبان 1387, 20:39 عصر
INSERT into table1 (a,b,c) values
SELECT c,d,f From table2
rezankh
سه شنبه 14 آبان 1387, 23:33 عصر
ببخشيد من با Adodc و بانك Access كار ميكنم. كجا كد رو وارد كنم؟
در ضمن سوال دوم چي امكانپذير هست يا نه اگر هست فرقي در سرعت كار ميكنه يا خير؟
با تشكر.
rezankh
چهارشنبه 15 آبان 1387, 15:09 عصر
كسي نيست جواب بده خيلي ضروري هستش.
ممنون.
farzad_vb62
چهارشنبه 15 آبان 1387, 16:03 عصر
بله سوال دوم هم امکان پذير است.
شما با دستورات رياضي تو اکسس مي تونين اين کارو انجام بدين يا خودتون تو وي بي کد رو بنويسين.
براي آشنايي با دستورات sql منبع زياد هست مي تونين سرچ بزنين.
براي اجراي دستورات sql توصيه مي کنم به طور دستي کد بنويسين.
Dim Rst As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Data\database.mdb;Mode=ReadWrite;Persist Security Info=False"
If Conn.State = adStateClosed Then Conn.Open
Rst.Open "SQLcode",Conn, adOpenKeyset, adLockOptimistic, adCmdText
FieldMaxAmount = Rst!ResultValue
Rst.Close
If Conn.State = adStateOpen Then Conn.Close
rezankh
دوشنبه 20 آبان 1387, 00:09 صبح
با تشكر از شما دوست عزيز
من الان 2 تا بانك دارم كه اطلاعات جدول Meli1 از بانك Information رو ميخواهم در جدول Meli2 در بانك DB كپي كنم طوري كه اطلاعات قبلي پاك شوند و اطلاعات جديد جايگزين شوند و از كد زير استفاده كردم كه پيغام ميده كه بانك دومي ناشناخته هست به نظر شما علت چيه و براي جايگزيني ركوردها چيكار بايد بكنم.
Dim DBase As Database
Dim SQL As String
Set DBase = OpenDatabase(App.Path & "\DB.mdb", True, False)
SQL = "insert into Meli2 in'" & App.Path & "\Information.mdb'select * from Meli1"
در ضمن Microsoft DAO 3.51 Object Library رو هم انتخاب كردم.
راستي اگه نمونهاي از نوشتن كد جهت انجام اعمال رياضي بين فيلدها با SQL داريد اينجا قراربديد همه جا رو سرچ كردم چيزي پيدا نكردم
rezankh
دوشنبه 20 آبان 1387, 17:23 عصر
ارورري كه ميده اينه
RunTime Error 3343
Urecognized Database Format E:\SKY\DB.mdb
vbhamed
سه شنبه 21 آبان 1387, 06:47 صبح
با تشكر از شما دوست عزيز
من الان 2 تا بانك دارم كه اطلاعات جدول Meli1 از بانك Information رو ميخواهم در جدول Meli2 در بانك DB كپي كنم طوري كه اطلاعات قبلي پاك شوند و اطلاعات جديد جايگزين شوند و از كد زير استفاده كردم كه پيغام ميده كه بانك دومي ناشناخته هست به نظر شما علت چيه و براي جايگزيني ركوردها چيكار بايد بكنم.
Dim DBase As Database
Dim SQL As String
Set DBase = OpenDatabase(App.Path & "\DB.mdb", True, False)
SQL = "insert into Meli2 in'" & App.Path & "\Information.mdb'select * from Meli1"
در ضمن Microsoft DAO 3.51 Object Library رو هم انتخاب كردم.
سلام
طبق گفته شما قراره اطلاعات جدول Meli1 از بانك Information رو ميخواهم در جدول Meli2 در بانك DB كپي بشه اما تو دستوراتتون جدول Melli2 رو براي بانك Information گذاشتيد و Melli1 رو براي DB
راستي اگه نمونهاي از نوشتن كد جهت انجام اعمال رياضي بين فيلدها با SQL داريد اينجا قراربديد همه جا رو سرچ كردم چيزي پيدا نكردم
دقيقا چه چيزي مي خواين، اين كمك مي كنه ؟
Select field1 * field2, sin(field1)+cos(field(2), (field1+field2)/3 from table
m_vb1386
سه شنبه 21 آبان 1387, 07:15 صبح
اون خطا احتمالا به خاطر اين هست كه شما از بانك اكسسي استفاده ميكنيد كه اكسس 2003 يا 2007 هست .در مورد اكسس 2007 تست نكردم ولي در مورد اكسس 2003 سرويس پك 6 ميكروسافت رو نصب كنيد فكر كنم مشكل حل بشه
If cnn.State = 1 Then cnn.Close
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\movazene.mdb;"
rs.Open "INSERT INTO pakatcol SELECT pakat.* FROM pakat;", cnn, adOpenKeyset, adLockPessimistic, adCmdText
rs.Open "DELETE pakat.* FROM pakat;", cnn, adOpenKeyset, adLockPessimistic, adCmdText
rs.Open "INSERT INTO sabtcol SELECT sabt.* FROM sabt;", cnn, adOpenKeyset, adLockPessimistic, adCmdText
rs.Open "DELETE sabt.* FROM sabt;", cnn, adOpenKeyset, adLockPessimistic, adCmdText
cnn.Close
Set cnn = Nothing
Set rs = Nothing
هم يك كدي براي ارسال اطلاعات بين دو جدول از يك بانك و حذف از جدول اول البته من اون رو براي ارسال اطلاعات دو جدول به دو جدول ديگه استفاده كردم كه شما ميتونيد مطابق نياز جدولها رو بيشتر و يا كمتر كنيد
rezankh
یک شنبه 26 آبان 1387, 14:37 عصر
با سلام و تشكر
در خصوص كپي بين 2 جدول برنامه سرويس پك 6 رو هم نصبش كردم ولي فرقي نكرد و همون خطاي قبلي رو ميده به نظر شما علت چيه ؟ كدي هم كه ارائه دادهايد رو ميشه يك مثال كوچيك در موردش بذاريد.
اما در مورد عمليات ضرب و تقسيمي كه در بالا نوشته بودم، من بيشتر ميخوام بدونم چطوري ميشه قسمت شرطي رو با SQL نوشت منظورم كد زير هستش.
k1 = LK * 0.01
k2 = Int(k1)
k3 = k2 * 100
k4 = k0 - k3
If k4 < 25 Then
k5 = 0
Else
If 75 <= k4 Then
k5 = 100
Else
If 25 <= k4 < 75 Then
k5 = 50
Else
k5 = 0
End If
End If
End If
rezankh
دوشنبه 27 آبان 1387, 16:19 عصر
با سلام
مثل اينكه كسي نيست كمكي به ما بكنه احساس كردم شايد نحوه بيانم مشكل داشته باشه واسه همين هم دوباره مشكلاتم رو بيان ميكنم :
الف ) يك كدي كه بشه با SQL توي خاصيت كليك كامند نوشت كه بتونه اطلاعات رو از يك جدول كپي و در جدول دوم قرار بده بطوريكه اطلاعات قبلي جدول دوم همه پاك بشن ( فرقي نميكنه از يك بانك يا دو بانك).
البته من خودم يك رشته كد رو بدست آوردم كه كدش اينه:
Dim DBase As Database
Dim SQL As String
Set DBase = OpenDatabase(App.Path & "\DB.mdb", True, False)
SQL = "insert into Meli1 in'" & App.Path & "\Information.mdb'select * from Meli2"
DBase.Execute SQL
ولي ارور زير رو ميده
RunTime Error 3343
Urecognized Database Format E:\SKY\DB.mdb
در اين خصوص دوست خوبمون m_vb1386 كدي رو گذاشتند كه براي من نياز به توضيح بيشتر يا يك مثال كوچولو هستش و يا اينكه چرا كد خودم ارور مي ده.
ب) فرض كنيد يك فيلد A و B داريم ميخوام اگه A بزرگتر از 75 بود بشه 100 و اگه بين 25 تا 75 بود بشه 50 و اگه كمتر از 25 بشه 0 و مقدار جديد در فيلد B قرار بگيره حالا آيا ميشه اين كد رو با SQL نوشت و اگه ميشه در كجا و به چه شكل؟ من از بانك Access و Adodc استفاده ميكنم لطفا راهنمايي كنيد.
با تشكر همشهري خيام.
m_vb1386
سه شنبه 28 آبان 1387, 09:39 صبح
ببين اين مشكلت رو حل ميكنه؟
rezankh
سه شنبه 28 آبان 1387, 13:55 عصر
با سلام m_vb1386 عزيز دستت درد نكنه درست شد خيلي ممنونم
سورسي كه گذاشتي در اين زمينه واقعا كامل و قابل استفاده براي همه هستش واسه همين اينطوري تشكر كردم كه بقيه هم ببينند و از اين سورس استفاده كنند.
باز هم ممنون
m_vb1386
چهارشنبه 29 آبان 1387, 07:57 صبح
سلام
خوشحال شدم كه كارتون راه افتاد
rezankh
جمعه 01 آذر 1387, 12:05 عصر
با سلا م
کدی که دادید بخوبی جواب داد فقط یک مشکل کوچولو دارم که بجای مقدار عددی می خوام مقدار یک فیلد از جدول دیگه ای رو بهش بدم ولی خطا می ده.منظورم این قسمته
.CommandText = "UPDATE Table1 SET Table1.fn = Formool.N1 WHERE ((([Table1]![MahVije])=1));"
البته اگه این مقدار از خود جدول Table1باشه یا مقداری عددی قبول می کنه و مشکلی نداره لطفا راهنمایی کنید.
باتشکر
rezankh
شنبه 02 آذر 1387, 17:26 عصر
با سلام
خوب اينهم خطايي كه ميده ( وقتي كه بجاي مقدار عددي كه ميخوام فيلد جدولم تغيير كنه ، از يك فيلد ديگه در جدولي ديگه استفاده ميكنم اين خطا رو ميده. كدش هم كه بالاتر نوشتم )
m_vb1386
یک شنبه 03 آذر 1387, 11:12 صبح
فيلد شما از نوع كاراكتري هست يا از نوع عددي؟
اين خطا نشون ميده كه يك مقدار تو كويري به درستي مقدار دهي نشده
ببين قبل از اون دستوري كه نوشتيد Formool.N1 مقدار دهي ميشه يا نه؟
rezankh
یک شنبه 03 آذر 1387, 19:46 عصر
با سلام
فيلد N1 از جدول Formool عددي هستش و از نوع General Numberهستش و سايزش هم Single. و جدول Formool هم با Table1 تو يك بانك Access2003هستند.
اين كار رو من با نمونهاي كه شما فرستاديد حتي با تغيير نوع فيلدها هم امتحان كردم و همين مسئله پيش اومد يعني بجاي مقدار عددي از فيلد b جدول Table2 استفاده كردم كه همون خطا رو داد. اينهم كد استفاده در برنامه شما
With b100
.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\ab.mdb;"
.CommandText = "UPDATE Table1 SET Table1.b = 100 WHERE ((([Table1]![a])>75));"
.Execute
End With
و اينهم مقداري از جدول ديگه
With b100
.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\ab.mdb;"
.CommandText = "UPDATE Table1 SET Table1.b = Table2.b WHERE ((([Table1]![a])>75));"
.Execute
End With
به نظرتون چي ميتونه باشه بانك كه مشخصه آيا بايد جدول formool دوباره معرفي بشه كه اينكار رو هم سعي كردم كه موفقيت آميز نبود.
با تشكر از توجه شما دوست عزيز m_vb1386
rezankh
دوشنبه 04 آذر 1387, 22:21 عصر
باز هم سلام
ضمن تشكر از لطف دوستان عزيز بويژه دوست خوبمون m_vb1386 و با كسب اجازه از ايشون اگه حال كرديد نمونه برنامهاي كه ايشون گذاشتند رو دانلود كنيد و موردي كه قبلا نوشتم رو يك بررسي كوچولو بكنيد و بگيد مشكل از كجاست؟ والا كارم خيلي گيره ممنون ميشم.
m_vb1386
سه شنبه 05 آذر 1387, 07:44 صبح
خوب برنامت رو بذار يك نگاهي بهش بكنم اين جوري بقيه هم بهتر ميتون كمك كنن
rezankh
سه شنبه 05 آذر 1387, 15:20 عصر
با سلام و تشكر از توجهتون
همه برنامم كه حجمش خيلي زياده، با بانك اطلاعاتيش حدود 30 مگ ميشه ولي سعي مي كنم همين قسمتشو جدا كنم براتون بذارم ولي همونطور كه قبلا اشاره شد اين مشكل روي برنامهاي كه خودتون هم برام گذاشتيد ديده ميشه و فرقي نميكنه. به اميد خدا همين امشب برنامه رو و كاري كه ميخوام انجام بدم رو آپلود ميكنم.
با تشكر.
rezankh
جمعه 08 آذر 1387, 23:54 عصر
با سلام مجدد
قسمتي از برناممو جهت بررسي شما دوستان اينجا مي ذارم خواهشا كمك كنيد وقت زيادي ندارم. ممنون
m_vb1386
شنبه 09 آذر 1387, 08:10 صبح
With fn1
.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Information.mdb;"
.CommandText = "UPDATE Table1 SET Table1.fn = " & FormoolN1 & " WHERE ((([Table1]![MahVije])=1));"
.Execute
End With
فرمولتون رو اينجوري بنويسيد ببينيد درست ميشه البته براي بقيه قسمتها هم همينجوري عمل كنيد
rezankh
شنبه 09 آذر 1387, 17:11 عصر
سلام
دستت درد نكنه براي كار من درست شد بين 2 تا & ميشه مقدار يك شي مثلا مقدار Form2.Text1 رو گذاشت و بدرستي جواب ميده ولي مقدار يك فيلد از بانك ديگه رو نميشه گذاشت و همون خطا رو ميده به هر حال من با اتصال مقادير جدول Formool به Textها مشكل رو حل ميكنم. ولي اگه تونستيد براي اين مسئله راه حلي پيدا كنيد براي بقيه هم بذاريد چراكه سئوال كردن بهتر از ندانستن هست.
باز هم از لطف شما متشكرم دست شما و همه دوستان دردنكنه.
m_vb1386
یک شنبه 10 آذر 1387, 08:22 صبح
براي رفع اين مشكل هم شما مقادير بانكت رو بريز تو چند تا متغير و سپس اونها رو تو كانكشنت استفاده كن اميدوارم متوجه شده باشين
isaac23
چهارشنبه 06 اسفند 1393, 08:44 صبح
این همه دردسره نداره که ببین اینجوری بنویس فرقی نمی کنه هر تعدا از جداول که مثل هم باشه عمل میکنه
Dim dbs5 As Database
Set dbs5 = OpenDatabase(App.Path & "\" & "Fokala.mdb")
dbs5.Execute "insert into TB1 select * from TB2"
dbs5.Close
Adodc6.Refresh
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.