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

خطأ بين الكلينت والسيرفر

مغلق
بدأه Swift في 25 أكتوبر 2006 · 6 رد · 1,223 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

-------------------------

فى البداية أقوم الان بتطوير برنامج Chat مكون من كلينت وسيرفر

الان افوم بأضافة خاصية Register New Account للكلينت ونظامى يعتمد على التخزين فى قاعدة بيانات Access

قمت بإضافة هذا الكود للسيرفر

اقتباس
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

type

UserDetails = Record

Name : String;

Address: String;

Tel : String;

Email: String;

Sex : String;

Age : String;

end; {type}

var

Data : String;

Details : UserDetails;

i : Integer;

begin

// Assign the Data to a Varable so we can play with it

Data := ServerSocket1.Socket.Connections[0].ReceiveText;

// The incomming fields for the data base are seperated

// with ','s so we can use the .CommaText property of the

// list box to seperated them into individual fields

listbox1.Items.CommaText := (Data);

// We now need to get the data out of the list box and assign

// The details to Our record type we defined earlier, for this

// I am going to use a For loop with a case statement nested inside

// This tells the computer to do the following instructions for each item in the list

// And also incriments i so that we know which data it is we are dealing with

for i := -1 to listbox1.Count do

begin

// This is called depending on the state of i

case i of

// If i is 0 then we know this is the Name Item So we assign it

0 : Details.Name := ListBox1.Items.Strings;

// If i is 1, it is the address item, so we add this to our record

1 : Details.Address := ListBox1.Items.Strings;

// If i is 2 it is the Phone Number Item, So we add this to our record

2 : Details.Tel := ListBox1.Items.Strings;

// If i is 3 it is the users Email so we add this to our record also

3 : Details.Email := ListBox1.Items.Strings;

// And So on

4 : Details.Sex := ListBox1.Items.Strings;

// And so on

5 : Details.Age:= ListBox1.Items.Strings;

end; {case}

end; {for}

// We no longer need the items in the List box, so we can clear it

listbox1.Clear;

with ADOTable1 do begin // With the ADO Table we are going to

Insert; // INSERT

// We add the details of Detials.Name to the Name Feild on the database

FieldByName('Name').AsString := Details.Name ;

// Same as above but different Field

FieldByName('Address').AsString := details.Address ;

// And so on.....

FieldByName('Telephone Number').AsString := Details.Tel ;

FieldByName('Email Address').AsString := Details.Email ;

FieldByName('Sex').AsString:= Details.Sex ;

FieldByName('Age').AsString:= Details.Age ;

Post; // Post the Data to the database

end; // end with statement

// now all we have to do is close the connection from the client

ServerSocket1.Socket.Connections[0].Close;

end;

لكى يستجيب للاوامر المستقبلة من الكلينت ونجح الكود تماماً ولكن عندما اقوم بتشغيل الكلينت وأقوم بعمل Connect الاحظ ظهور Error معى فى ListBox1

سوف أقوم بإرفاق صورة عندما حاولت أكتب النك نيم بتاعى Nickname وكان هوه Arabteam2000كتبهالى فى اللست بوكس

وعندما أحاول ايضا التكلم مع صديق فى PM (الخاص) القى المعلومات بتنضاف فى اللست بوكس ListBox1 بدون معنى

أنا ميش كاتب اى حاجة فى السيرفر توحى بأنى بستقبل البيانات على ال ListBox1 :s

اسف على الإطالة

post-87900-1161798507_thumb.jpg

تم تعديل هذه المشاركة بواسطة Swift في 25 أكتوبر 2006 في 20:50

Comming Soon

#2

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

------------------------------

ليا اربع ايام بحاول شباب :wacko:

حاول يساعدنى العضو super_rio مشكور وقام بإعطائى هذا التعديل

اقتباس
for i := 0 to listbox1.Count -1 do

begin

// This is called depending on the state of i

case i of

لكن الخطأ كما هو ولكن يقوم بإضافة البيانات المستقبلة مثل nick & Arabteam200 فى قاعدة البيانات ويعطنى هذا الخطا Bounds 5 زى الرسالة اللى فى الصورة بس 5

Comming Soon

#3

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

والله ولي التوفيق.

أخوك أبو النور.

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

آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

66850879_b6e633000d_m.jpg

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا

بـاع الحيـاة رخيـصـة لله والله اشـتـرى

خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون

فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون

موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات

إيميلي هو:Aboalnoor@maktoob.com

ياهو :adnanalabuo@yahoo.com

هوت ميل:AdnanAlabuo@hotmail.com

مدونتي الخاصة

#4

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

------------------------------------------

مشكور أخى الكريم Aboalnoor-Delphi7 على ردك

سوف اقوم بإرفاق مشروع مشابة جداً لمشروعى وبسيط جدأ فيه نفس المشكلة اللتى فيها الأن

بس ياريت متقوليش المشكلة من الكلينت علشان متعقدش :blink:

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

امتداد قاعدة البيانات : C:\BetaChat.mdb

ChatBeta_Test_1.01.rar

تم تعديل هذه المشاركة بواسطة Swift في 27 أكتوبر 2006 في 05:30

Comming Soon

#5
اقتباس
أنا ميش كاتب اى حاجة فى السيرفر توحى بأنى بستقبل البيانات على ال ListBox1
إذا ما هذا الكود
listbox1.Items.CommaText:= (Data);

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

والمشكلة التي تظهر هي في هذا الكود فهو يفترض أن النص المرسل على صيغة Name, Address, Tel, EMail, Sex, Age علما أن النص المرسل هو على صيغة Command+Text+! حيث Cpmmand هي عبارة عن أربعة حروف.

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

لكن على ما يبدو أن الكود الغريب هو من أجل حالة تسجيل مستخدم جديد كما ذكر الأخ Swift ولا يراعي ما هو الأمر المرسل ولجعله يعمل يجب أن يتم فحص الأمر المرسل فإذا كان !ureg مثلا يتم تنفيذ الكود.

تكون النتيجة كالتالي:

  if command = '!ureg' then
  begin
	listbox1.Items.CommaText:= Copy(strcommand, 6, MaxInt);
	Details.Name:= ListBox1.Items.Strings[0];
	Details.Address:= ListBox1.Items.Strings[1];
	Details.Tel:= ListBox1.Items.Strings[2];
	Details.Email:= ListBox1.Items.Strings[3];
	Details.Sex:= ListBox1.Items.Strings[4];
	Details.Age:= ListBox1.Items.Strings[5];
	listbox1.Clear;

	ADOTable1.Insert;
	ADOTable1.FieldByName('Name').AsString:= Details.Name;
	ADOTable1.FieldByName('Address').AsString:= details.Address;
	ADOTable1.FieldByName('Telephone Number').AsString:= Details.Tel;
	ADOTable1.FieldByName('Email Address').AsString:= Details.Email;
	ADOTable1.FieldByName('Sex').AsString:= Details.Sex;
	ADOTable1.FieldByName('Age').AsString:= Details.Age;
	ADOTable1.Post;
  end

ملاحظات:

- الكود المكتوب أقرب إلى الطلاسم «عليك باتباع طريقة ترتيب ما عند كتابتك للكود»

- هناك رسالة تحذير تظهر وتفيد بعدم استخدام متحولات عامة من أجل الحلقات

Warning: For loop control variable must be simple local variable

تم تعديل هذه المشاركة بواسطة fh_feras في 30 أكتوبر 2006 في 06:29

#6

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

-------------------------------

مشكووووور اخى الكريم فراس هلى مجهودك

هل يمكن ان ترفق لى المثال بعد التعديل لانى حاولت ترتيبة ولكنى لم أفلح :s

وأنا أسف لانى الرد متأخر بسبب انشغالى بالجامعة

Comming Soon

#7

لا أرى كيف سيفيدك المثال بعد التعديل فأنت قلت

اقتباس
سوف اقوم بإرفاق مشروع مشابة جداً لمشروعى وبسيط جدأ فيه نفس المشكلة اللتى فيها الأن

على كل ليس عليك سوى لصق الكود الذي وضعته سابقا ضمن إجرائية ServerClientRead وستحل مشكلة البرنامج ويبقى أن يقوم برنامج Client بأن يرسل هذا الأمر عندما تضيف هذه الميزة

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

ChatBeta_Test_0.02.zip

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

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