الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لماذا يعمل الكود في Access ولا يعمل مع Sql server

مغلقمُجاب
بدأه ابو رفيق في 11 فبراير 2013 · 16 رد · 1,509 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الكرام

 

عملت هذا الكود ويعمل تمام مع قاعدة بيانات أكسس وعند الانتقال لتنفيذه على قاعدة بيانات SQL  لم يعمل

 

كود الأكسس

 

 

 

Try
If Conn_Mdb.State = ConnectionState.Open Then Conn_Mdb.Close()
Conn_Mdb.Open()
Command_Mdb.CommandText = "select * from a_pass_log " ' "
Command_Mdb.Connection = Conn_Mdb
Datareader_Mdb = Command_Mdb.ExecuteReader
Dim i As Integer = 1
While Datareader_Mdb.Read
Sql_Mdb = "update [a_pass_log] set [ID_MM] = '" & i & "' where [id] = 
" & Datareader_Mdb.Item("ID") & "" ' "
Try
DataAdapter_Mdb.UpdateCommand = Conn_Mdb.CreateCommand
DataAdapter_Mdb.UpdateCommand.CommandText = Sql_Mdb
DataAdapter_Mdb.UpdateCommand.ExecuteNonQuery()
i = i + 1
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End While
Datareader_Mdb.Close()
Conn_Mdb.Close()
Catch exp As Exception
MsgBox(exp.Message)
End Try

 

 

 

كود ال SQl

 

 

 

Try
If Conn_Sql.State = ConnectionState.Open Then Conn_Sql.Close()
Conn_Sql.Open()
Command_Sql.CommandText = "select * from [A_Company_Code] "
Command_Sql.Connection = Conn_SqL
Datareader_Sql = Command_Sql.ExecuteScalar
Dim i As Integer = 1
While Datareader_Sql.Read
Sql_Sql = "update [A_Company_Code] set [ID_MM] = '" & i & "' where 
[ID] = '" & Datareader_Sql.Item("ID") & "'" ' "
Try
DataAdapter_Sql.UpdateCommand = Conn_SqL.CreateCommand
DataAdapter_Sql.UpdateCommand.CommandText = Sql_Sql
DataAdapter_Sql.UpdateCommand.ExecuteNonQuery()
i = i + 1
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End While
Datareader_Sql.Close()
Conn_Sql.Close()
Catch exp As Exception
MsgBox(exp.Message)
End Try

 

 

نوع الحقل ID   و  ID_mm     من نوع INT

 

رسالة الخطأ في المرفقات

أرجوا المساعدة

post-221207-0-29253800-1360605108.png

تم تعديل هذه المشاركة بواسطة ابو رفيق في 11 فبراير 2013 في 20:52

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#2

السلام عليكم ...

أنت تضع ExecuteScalar و المفروض ExecuteReader في السطر : 

Datareader_Sql = Command_Sql.ExecuteScalar

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

أخي مشكور على الرد ولكن يوجد خطأ وصورته في المرفقات

انه datareader  مفتوح قبل كده ولازم تغلقه الأول بس مش عارف أغلقه

 

أرجوا المساعدة

 

post-221207-0-43935100-1360614995_thumb.

تم تعديل هذه المشاركة بواسطة ابو رفيق في 11 فبراير 2013 في 23:36

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#4

السلام عليكم ..

يقول أنه يوجد DataReader  مفتوح و يجب إغلاقه ... بالطريقة :

Datareader_Sql.Close()

 يجب مراجعة كامل الكود .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

يمكنك ايضا عمل التالي

 

new SqlConnection(connectionString + ";MultipleActiveResultSets=True")
1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#6
houssam11350_11350 كتب:

السلام عليكم ..

يقول أنه يوجد DataReader  مفتوح و يجب إغلاقه ... بالطريقة :

Datareader_Sql.Close()

 يجب مراجعة كامل الكود .

 

 

أخي الفاضل هذا هو كامل الكود

 

 

 

 

Try
If Conn_SqL.State = ConnectionState.Open Then Conn_SqL.Close()
Conn_SqL.Open()
Command_Sql.CommandText = "select * from A_Company_Code order by ID " ' "
Command_Sql.Connection = Conn_SqL
Datareader_Sql = Command_Sql.ExecuteReader
Dim i As Integer = 1
While Datareader_Sql.Read
Sql_Sql = "update [A_Company_Code] set [ID_MM] = '" & i & "' where 
[id] = '" & Datareader_Sql.Item(0) & "'" ' "
Try
'MsgBox(Datareader_Sql.Item(0))
DataAdapter_Sql.UpdateCommand = Conn_SqL.CreateCommand
DataAdapter_Sql.UpdateCommand.CommandText = Sql_Sql
DataAdapter_Sql.UpdateCommand.ExecuteNonQuery()
i = i + 1
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End While
Datareader_Mdb.Close()
Conn_Mdb.Close()
Catch exp As Exception
MsgBox(exp.Message)
End Try

 

واستحملنا شوية لسة مبتدئين

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#7

السلام عليكم ...

المفروض

Datareader_Sql.Close()

 

بدلا من

Datareader_Mdb.Close()

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#8
houssam11350_11350 كتب:

السلام عليكم ...

المفروض

Datareader_Sql.Close()

 

بدلا من

Datareader_Mdb.Close()

 

 

للأسف مازال نفس رسالة الخطأ تظهر

 

مع العلم أنا عندي عدد السجلات الموجودة والتي سيتم التعديل عليها 3 سجلات ورسالة الخطأ تظهر ثلاث مرات أيضا

 

أعتقد إن المشكلة في السطور التالية

 

DataAdapter_Sql.Dispose()

 

 

DataAdapter_Sql.UpdateCommand = Conn_SqL.CreateCommand
DataAdapter_Sql.UpdateCommand.CommandText = Sql_Sql
DataAdapter_Sql.UpdateCommand.ExecuteNonQuery()

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#9

أرجوا مساعدة الأعضاء

أنا في حاجة ضرورية للحل

وشكرا

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#10 أفضل إجابة

جرب هذا الكود

Try
If Conn_Sql.State = ConnectionState.Close Then Conn_Sql.Open()
Command_Sql.Connection = Conn_SqL
Command_Sql.CommandText = "update A_Company_Code set A_Company_Code.ID_MM=tmp1.RowNumber from dbo.A_Company_Code INNER JOIN (SELECT     ROW_NUMBER() OVER (ORDER BY ID) AS 'RowNumber',ID FROM         dbo.A_Company_Code)  AS tmp1 ON dbo.A_Company_Code.ID = tmp1.ID"
Command_Sql.ExecuteNonQuery()
Conn_Sql.Close()
Catch ex As Exception
Conn_Sql.Close()
MsgBox(ex.ToString)
End Try
1
#11
KARIMSOFT كتب:

جرب هذا الكود

Try
If Conn_Sql.State = ConnectionState.Close Then Conn_Sql.Open()
Command_Sql.Connection = Conn_SqL
Command_Sql.CommandText = "update A_Company_Code set A_Company_Code.ID_MM=tmp1.RowNumber from dbo.A_Company_Code INNER JOIN (SELECT     ROW_NUMBER() OVER (ORDER BY ID) AS 'RowNumber',ID FROM         dbo.A_Company_Code)  AS tmp1 ON dbo.A_Company_Code.ID = tmp1.ID"
Command_Sql.ExecuteNonQuery()
Conn_Sql.Close()
Catch ex As Exception
Conn_Sql.Close()
MsgBox(ex.ToString)
End Try

 

 

الأخ الكريم ( كريم سوفت ) بصراحة الكود 100 /100 ويعمل بكفائة وأطمع في شرح سطر command.text حتى نزداد خبره

 

واطمع في توضيح الخطأ في الكود الذي وضعته حتى أتعمق اكثر في فهم اللغة حيث اني مبتدأ

 

وأكون شاكر ليك جدا

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#12

الأخ mental-driller

آسف جدا لم انتبه لمشاركتك

ولكن عندما وضعت كود حضرتك اعترض عليها

فهل لي بتوضيح ما يقوم به الكود حتى تعم الفائدة

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#13

هذا الجزء يقوم بعمل ترقيم مبني علي احد الحقول مثل ROW_NUMBER() OVER (ORDER BY ID)
ثم عمل INNER JOIN مع الجدول الوهمي

SELECT     ROW_NUMBER() OVER (ORDER BY ID) AS 'RowNumber',ID FROM         dbo.A_Company_Code

ثم تحديد طبيعة الربط
AS tmp1 ON dbo.A_Company_Code.ID = tmp1.ID
وفي النهاية جملو تحديث بسيطه لحقل معين

اما الكود الخاص بك لا يمكن اسخدام  ExecuteReader وتحديث البيانات مع نفس Connection  مع عدم تنفيذ ما ذكره اخيmental-driller علي ما اعتقد

#14
KARIMSOFT كتب:

هذا الجزء يقوم بعمل ترقيم مبني علي احد الحقول مثل ROW_NUMBER() OVER (ORDER BY ID)

ثم عمل INNER JOIN مع الجدول الوهمي

SELECT     ROW_NUMBER() OVER (ORDER BY ID) AS 'RowNumber',ID FROM         dbo.A_Company_Code

ثم تحديد طبيعة الربط

AS tmp1 ON dbo.A_Company_Code.ID = tmp1.ID

وفي النهاية جملو تحديث بسيطه لحقل معين

اما الكود الخاص بك لا يمكن اسخدام  ExecuteReader وتحديث البيانات مع نفس Connection  مع عدم تنفيذ ما ذكره اخيmental-driller علي ما اعتقد

 

الأخ الكريم ( كريم سوفت ) جزاك الله خير وأكثر من أمثالك

طلب تاني ياريت تساعدني في تصحيح فكرتي

 

هافترض إني عندي جدول معين ID  و  Name   و  Balance

 

وجدول آخر  به الحقول التالية  ID_Name  وهو خاص برقم  Name  بالجدول الأول  وحقل  Balane_ID  يسجل فيه حركة الرصيد

 

أريد عمل اجراء يقوم بالتالي

 

جملة Select  على الجدول الأول  ويقوم   بالمرور  على ال ID  واحد تلو الآخر  وفي كل سجل  يقوم بعمل جمع لرصيد  Balance_ID  ثم احضار القيمة  ووضعها في Balance  الموجوده في الجدول الأول  وأحيانا أحتاج إلى إضافة ذلك في جدول جديد Temp لغرض عرض تقرير أو ماشابه

 

بصراحة كان هذا الأمر يتم بسهولة جدا في vb6 + Sql2000  فأكيد الدوت نت بيوفر العملية أكتر بساطة وبصراحة أكثر فوجئت في رد حضرتك أنه لا يمكن ذلك داخل جملة كونكشن واحده 

 

أرجوا توضيح ذلك ولك مني جزيل الشكر حيث الفكر الذي اعمل به يستخدم في كثير من الأحيان هذه الطريقة

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


#15

من الطبيعي ان يعترض عليه إذا انت نسخت الكود كما هو والصقته في المحرر. كان القصد ان تضيف النص الى الــ connection string

 

قم باضافة هذا النص الى الــ connection string

 

 ";MultipleActiveResultSets=True"

اي قم بعمل concatenation ، المعنى من هذا هو السماح باكثر من نتيجه.

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#17
mental-driller كتب:

من الطبيعي ان يعترض عليه إذا انت نسخت الكود كما هو والصقته في المحرر. كان القصد ان تضيف النص الى الــ connection string

 

قم باضافة هذا النص الى الــ connection string

 

 ";MultipleActiveResultSets=True"

اي قم بعمل concatenation ، المعنى من هذا هو السماح باكثر من نتيجه.

 

 

أشكرك جزيل الشكر أخي على المشاركة

 

بالفعل وضعت التعديل على جملة الكونكشن وجربت الكود صاحب المشكلة وبالفعل قام باداء المطلوب

 

أشكرك مره اخرى

KARIMSOFT كتب:

هذا الجزء يقوم بعمل ترقيم مبني علي احد الحقول مثل ROW_NUMBER() OVER (ORDER BY ID)

ثم عمل INNER JOIN مع الجدول الوهمي

SELECT     ROW_NUMBER() OVER (ORDER BY ID) AS 'RowNumber',ID FROM         dbo.A_Company_Code

ثم تحديد طبيعة الربط

AS tmp1 ON dbo.A_Company_Code.ID = tmp1.ID

وفي النهاية جملو تحديث بسيطه لحقل معين

اما الكود الخاص بك لا يمكن اسخدام  ExecuteReader وتحديث البيانات مع نفس Connection  مع عدم تنفيذ ما ذكره اخيmental-driller علي ما اعتقد

KARIMSOFT كتب:

 

 

مشكور على تقدمه من مجهود وجاري دراسة الموضوع لأنه بالنسبة لي معقد بعض الشيء

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


هذا الموضوع مغلق.

مواضيع مشابهة