تنفيذ اجراء في Client بواسطة Server Datasnap
#1
لدي برنامج يعمل على الشبكة بواسطة طريقة datasnap
حيث يقوم Server بالاتصال بقاعدة البيانات (SQL Server 2005)
و يقدم الــ Server جميع الاجراءات الازمة للـ Client من بحث و تعديل و اضافة ... الخ
و يتم العمل بارسال Client طلب تنفيذ اجراء على Server و يقوم بالتالي بارجاع قيم او مجموعة من الحقول لجهاز Client الذي طلب تنفيذ الاجراء

المشكلة لدي كانت اذا اردت ان يطلب Server تنفيذ اجراء على Client
و معرفة من الاجهزة Client باقي على الاتصال (يمكن ان يسجل خروج بشكل طبيعي لكن في حال و جود مشكلة في الجهاز كاعاده التشغيل او انقطاع الكهرباء)

و لكم جزيل الشكر
الرد
#2
السلام عليكم ورحمة الله

حسب مافهمته من التساؤل هو حول المستعملين المتصلين بالقاعدة حاليا

ماعليك إلا تنفيذ الإستعلام التالي
كود :
sp_who 'active'
إذا أردت تحكم أكبر الإستعلام التالي من الجدول sysprocesses من القاعدة master
كود :
select spid, status, loginame, hostname, blocked, db_name(dbid) as dbname,cmd from master..sysprocesses where loginame <>'sa'
قمت بإضافة شرط لنزع المستخدم sa من القائمة

نتائج الإستعلامين في الصورة على الترتيب

[صورة: activeuser.jpg]

بالتوفيق
الرد
#3
شكرا على ردك السريع
و على المعلومة الرائعة

الطريقة التي ذكرتها تصلح اذا كان البرنامج يتعامل مع قواعد بيانات بوجدود مستخدمين و صلاحيات على مستوى قاعدة البيانات ( اي انك تمنح الصلاحيات عن طريق قاعدة البيانات)

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

و ايضا كيف يرسل جهاز Server رسالة او بعض المعلومات للـ Client
و تظهر مباشرة على شاشة Client

مثال على هذا الاستفسار
لو كان لدينا Server يتتبع اسعار الاسهم و يرسل الاسعار الجديده للـ Client
فإن السعر الجديد يجب ان يظهر مباشره على جهاز Client


و شكرا جزيلا
الرد
#4
السلام عليكم

تريد معرفة إذا كان الزبون متصل تقوم بتنفيذ إجرائك بالـ datasnap

للأسف لم أعمل بها :confused:

أما بإستخدام الـ Socket مثال
أثناء إتصال أي زبون يطلق هذا الحدث
كود :
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin ClientList.Items.Add ( Socket.RemoteAddress ); end;
أثناء قطع إتصال أي زبون يطلق هذا الحدث
كود :
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); var i:integer; begin for i := 0 to ClientList.Items.Count - 1 do begin if ClientList.Items[i]=Socket.RemoteAddress then begin ClientList.Items.Delete(i); break; end; end; end;

ClientList.Items هي قائمة الزبائن المتصلين حاليا !

إبحث عن مقابلها في datasnap Big Grin

بالتوفيق
الرد
#5
اشكرك على تعاونك معي
و سوف ابحث عن الحل واضعه هنا ان شاء الله
الرد
#6
مثال التعامل datasnap
وان شاء الله ارسل
مثال كامل للتعامل مع dataSnap - قواعد بيانات - ارسال صور - او نص
drivername:='Oracle';
database:='Ma';

// Hostname = devapp10g and IP = 172.16.17.32 DbsName = med10 -User Name Madcap - Password = madcap

HostName:='54.235.145.117'; // ip is example server public
HostName:='162.116.117.32'; // ip is example server loacl
HostName:='localhost'; // ip is example client local

Port:='8080';
Port:='211';

user:='ma';
password:='ma';

With ORACLECONNECTION do begin
Params.Values['drivername'] := drivername;
Params.Values['database'] := database;
Params.Values['HostName'] := HostName;
Params.Values['Port'] := Port;
Params.Values['DSAuthenticationUser'] := user;
Params.Values['DSAuthenticationPassword'] := password;
end;
// Form_MAIN_SERVER.Caption:=ORACLECONNECTION.Params.Values['HostName'];
غير اسم الجدول ونوع قاعدة البيانات والاسم وكلمة السر
واسم الجهاز
او server- client
المثال يعمل من اي مكان في العالم
المطلوب
1- جهاز سيرفر وip public
2- client
3- اختار tcp/ip or http
ومن يحتاج الى دروس شرح كيف الاسلوب
ان شاء الله سأقوم بذلك


الملفات المرفقة
.rar   26854_datasnap_sample_client_and_server_using_stream.rar (الحجم : 106.86 ك ب / التحميلات : 125)
.rar   ARC_DATASNAP_XE.rar (الحجم : 213.91 ك ب / التحميلات : 108)
الرد
#7
شكرا
جاري تنزيل الملف و الاطلاع على الملف
الرد
#8
انا استخدم دلفي 2010 وا جهتني عدة مشاكل
سوف انزل دلفي Xe لتجربة المثال بشكل افضل

حسب ما فهمته من البرنامج يقوم بارسال بيانات من السيرفر الى الكلينت او العكس

لكن للاسف لم اصل ان يرسل السيرفر String الى الكلينت دون طلب الكلينت

على سبيل المثال عند العمل على Windows Live Messenger , اذا و صلت لك رسالة اثناء الاتصال يظهر لك رسالة بوجود
رسالة في صندوق الرسائل
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم