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

دروس في لغة Delphi Net Aspnet

رائج
بدأه زكيري عبد العالي في 24 يوليو 2007 · 35 رد · 33,515 مشاهدة · في Delphi .NET/PRISM
مشاركة: واتساب X فيسبوك تيليجرام
#26

السلام عليكم

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

/index.ph...mp;#entry786511

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

*- خاصية الوراثه من الصفحة الام

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

يجب ايضاح انها الميزة التي سوف توفر علينا الكثير من العناء على كلا من مصمم

المشروع ومطوره

لفعل هدا نقوم بمايلي

1-انشاء مشروع جديد

2-نقوم بحدف الصفحة Default.aspx من المشروع

3-نقوم باضافة صفحة جديدة ودلك بالنقر بالزر الايمن على الفارة على مستوي المشروع

4-نختار َAjouter Nouveau --> Autre

هنا ستضهر لنا الصفة الاساسية للمشروع والتي ستضهر في جميع الصفحاة الاخري ادا ما تم الربط بينهما

ادن الربط يكون

5-نضيف صفحة اسبي جديدة كما هو بالصورة حيث يمثل أ-اسم الصفحة و ب - اسم الصفحة الاساسية master

post-1034-1207559375_thumb.jpg

post-1034-1207559382_thumb.jpg

post-1034-1207559391_thumb.jpg

post-1034-1207559887_thumb.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 7 أبريل 2008 في 12:18

#27

السلام عليكم

*- تعدد منظر العرض Multiple View For Controls Groups

تشبه pagcontrol في win32

هده الميزه حقا رائعة , فهي توفر الكثير من الوقت وللشرح شنستعين بمثال

ادا اردت ان تعمل مساعد WIZARD يقوم بعمل تسجيل لعضو فيجب القيام بالخطوات التالية

1- عرض رخصة التعامل مع موقع من قبل الشركة المنتجه للموقع .

2-أقرا بأن السن تجاوز 10 سنوات.

3-إدخال الاسم و العنوان

4-شكرا للعضو على التسجيل في الموقع

ادن بوجود ادات MultiView و التي تحتوي على عناصر View نستطيع التحكم في الصفحات حيث نعرض او نخفي الصفحة التي نريد

يمكن اكمال الكود بالنسبة للازرار الباقىه

كمالا حضتم في المثال المصور ان هده الاداه وفرة الكثير من العناء

post-1034-1207561889_thumb.jpg

post-1034-1207562152_thumb.jpg

post-1034-1207562286_thumb.jpg

post-1034-1207562522_thumb.jpg

post-1034-1207562786_thumb.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 7 أبريل 2008 في 13:10

#28

*- المساعدة Wizard

هده الخاصية هامه جدا حيث انها تقوم بنفس عمل الاداه السابقة multiple view ولكن بطريقه اسهل بكثير اي انك لا تكتب كود اطلاقا

post-1034-1207568968_thumb.jpg

post-1034-1207569096_thumb.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 7 أبريل 2008 في 14:52

#29

*-Uplaodعمليه رفع ملفات الى السرف

السلام عليكم

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

Label1.Text

Button1

FileUpload1

نكتب هدا الكود عند النقر المزدوج على الزر

procedure TDefault.Button1_Click(sender: System.Object; e: System.EventArgs);
 var
   StrRealPath : string;
 begin
	 StrRealPath:= Request.PhysicalApplicationPath + 'Uploads';
	 if FileUpload1.HasFile then
		begin
		if Directory.Exists(StrRealPath) then
		begin
		   if not(&File.Exists(StrRealPath+'\'+FileUpload1.FileName)) then
			  begin
			   if FileUpload1.PostedFile.ContentLength > 15000 then
			   begin
				 FileUpload1.SaveAs(StrRealPath+'\'+FileUpload1.FileName);
				 Label1.Text:='تم رفع الملف';
			   end
			   else
				 Label1.Text:= 'حجم الملف اكبر من 15000 حرف';
			  end
			else
			   Label1.Text:='وجود ملف بنفس الاسم';
		end
		else
		  Label1.Text:='الملف غير موجود';
		end
	   else
	   Label1.Text:='اختر ملف من فضلك';
 end;

اضن اك الكود واضح

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 7 أبريل 2008 في 15:55

#30

السلام عليكم

قواعد البيانات وادوات عرض هده البيانت

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

ADO.NET

وهي مجموعة من المكتبات أي فئات للتعامل مع مصادر البيانات فادا اردت ان تتعامل مع قاعدة بيانات معينة الاظافة التغيير الحدف..استعمل ادونت

مثال توضيحي

1- تستعامل مع اسكل سرفر في انشاء قاعدة بيانات

طريقه ربط الدلفي مع اسكل سرفر بواسطة ادونت هي كالتالي

منقول من

** ADO **

-1 مصمة للعمل في بيئة متصلة بأستمرار مع قاعدة البيانات

-2 يستخدم الكائن RecordSet للأحتفاظ بمجموعة بيانات واحدة

-3 تحتوي على أنواع من المؤشرات Cursors المستخدمة لأغراض مختلفة ولكل مؤشر أمكانياته الخاصة

-4 تخزن البيانات في هيئتها الثنائية مما يصعب أرسالها عبر جدران الحماية . كما أنها غير مفيدة للأنظمة التي لا تدعم ADO

-5 تستهلك قدراً من موارد النظام بسبب اتصالها الدائم بقاعدة البيانات أثناء المعالجة

** ADO.NET **

-1 مصممة من الأساس للعمل في بيئة غير متصلة (ويمكنها العمل باتصال دائم مع قاعدة البيانات)

-2 يستخدم الكائن DataSet للأحتفاظ بعدة مجموعات من البيانات

-3 لا تستخدم المؤشرات لأنها تعمل في بيئة غير متصلة .

-4 تخزن البيانات في هيئة XML العالمية . وهذه الهيئة مصممة لكي ترسل عبر جدران الحماية وعبر الشبكات دون مشاكل كما يمكن لأي تطبيق قراءة البيانات بهيئة XML بسهولة .

-5 تعمل كنظام بيانات منفصل عن قاعدة البيانات فهي لا تتصل بقاعدة البيانات إلا عند الضرورة وبالتالي لن تستهلك مورد النظام الإ عند الضرورة

791491-45.gif

معماريةADO.NET

والمقصود هنا الخصائص المزوده والمساعدة في عملية الاتصال لقراءة وتكييف البيانات وهي

[1]- مجموعة البيانات DataSet

وهو الكائن المكافىء للكائن RecordSet ولكن مع الكثير من المزايا والتحسينات حيث يستطيع تخزين أكثر من جدول أو نتيجة أستعلام في نفس الوقت حيث يمثل كل واحد من هذه الجداول كائناً منفصلاً عن الآخر

[2]- مجموعة البيانات DataAdapter

يمثل الجسر الذي يربط بين DataSet وقاعدة البيانات ويدعم أوامر Select - Update - Delete - Insert وبالتالي بإمكانه القيام بعمليات مختلفة على البيانتا كما أنه المسؤول عن تحميل كائنDataSet بالبيانات

[3]- مجموعة البيانات DataReader

يستخدم هذا الكائن لقراءة البيانات فقط ويمكنه قراءة كميات ضخمه منها تلك التي لا يمكن تخزينها في الذاكرة مؤقتاً

[4]- مجموعة البيانات DataRelation

يستخدم هذا الكائن لتمثيل العلاقات بين الجداول في قاعدة البيانات JOIN

[5]- مجموعة البيانات Connection

يعمل هذا الكائن بصورة مشابهة للكائن Connection في ADO وهو يمكننا من إنشاء اتصال مع قاعدة البيانات

[6]- مجموعة البيانات Command

يسمح هذا الكائن لكائن DataAdapter بتطبيق الأوامر على قاعدة البيانات ويمكنه أن يتضمن اربعة من هذه الأوامر

أ-في البيئة الغيرمتصل النوعية

الصورة توضح كيفيه عرض احد الادوات التي يتم بها عمليه الربط بسهولة كبيرة

انتضر الاسالة لكي تساعدوني في الشرح

post-1034-1208184556_thumb.jpg

post-1034-1208185578_thumb.jpg

post-1034-1208186007_thumb.jpg

post-1034-1208186201_thumb.jpg

post-1034-1208186785_thumb.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 30 أبريل 2008 في 11:15

#31

المرحلة الاولى

1-في الصور الأولى قمنا بعرض الواجهة التي تسهل لنا الارتباط مع أنواع عديدة من قواعد البيانات

2-قمنا بتحديد ADO.net كأداة اتصال مع sql server

3-(1.2.3) قمنا بإنشاء اتصال جديد وأسميناه Mon_Connection وبعدها طلبنا عرض نافده تغيير إعدادات الاتصال

4-نختار اسم السر فر ل sql server من ألقائمه

5-نضع اسم المستخدم وكلمه السر الخاصة ب sql server في مثالي ي نفسها معلومات مستخدم الوندوز

6-نختار قاعدة البيانات

7-نجرب عمليه الاتصال اذا نجحت

8-OK

المرحلة الثانية

1- عمليه أظهار البيانات في داتاقريد DBGrid في دلفي

2- قمنا بانشاء ربط الداتاقريد مع القاعدة من خلال وضع SqlDataSource1مكون بطريقة آلية الدي يشبه ADOQuery في

دلفي 7 حيث انا هناك الخاصية DataSourceMode والتي بواسطتها نحدد نوعيه التصال) متصل DataSet او منفصلDataReader (

اما الخاصية ID هي التي بواسطتها نحدد أي أي أي جدول من القاعدة او جداول مربوطة بستعلام SqlDataSource1

الخاصية conectionstring

Data Source=WSIACP21;Initial Catalog=ASTRE_DB;Integrated Security=True

فيها معلومات الاتصال السرفر القاعدة كلة السر ....الخ

الخاصية privedre name

تمكننا من اختيرا pélot الاتصال ونغيره حسب نوع القاعدة التي نريد الاتصال بها

System.Data.SqlClient

الخاص بsqlserver

الخاصية selectquery

نحدد فيها استعلام العرض بتعلمت select

	<connectionStrings>
		<add name="ASTRE_DBConnectionString" connectionString="Data Source=WSIACP21;Initial Catalog=ASTRE_DB;Integrated Security=True"
			providerName="System.Data.SqlClient" />
	</connectionStrings>

هده جمله الاتصال في webconfigو ساقوم بشرحه حينما افهمه جيدا :S

تمثل الصورة 2 جمله الاتصال في السورس لصفحة اسبي x

post-1034-1208337898_thumb.jpg

post-1034-1208338436_thumb.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 16 أبريل 2008 في 12:40

#32

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

post-1034-1208350363_thumb.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 16 أبريل 2008 في 15:52

#33

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

post-1034-1208353701_thumb.jpg

post-1034-1208354480_thumb.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 16 أبريل 2008 في 17:01

#34

السلام عليكم

في الصورة المرفقة سنتعرف على المكون

اقتباس
DetailsView1

يشبه كثيرا الطريقه التي نقوم بها في الدلفي win32 حيث نقوم بسحب الحقول من المكون table مثلا الى النافدة هنا يتم انشاء الربط اليا

هكدا دور المكونDetailsView1 هو عرض مع عمليات الاضافة والحدف ...

*- يتم الربط بين هدا المكون و مكون المعطيات SqlDataSource1 بواسطه الخاصية datasourceID

مثل ما نفعله سابقا

*- في الصورة 2 نقوم بالتغير في خاصيا الحقول مثل ما نقوم به سابقا عند النقر المزدوج علي حقل في table

اسم الحقل الماسك ...الخ

*-الخاصية styles تمكننا من التحكم في الواجهة من حيث الالوان الشكل....الخ

*- الصورة الثالة واضحة

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

DetailsView1

في الحدث SelectedIndexChanged الخاص ب المكون GridView1 نكتب

procedure TDefault.GridView1_SelectedIndexChanged(sender: System.Object; e: System.EventArgs);
  begin
		DetailsView1.PageIndex:=GridView1.SelectedIndex;
  end;

*-الخاصية allowpaging تسمح بعرض ارقام السجلات في شكل لنك وبالنقر عليه يقوم بعرض السجل لكن لا انصح بها في هدا المثال بالاضافة الى الشكل 1 2 3 4 ....لا اضنها جيدة

لست ادري ربما لاني احب navigator

الكون FormView1 يشبه المكون السابق

post-1034-1208948597_thumb.jpg

post-1034-1208951443_thumb.jpg

post-1034-1208951840_thumb.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 23 أبريل 2008 في 15:52

#35

السلام عليكم

ب -في البيئة الغيرمتصل الغبر نوعبة

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

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 30 أبريل 2008 في 11:56

#36

ج-في البيئة المتصل

هي طريقة مختلفه كليا عن الاولى

على العموم راجع الدروس في /index.php?showtopic=115282

في هدا المثال سنستخدم datareder + dataset

الحمد لله استطعت تحويل احسن كود بالنسبه لي في الاتصال والتحكم بالفاعدة SQLSERVER الى الدلفي

unit DATA;
			 interface
			 uses System.Collections,System.Data,System.Data.SqlClient;
			 type
			   TObj= array [,]of &Object;
			   TC_SqlClient = class
			   private{ Déclarations privées }

					 _iNbRows  :Integer;
					 _iNbCols  :Integer;
					 _sqlCnx   : SqlConnection;
					 _sqlCmd   :SqlCommand;
					 _sqlReader:SqlDataReader;
					 _sqlTransac:SqlTransaction;
					 _sqlDA:SqlDataAdapter;
					 _sqlDs:DataSet;

			   public
			   constructor Create;
			   Function NbRows:integer;
			   Function NbCols:integer;
			   Function SqlTrans:SqlTransaction;
			   Function SqlDs:DataSet;
			   Function SqlCnx:SqlConnection;
			   Function connect(sConnexion:string):boolean;
			   Function deconnect():boolean;
			   procedure DemarrerTransaction();
			   procedure AnnulerTransaction();
			   procedure ValiderTransaction();
			   Function getQueryResult(sSql:string): TObj;
			   Function Remplir(sSQL:string):string;
			   Function nonQueryOrder(sSQL:string):Boolean;

			   end;

			 implementation

				 /// <summary>Constructeur de la classe</summary>
			 constructor TC_SqlClient.Create;
			 begin
						 _iNbRows   := 0;
						 _iNbCols   := 0;
						  _sqlCnx	:= SqlConnection.Create();
						 _sqlCmd	:= SqlCommand.Create();
						 _sqlReader := nil;
						 _sqlDs	   := DataSet.Create();
			   inherited Create;
			 end;


					 /// Récupère le nombre de ligne d'une requête
			 Function TC_SqlClient.NbRows:integer;
			 begin
					  Result:= _iNbRows;
			 end;

					 /// Récupère le nombre de colone d'une requête
			 Function TC_SqlClient.NbCols:integer;
			 begin
						 Result:=_iNbCols;
			 end;

					 /// Transaction
			 Function TC_SqlClient.SqlTrans:SqlTransaction;
			 begin
						 Result:=_sqlTransac;
			 end;

					 /// DataSet
			 Function TC_SqlClient.SqlDs:DataSet;
			 begin
						 Result:=_sqlDs;
			 end;

				 /// SqlConnection
			 Function TC_SqlClient.SqlCnx:SqlConnection;
			 begin
						 Result:=_sqlCnx;
			 end;

					 /// <summary>Lance un ordre de connexion à la base SQLServer</summary>
			 Function TC_SqlClient.connect(sConnexion:string):boolean;
			 begin
						 try
				   begin
							 _sqlCnx.ConnectionString := sConnexion;
							 _iNbCols := 0;
							 _iNbRows := 0;
							 _sqlCnx.Open();
							 Result:= true;
				   end
				   Except
				   begin
								//MessageBox.Show("Impossible de se connecter à la base de données","Erreur SQL Server",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIc
			 on.Error);
						Result:= false;
				   end;
				   end;

			 end;

					 /// Lance un ordre de déconnexion de la base de données SQLServer
			 Function TC_SqlClient.deconnect():boolean;
			 begin
						 try
						 begin
							 _sqlCnx.Close();
							 Result:= true;
				   end
				   Except
							 Result:= false;
				   end;
			 end;

			 procedure TC_SqlClient.DemarrerTransaction();
			 begin
						 _sqlTransac := _sqlCnx.BeginTransaction();
						 _sqlCmd.Transaction := _sqlTransac;
			 end;

			 procedure TC_SqlClient.ValiderTransaction();
			 begin
						 _sqlTransac.Commit();
			 end;

			 procedure TC_SqlClient.AnnulerTransaction();
			 begin
						 _sqlTransac.Rollback();
			 end;



				 /// <summary>Récupère les valeurs d'une requête</summary>
					 /// <param name="sSql">Requête à exécuter</param>
					 /// <returns>Renvoi les valeurs de la requête sans les valeurs NULL</returns>
			 Function TC_SqlClient.getQueryResult(sSql:string): TObj;
			 var
				 oArrResult:tObj;
			   j,i:integer;
			 begin
						 _sqlCmd := SqlCommand.Create(sSql, _sqlCnx);
						 _sqlReader := nil;
						 _sqlReader := _sqlCmd.ExecuteReader();
						 _iNbRows := 0;
						 _iNbCols := _sqlReader.FieldCount;

						 // Initialisation du tableau de retour
						 while _sqlReader.Read() do
				   begin
							 _iNbRows:=_iNbRows+1;
				   end;
					SetLength(oArrResult,_iNbRows,_iNbCols);
						 _sqlReader.Close();
						 // Remplissage du tableau de retour
						 try
				   begin
								 _sqlReader := _sqlCmd.ExecuteReader();
								 i := 0;
								 while (_sqlReader.Read()) do
						 begin
									   for j:=0 to _iNbCols-1 do
							 begin
											 if not _sqlReader.IsDBNull(j) then	 //Supprime les NULL comme moi
												   oArrResult[i,j] := _sqlReader.GetSqlValue(j)
											 else
												   oArrResult[i,j] := '';
							 end;
								 i:=i+1;
					   end;
				   end;
				   except
				   begin
					   //	gestionErreur(SQLEx);
								Result := nil;
				   end;
						 _sqlReader.Close();
							 _sqlCmd	:= nil;
							 _sqlReader := nil;
							Result:= oArrResult;
			 end;
			 end;
					 /// <summary>Récupère les valeurs d'une requête pour remplir une liste, un datagrid, ...</summary>
					 /// <param name="sSql">Requête à exécuter</param>
					 /// <returns>Renvoi les valeurs de la requête</returns>
			 Function TC_SqlClient.Remplir(sSQL:string):string;
			 begin
						 _sqlDs.Clear();
						  try
							 _sqlDA := SqlDataAdapter.Create(sSQL,_sqlCnx);
							 _sqlDA.Fill(_sqlDs);
							 _sqlDA.Dispose();
							 Result:= '';
					 except
							  //gestionErreur(SQLEx);
							 Result:= nil;
				  end;
					 _sqlDA := nil;	 
			 end;
				 /// <summary>Lance un ordre SQL de INSERT, UPDATE ou DELETE</summary>
					 /// <param name="sSql">Requête à exécuter</param>
					 /// <returns>Renvoi true si l'odre SQL s'est déroulé normallement, false sinon</returns>
			 Function TC_SqlClient.nonQueryOrder(sSQL:string):boolean;
			 begin
						 _sqlCmd :=SqlCommand.Create(sSql, _sqlCnx);
						 try
				   begin
							 _sqlCmd.ExecuteNonQuery();
							 Result:= true;
				   end;
				   except
				   begin
			 //			gestionErreur(SQLEx);
							 Result:= false;
				   end;
				   end;
							 _sqlCmd := nil;
			 end;

			 end.

المثال لعمل الاتصال بالقاعدة gest_CRA

  private
			  { Déclarations privées }
			CONST CON = 'Data Source=السرفر;Initial Catalog=Gest_CRA;Integrated Security=True';

var
		  O_SqlClient:TC_SqlClient;
		  begin
				O_SqlClient:=TC_SqlClient.Create();
				if(O_SqlClient.connect(Con))then

لتنفيد امر select

if O_SqlClient.Remplir('SELECT * FROM COLLABORATEUR')=''  then

عرض البيانات في textboxو gridView

			  Tx_N.Text:= O_SqlClient.SqlDs.Tables[0].Rows[0].ItemArray[0].ToString();
					Tx_Nom.Text:= O_SqlClient.SqlDs.Tables[0].Rows[0].ItemArray[1].ToString();
					Tx_Pnom.Text:= O_SqlClient.SqlDs.Tables[0].Rows[0].ItemArray[2].ToString();
					Tx_Client.Text:= O_SqlClient.SqlDs.Tables[0].Rows[0].ItemArray[3].ToString();
					GridView1.DataSource:=O_SqlClient.SqlDs.Tables[0];
					GridView1.DataBind;

قطع الاتصال

			 O_SqlClient.deconnect();

لتنفيذ امر التغير UPDATE او الاضافه او الحدف نستعمل

procedure TParametre.Btn_Enregistrer_Click(sender: System.Object; e: System.EventArgs);
  var
  O_SqlClient:TC_SqlClient;
  bResultat:boolean;
  vNColl:string;
  begin
		vNColl:=Tx_N.Text;
		O_SqlClient:=TC_SqlClient.Create();
		if(O_SqlClient.connect(Con))then

			bResultat := O_SqlClient.nonQueryOrder(  'UPDATE  COLLABORATEUR SET '+
													 'NColl=''' + Tx_N.Text + ''','+
													 'Nom=''' + Tx_Nom.Text + ''','+
													 'PreNom=''' + Tx_Pnom.Text + ''','+
													 'Localisation=''' + Cb_Localisation.Text + ''','+
													 'Client=''' + Tx_Client.Text + ''','+
													 'NDepartement=''' + Cb_LibDepartement.Items[Cb_LibDepartement.SelectedIndex].Value+''''+
													 'where NColl=' + vNColl);
					O_SqlClient.deconnect();
  end;

النتيجه هنا في الصورة حيث اقوم بأول مشروع تجربي لي في الدلفي .نت

post-1034-1209557516.jpg

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 30 أبريل 2008 في 15:11

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