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

خطأ - الاتصال بقاعدة Mysql

بدأه أبو محمـد في 2 مارس 2009 · 28 رد · 5,649 مشاهدة · في Delphi .NET/PRISM
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

حاولت الاتصال بقاعدة البيانات MYSQL بدلفي prism و OLEDB ولكن لم ينجح الاتصال . بينما الاتصال باستخدام اسقاط الكائنات ينجح ويعرض البيانات .

استخدمت الكود التالي للاتصال

method _Default.Button1_Click(sender: System.Object; e: System.EventArgs);
var 
  st : String; 
  cn :OleDbConnection;
 begin
st :='Provider=MySQLProv;Server=localhost;Data Source=mydb;User Id=root;Password=123456';
cn := new OleDbConnection();
cn.ConnectionString := st;
cn.open();
end;

يعطيني رسال الخطأ التالية :

‏‏لا تتوفر رسالة خطأ، رمز النتيجة: E_FAIL(0x80004005). 
الوصف: حدث استثناء لم تتم معالجته أثناء تنفيذ طلب ويب الحالي. الرجاء مراجعة تتبع بنية تخزين العناصر للحصول على المزيد من المعلومات حول الخطأ ومكان حدوثه في التعليمات البرمجية. 

تفاصيل الاستثناء: System.Data.OleDb.OleDbException: ‏‏لا تتوفر رسالة خطأ، رمز النتيجة: E_FAIL(0x80004005).

خطأ في المصدر: 


السطر 42: cn := new OleDbConnection();
السطر 43: cn.ConnectionString := st;
السطر 44: cn.open();
السطر 45: end;
السطر 46: 


ملف المصدر: D:\mysql\myweb\Default.aspx.pas	السطر: 44 

تتبع بنية تخزين العناصر: 


[OleDbException (0x80004005): ‏‏لا تتوفر رسالة خطأ، رمز النتيجة: E_FAIL(0x80004005).]
   System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +969373
   System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86
   System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +29
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +4863644
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
   System.Data.OleDb.OleDbConnection.Open() +40
   _Default.Button1_Click(Object sender, EventArgs e) in D:\mysql\myweb\Default.aspx.pas:44
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBa
ckEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
#2

ليس عندي الان ماي اسكل لكن جرب مع اسكل سرفر كمايلي

cn.ConnectionString := st;
n.open();

	   cn:= new OleDbConnection(st);

method MainForm.button1_Click(sender: System.Object; e: System.EventArgs);
  var 
	  con:OleDbConnection; 
	  str:String;
  begin
	   str:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=XXXXDATABASEXXXX;Data Source=XXXXX';
	   con:= new OleDbConnection(str);
	   TRY
		   con.Open();
		   MessageBox.Show('TRUE');
	   EXCEPT
		   MessageBox.Show('FALS');
	   end;
  end;

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 2 مارس 2009 في 15:43

#3

المشكلة ما عندي sql server لكن سأحاول تنزيله اليوم .

cn:= new OleDbConnection(st);

جربت بكل الاشكال .

#5

يعطيك العافية اخوي زكيري

نجح الاتصال باستخدام ODBC . لكن ايش الفرق بينهما وبين OLEDB .

var 
  st,sql : String; 
  cn : System.Data.Odbc.OdbcConnection;
  cm : System.Data.Odbc.OdbcCommand;
  ap : System.Data.Odbc.OdbcDataAdapter;
  ds : System.Data.DataSet;
 begin
st :='Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=mydb; User=root;Password=123456;Option=3;';
cn := new System.Data.Odbc.OdbcConnection(st);
sql := 'select * from invoice where inv_type = 4 ';
cm := new System.Data.Odbc.OdbcCommand(sql,cn);
ap := new System.Data.Odbc.OdbcDataAdapter(cm);
ds := new System.Data.DataSet();
//cn.ConnectionString :=;
//	  TRY
	   cn.Open;
	   ap.Fill(ds,'st');
	   GridView1.DataSource := ds;
	   GridView1.DataBind();
 //	  EXCEPT

   //	end;
end;

الآن ظهرت مشكلة وهي

جرت محاولة القراءة من الذاكرة المحمية أو الكتابة إليها. ويعد ذلك غالبًا إشارة إلى أن الذاكرة الأخرى تالفة. 
الوصف: حدث استثناء لم تتم معالجته أثناء تنفيذ طلب ويب الحالي. الرجاء مراجعة تتبع بنية تخزين العناصر للحصول على المزيد من المعلومات حول الخطأ ومكان حدوثه في التعليمات البرمجية. 

تفاصيل الاستثناء: System.AccessViolationException: جرت محاولة القراءة من الذاكرة المحمية أو الكتابة إليها. ويعد ذلك غالبًا إشارة إلى أن الذاكرة الأخرى تالفة.

خطأ في المصدر: 


السطر 53: //	  TRY
السطر 54:		cn.Open;
السطر 55:		ap.Fill(ds,'st');
السطر 56:		GridView1.DataSource := ds;
السطر 57:		GridView1.DataBind();


ملف المصدر: D:\mysql\myweb\Default.aspx.pas	السطر: 55

تم تعديل هذه المشاركة بواسطة أبو محمـد في 2 مارس 2009 في 20:42

#6

السلام عليكــم ورحمـة الله وبركاتــة ،،

اضنها احسن طريقة للربط مع

mysql

USES  [color= #990000;]MySql[color= #339933;].Data[color= #339933;].MySqlClient[color= #339933;];

 

METHOD MainForm[color= #339933;].button1_Click[color= #009900;](sender[color= #339933;]: [color= #990000;]System[color= #339933;].Object[color= #339933;]; e[color= #339933;]: [color= #990000;]System[color= #339933;].EventArgs[color= #009900;])[color= #339933;];

CONST

    vConStr [color= #339933;]=[color= #0000ff;]'Database=mydb;Data Source=localhost;User Id=root;Password=admin'[color= #339933;];

[color= #000000; font-weight: bold;]VAR

  vSql         [color= #339933;]: String[color= #339933;];

  vConnection  [color= #339933;]: MySqlConnection[color= #339933;];

  vCommand     [color= #339933;]: MySqlCommand[color= #339933;];

  vDataAdapter [color= #339933;]: MySqlDataAdapter[color= #339933;];

  vDataSet     [color= #339933;]: [color= #990000;]System[color= #339933;].Data[color= #339933;].DataSet[color= #339933;];

BEGIN

    vSql [color= #339933;]:= [color= #0000ff;]'select * from invoice '[color= #339933;];

    vConnection   [color= #339933;]:= [color= #000000; font-weight: bold;]NEW  MySqlConnection[color= #009900;](vConStr[color= #009900;])[color= #339933;];

    vCommand      [color= #339933;]:= [color= #000000; font-weight: bold;]NEW  MySqlCommand[color= #009900;](vSql[color= #339933;],vConnection[color= #009900;])[color= #339933;];

    vDataAdapter  [color= #339933;]:= [color= #000000; font-weight: bold;]NEW  MySqlDataAdapter[color= #009900;](vCommand[color= #009900;])[color= #339933;];

    vDataSet      [color= #339933;]:= [color= #000000; font-weight: bold;]NEW  [color= #990000;]System[color= #339933;].Data[color= #339933;].DataSet[color= #009900;]([color= #009900;])[color= #339933;];

    TRY  

      vConnection[color= #339933;].Open[color= #339933;];

      vDataAdapter[color= #339933;].Fill[color= #009900;](vDataSet[color= #009900;])[color= #339933;];

      dataGridView1[color= #339933;].DataSource [color= #339933;]:= vDataSet[color= #339933;].Tables[color= #009900;][[color= #cc66cc;]0[color= #009900;]][color= #339933;].DefaultView[color= #339933;];

      dataGridView1[color= #339933;].Refresh[color= #009900;]([color= #009900;])[color= #339933;];

    EXCEPT ON Mess[color= #339933;]:Exception [color= #b1b100;]DO

      messagebox[color= #339933;].Show[color= #009900;](Mess[color= #339933;].Message[color= #009900;])[color= #339933;];

 

    FINALLY

      vDataAdapter[color= #339933;].Dispose[color= #009900;]([color= #009900;])[color= #339933;];

      vDataSet[color= #339933;].Dispose[color= #009900;]([color= #009900;])[color= #339933;];

      vCommand[color= #339933;].Dispose[color= #009900;]([color= #009900;])[color= #339933;];

      vConnection[color= #339933;].Close[color= #009900;]([color= #009900;])[color= #339933;];

      vConnection[color= #339933;].Dispose[color= #009900;]([color= #009900;])[color= #339933;];

    [color= #990000;]END[color= #339933;];

[color= #990000;]END[color= #339933;];
#7

الله يعطيك الف عافية ويكتب ما تقوم به في ميزان حسناتك .

ضبط الكود 100% .

#8

بارك الله فيك اخ محمد.

لكن لست ادري ان كان عمل Dispose اجباري او ان الدلفي بريسم يقوم بتحرير الاشياء اليا .

#9
زكيري عبد العالي كتب:
بارك الله فيك اخ محمد.

لكن لست ادري ان كان عمل Dispose اجباري او ان الدلفي بريسم يقوم بتحرير الاشياء اليا .

لا أعلم . لكن جربت استعراض البيانات من موقع freemysql كان السرعة ممتازة جدا .

هل استطيع استخدام procedure - الاجراءات المخزنة - بالدلفي بريسيم . اذا كان ممكن يا ليت تدلني على مصادر .

#10
اقتباس
هل استطيع استخدام procedure

:yes:

يا ليت تدلني على مصادر

:rose:

حاول اولا اخي محمد

#11
زكيري عبد العالي كتب:
:yes:

يا ليت تدلني على مصادر

:rose:

حاول اولا اخي محمد

السلام عليكم

أخوي زكيري يعطيك العافية .

تمرير البارامترات للاستفسار عادي ما رضي يمشي حاله . ما دخلت الى الان بالاجراءات المخزنة ، view ، function .

استخدمت الكود التالي :

method _Default.DataList1_UpdateCommand(source: System.Object; e: System.Web.UI.WebControls.DataListCommandEventArgs);
CONST	vConStr ='Database=school;Data Source=localhost;User Id=afaq;Password=Password;
VAR  vSql		 : String; 
 vConnection  : MySqlConnection; 
 vCommand	 : MySqlCommand; 
 vDataAdapter : MySqlDataAdapter; 
  vDataSet	 : System.Data.DataSet;
 Text1,Text2,num : string;
BEGIN	
vSql := "update exam set ex1=@text1, ex2=@text2 where tr_num=@num"; 
vConnection   := NEW  MySqlConnection(vConStr);   
vCommand	  := NEW  MySqlCommand(vSql,vConnection);   
vDataAdapter  := NEW  MySqlDataAdapter(vCommand);  
vDataSet	  := NEW  System.Data.DataSet(); 
//------------------
Text1 := e.Item.FindControl("Text1").ToString;
Text2 :=e.Item.FindControl("Text2").ToString;
num := e.Item.FindControl("Label1").ToString;
//------------------
vCommand.Parameters.Add("@text1",text1);
vCommand.Parameters.Add("@text2",text2);
vCommand.Parameters.Add("@num",num);
vConnection.Open;
vCommand.ExecuteNonQuery();
vConnection.Close;
DataList1.EditItemIndex := -1;
fill_grid();
DataList1.DataBind();
end;

جربت اعطي قيمة مباشر للمتغيرات ونفس المشكلة يعوض الاستفسار بـ nil للمتغيرات

#12

السلام عليكم ورحمة الله وبركاته

اعجبني موضوع Mysql مع دلفي بريسم واود ان اجرب ما تقوم به انت والاخ عبد العالي

لكني قليل الخبرة Mysql

لكن اعد اني ساجرب

تم تعديل هذه المشاركة بواسطة علي .ع في 5 مارس 2009 في 01:27

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#13

السلام عليكم

اخي محمد مجود جيد بارك الله فيك .

لم اجرب الان لكن حسب ما الاحظ انه هناك خطأ في( ") في الدلفي (')

و غدا ان شاء الله ياحاول معك .

#14
علي .ع كتب:
السلام عليكم ورحمة الله وبركاته

اعجبني موضوع Mysql مع دلفي بريسم واود ان اجرب ما تقوم به انت والاخ عبد العالي

لكني قليل الخبرة Mysql

لكن اعد اني ساجرب

قاعدة بيانات رائعة وخصوصا الاصدار السادس .

اعتبرها من اسهل قواعد البيانات .

أخوي زكيري جربت هذا الكود

cmd.Parameters[0].Value = 0;

فاكتشفت ان الاستفسارالسابق لا يوجد فيه اي بارمترات .

#15

الان انا في العمل وليس عندي ماي اسكل في المساء ان شاء الله سنحلها .

حاول من جديد لبد ان هناك شيء بسيط نسيته . لان الطريقة اضها سليمة .

وفقك الله .

#16

جربت هذا الكود

txtIbox1.Text := vCommand.Parameters["@text1"].ToString;

كانت النتيجة @text1

لا اعلم ما وظيفة tostring هل يحول الناتج الى string ام له وظيفة أخرى .

لانه يبدو حسب الناتج ان القيمة الموجودة في المتغيرهي @text1

سأحول الحقل في mysql الى varchar وسارى النتيجة .

استخدمت اسناد قيم بهذا الشكل

vCommand.Parameters["@text1"].Value := "15";
vCommand.Parameters["@text2"].Value := "10";

لكن لا زال المتغير لا ياخذ قيم

قمت بتحويل الحقل الى varchar ووجدت ان المتغير ياخذ قيمة nil ولا اعلم لماذا .

************************************************************

تمنياتي لك بالتوفيق في عملك .

آراك مساء ان شاءالله .

************************************************************

#17

نعم Tostring تحول الناتج الى string

com.Parameters.AddWithValue("@name", textBox1.Text);

تم تعديل هذه المشاركة بواسطة علي .ع في 5 مارس 2009 في 22:25

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#18

السلام عليكــم ورحمـة الله وبركاتــة ،،

اعتدر من جديد لسبب اتلاف تثبيت ماي اسكل في جهازي و لم اعرف السبب جاري اعادت التثبت

كما اني ساتكلم عن كل هذا ان شاء الله في الدروس مع اسكل سرفر فهي لا تختلف عن ماي اسكل في الطريقة.

شكرا

#19
زكيري عبد العالي كتب:
السلام عليكــم ورحمـة الله وبركاتــة ،،

اعتدر من جديد لسبب اتلاف تثبيت ماي اسكل في جهازي و لم اعرف السبب جاري اعادت التثبت

كما اني ساتكلم عن كل هذا ان شاء الله في الدروس مع اسكل سرفر فهي لا تختلف عن ماي اسكل في الطريقة.

شكرا

وعليكم السلام

اعانك الله اخي زكيري .

ننتظر دروسك اخي زكيري .

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

وقد جربت كتابة الكود بالشكل التالي

vCommand.Parameters.Add("@text11", SqlDbType.VarChar);
vCommand.Parameters["@text11"].Value := 5;
#20

ارجوا ان تساعدني اخ محمد ان كنت تعرف هذه الرسالة

خطأ في التنصيب

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 7 مارس 2009 في 00:37

#21

السلام عليكم

لقد وجدت حل المشكلة وهو استبدال @ بـ ؟

ليصبح الكود بهذا الشكل

method _Default.DataList1_UpdateCommand(source: System.Object; e: System.Web.UI.WebControls.DataListCommandEventArgs);
CONST	vConStr ='Database=school;Data Source=localhost;User Id=afaq;Password=Password;
VAR  vSql		 : String; 
vConnection  : MySqlConnection; 
vCommand	 : MySqlCommand; 
vDataAdapter : MySqlDataAdapter; 
  vDataSet	 : System.Data.DataSet;
Text1,Text2,num : string;
BEGIN	
vSql := "update exam set ex1=?text1, ex2=?text2 where tr_num=?num"; 
vConnection   := NEW  MySqlConnection(vConStr);   
vCommand	  := NEW  MySqlCommand(vSql,vConnection);   
vDataAdapter  := NEW  MySqlDataAdapter(vCommand);  
vDataSet	  := NEW  System.Data.DataSet(); 
//------------------
Text1 := e.Item.FindControl("Text1").ToString;
Text2 :=e.Item.FindControl("Text2").ToString;
num := e.Item.FindControl("Label1").ToString;
//------------------
vCommand.Parameters.Add("?text1",text1);
vCommand.Parameters.Add("?text2",text2);
vCommand.Parameters.Add("?num",num);
vConnection.Open;
vCommand.ExecuteNonQuery();
vConnection.Close;
DataList1.EditItemIndex := -1;
fill_grid();
DataList1.DataBind();
end;
#22

كيف اكتب الكود التالي بالدلفي

  
vb
 Dim quantity As TextBox
   quantity = CType(e.Item.FindControl("quantity"), TextBox)
   Dim newQuantity As String = quantity.Text

c#
   TextBox quantity;
   quantity = (TextBox)(e.Item.FindControl("Quantity"));
   string newQuantity = quantity.Text;

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

#23
أبو محمـد كتب:
  
vb
 Dim quantity As TextBox
   quantity = CType(e.Item.FindControl("quantity"), TextBox)
   Dim newQuantity As String = quantity.Text

c#
   TextBox quantity;
   quantity = (TextBox)(e.Item.FindControl("Quantity"));
   string newQuantity = quantity.Text;

لقد وجدت الطريقة

Delphi prism
var Text1 := e.Item.FindControl('text1') as TextBox;
#24

السلام عليكــم ورحمـة الله وبركاتــة ،،

cast - delphi net

[color= #000000; font-weight: bold;]var Text1 [color= #339933;]:= TextBox [color= #009900;](e[color= #339933;].Item[color= #339933;].FindControl[color= #009900;]([color= #0000ff;]'text1'[color= #009900;])[color= #009900;]) [color= #339933;];

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 8 مارس 2009 في 23:27

#25

جزاك الله خيرا اخي زكيري على الرابط الرائع .

لدي مشكلة اخرى

  DataList1.EditItemIndex := e.Item.ItemIndex;
  DataBind();

يختفي الــ Datalist ، لا بد من اعادة تعبئته من جديد . ما هي الحل الامثل هنا .

تم فتح موضوع لها في منتدى asp.net على الرابط

/index.php?showtopic=188116

تم تعديل هذه المشاركة بواسطة أبو محمـد في 9 مارس 2009 في 12:52

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