كود الإتصال بماكينات الحضور والإنصراف كامل - alhlwany - 14-09-13
كود :
بسم الله الرحمن الرحيم
السلام عليكم ورحمه الله وبركاته
أسأل الله تعالى أن يتقبل هذا العمل ويأجرنى عليه ويكون ذكاه علم لى
أخوكم فى الله محمد عبدالمرضى الحلوانى مصر وللتواصل معى إذا حدثت مشكله 24001742000
Moh.abdelmordy.it@gmail.com
الإتصال بأى ماكينه حضور وإنصراف سواء بالكارت أو بالبصمه فالتعامل ثابت لا يتغير ملحوظه قاعده البيانات سيكول سيرفر SQL Server
البدايه
سيتم فى البدايه اعداد وانشاء الجداول والاستورد بروسيدجر
أولا:- بناء الجداول اللازمه للإتصال وهما عباره عن جدولين
الأول :- جدول يضاف فيه كل حركات الماكينه بكل الحقول وسيكون اسمه HR_InOut_Tbl
الثانى :- جدول يضاف فيه حركات الماكينه الجديده ففى الخطوات القادمه سنلاحظ إنه عند كل اتصال وتحميل للبيانات سيتم كل الحركات من على
الماكينه وسيتم ذلك على الجدول الأول أما الجدول الثانى فهو لإضاف السطور الجديده او الاحداث الجديده على الماكينه والبيانات القديمه محفوظه ايضا فيه
وسنرى كيف يتم ذلك
كود انشاء الجدول الأول HR_InOut_Tbl
CREATE TABLE [dbo].[HR_InOut_Tbl](
[IDD] [int] IDENTITY(1,1) NOT NULL,
[dwEnrollNumber] [int] NULL,
[name] [nvarchar](50) NULL,
[password] [nvarchar](50) NULL,
[privileg] [int] NULL,
[dwVerifyMode] [int] NULL,
[dwInOutMode] [int] NULL,
[timeStr] [nvarchar](50) NULL,
[_machineNumber] [int] NULL,
[_enrollNumber] [int] NULL,
[_enrollMachineNumber] [int] NULL,
[_verifyMode] [int] NULL,
[_inOutMode] [int] NULL,
[_year] [int] NULL,
[_month] [int] NULL,
[_day] [int] NULL,
[_hour] [int] NULL,
[_minute] [int] NULL,
CONSTRAINT [PK_HR_InOut_Tbl] PRIMARY KEY CLUSTERED
(
[IDD] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
كود انشاء الجدول الثانى HR_InOutAct_Tbl
CREATE TABLE [dbo].[HR_InOut_Tbl](
[IDD] [int] IDENTITY(1,1) NOT NULL,
[dwEnrollNumber] [int] NULL,
[name] [nvarchar](50) NULL,
[password] [nvarchar](50) NULL,
[privileg] [int] NULL,
[dwVerifyMode] [int] NULL,
[dwInOutMode] [int] NULL,
[timeStr] [nvarchar](50) NULL,
[_machineNumber] [int] NULL,
[_enrollNumber] [int] NULL,
[_enrollMachineNumber] [int] NULL,
[_verifyMode] [int] NULL,
[_inOutMode] [int] NULL,
[_year] [int] NULL,
[_month] [int] NULL,
[_day] [int] NULL,
[_hour] [int] NULL,
[_minute] [int] NULL,
CONSTRAINT [PK_HR_InOut_Tbl] PRIMARY KEY CLUSTERED
(
[IDD] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ثانيا :- بناء كويرى لجلب البيانات التى لم تضاف فى الجدول الثانى HR_InOutAct_Tbl
وكود انشائها
SELECT dbo.HR_InOut_Tbl.dwEnrollNumber, dbo.HR_InOut_Tbl.name, dbo.HR_InOut_Tbl.password, dbo.HR_InOut_Tbl.privileg, dbo.HR_InOut_Tbl.dwVerifyMode,
dbo.HR_InOut_Tbl.dwInOutMode, dbo.HR_InOut_Tbl.timeStr, dbo.HR_InOut_Tbl._machineNumber, dbo.HR_InOut_Tbl._enrollNumber,
dbo.HR_InOut_Tbl._enrollMachineNumber, dbo.HR_InOut_Tbl._verifyMode, dbo.HR_InOut_Tbl._inOutMode, dbo.HR_InOut_Tbl._year,
dbo.HR_InOut_Tbl._month, dbo.HR_InOut_Tbl._day, dbo.HR_InOut_Tbl._hour, dbo.HR_InOut_Tbl._minute
FROM dbo.HR_InOut_Tbl LEFT OUTER JOIN
dbo.HR_InOutAct_Tbl ON dbo.HR_InOut_Tbl.dwEnrollNumber = dbo.HR_InOutAct_Tbl.dwEnrollNumber AND
dbo.HR_InOut_Tbl.name = dbo.HR_InOutAct_Tbl.name AND dbo.HR_InOut_Tbl.password = dbo.HR_InOutAct_Tbl.password AND
dbo.HR_InOut_Tbl.privileg = dbo.HR_InOutAct_Tbl.privileg AND dbo.HR_InOut_Tbl.dwVerifyMode = dbo.HR_InOutAct_Tbl.dwVerifyMode AND
dbo.HR_InOut_Tbl.dwInOutMode = dbo.HR_InOutAct_Tbl.dwInOutMode AND dbo.HR_InOut_Tbl.timeStr = dbo.HR_InOutAct_Tbl.timeStr AND
dbo.HR_InOut_Tbl._machineNumber = dbo.HR_InOutAct_Tbl._machineNumber AND dbo.HR_InOut_Tbl._inOutMode = dbo.HR_InOutAct_Tbl._inOutMode AND
dbo.HR_InOut_Tbl._verifyMode = dbo.HR_InOutAct_Tbl._verifyMode AND
dbo.HR_InOut_Tbl._enrollMachineNumber = dbo.HR_InOutAct_Tbl._enrollMachineNumber AND
dbo.HR_InOut_Tbl._enrollNumber = dbo.HR_InOutAct_Tbl._enrollNumber AND dbo.HR_InOut_Tbl._year = dbo.HR_InOutAct_Tbl._year AND
dbo.HR_InOut_Tbl._month = dbo.HR_InOutAct_Tbl._month AND dbo.HR_InOut_Tbl._day = dbo.HR_InOutAct_Tbl._day AND
dbo.HR_InOut_Tbl._hour = dbo.HR_InOutAct_Tbl._hour AND dbo.HR_InOut_Tbl._minute = dbo.HR_InOutAct_Tbl._minute
WHERE (dbo.HR_InOutAct_Tbl._minute IS NULL)
GROUP BY dbo.HR_InOut_Tbl.dwEnrollNumber, dbo.HR_InOut_Tbl.name, dbo.HR_InOut_Tbl.password, dbo.HR_InOut_Tbl.privileg, dbo.HR_InOut_Tbl.dwVerifyMode,
dbo.HR_InOut_Tbl.dwInOutMode, dbo.HR_InOut_Tbl.timeStr, dbo.HR_InOut_Tbl._machineNumber, dbo.HR_InOut_Tbl._enrollNumber,
dbo.HR_InOut_Tbl._enrollMachineNumber, dbo.HR_InOut_Tbl._verifyMode, dbo.HR_InOut_Tbl._inOutMode, dbo.HR_InOut_Tbl._year,
dbo.HR_InOut_Tbl._month, dbo.HR_InOut_Tbl._day, dbo.HR_InOut_Tbl._hour, dbo.HR_InOut_Tbl._minute
ثم قم بحفظ الفيو بإسم Vew_AllMacData
ثالثا : بناء الاستورد بروسيدجر اللازمه
-4 ستورد بروسيدجر لاضافه الحركات من الماكينه فى الجدول الاول HR_InOut_Tbl
-0 ستورد بروسيدجر لاضافه البيانات الجديده التى لم تضاف فى الجدول الثانى HR_InOutAct_Tbl
كود انشاء الاستورد بروسيدجر الاولى AddGdata
CREATE PROCEDURE dbo.AddGdata ( @dwEnrollNumber Int, @name nvarchar(50), @password nvarchar(50), @privileg Int, @dwVerifyMode Int, @dwInOutMode Int, @timeStr nvarchar(50), @_machineNumber int, @_enrollNumber int, @_enrollMachineNumber int, @_verifyMode int, @_inOutMode int, @_year int, @_month int, @_day int, @_hour int, @_minute int ) AS delete from HR_InOut_Tbl insert into HR_InOut_Tbl (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) values (@dwEnrollNumber,@name,@password,@privileg,@dwVerifyMode,@dwInOutMode,@timeStr,@_machineNumber,@_enrollNumber,@_enrollMachineNumber,@_verifyMode,@_inOutMode,@_year,@_month,@_day,@_hour,@_minute) RETURN
كود انشاء الاستورد بروسيدجر الثانيه AddActdata
CREATE PROCEDURE dbo.AddActdata AS
insert into HR_InOutAct_Tbl (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) select dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute from Vew_AllMacData RETURN
الأكواد سليمه ان شاء الله ولكن تتبعو الخطوات بكل دقه
تم الانتهاء من اعداد الجداول وتهيئه الاستورد بروسيدجر سننتقل الى فيجوال بيسك ونفتح مشروع ويب جديد بلغه سى
شارب C#
تم ارفاق ملف SDK فى المرفقات فك ضغط الملف وقم بعمل كوبى لكل الملفات الموجوده فيه وقم بنسخها فى System32
او بنسخها فى Syswow64 اذا كانت الويندوز 7 او 8 او فيستا
ثم قم بكتابه التالى فى قائمه Run
Cmd
ويفضل فتح نافذه ال Command ب
Run As Administrator
ونكتب التالى فيها
Regsvr32 C:\Windows\SysWOW64\ zkemkeeper.dll
ثم اضغط انتر
ستظهر نافذه تدلك على نجاح العمليه فاذا ظهر رساله خطأ فابحث عن الخطأ فى جوجل الحلول موجوده فلن نتطرق لحل
مشاكل ال regsvr هنا حيث انه موضوع طويل بعد نجاح العمليه
-4 سنتوجه الان الى مشروع الويب ونقوم بعمل اد ريفرنس لملف ال zkemkeeper.dll من مساره على سيستم 20 او
سيس واو 41 ونضغط اوك
-0 اضافه جمله الاتصال التاليه فى ملف الويب كونفيج بين تاجات connectionStrings <connectionStrings> <add name="ERP_ProjectConnectionString" connectionString="Data Source=.;Initial Catalog=ERP_Project;uid=sa; password=mordy;" providerName="System.Data.SqlClient"/> </connectionStrings>
-2 اضافه كلاس للاتصال مع قاعده بيانات السيكول وسيكون اسمه ConnectMang 4- using System; 5- using System.Data; 6- using System.Configuration; 7- using System.Linq; 8- using System.Web; 9- using System.Web.Security; 10- using System.Web.UI; 11- using System.Web.UI.HtmlControls; 12- using System.Web.UI.WebControls; 13- using System.Web.UI.WebControls.WebParts; 14- using System.Xml.Linq; 15- using System.Data.SqlClient; 16- 17- 18- /// <summary> 19- /// Summary description for ConnectMang 20- /// </summary> 21- public class ConnectMang 22- { 23- 24- public static SqlConnection GetConnection() 25- { 26- 27- SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ERP_ProjectConnectionString"].ToString()); 28- Conn.Open(); 29- return Conn; 30- } 31- }
-1 عمل كلاس لعمل الميسود التى ستستدعى من خلالها الاستورد بروسيدجر التى تم عملها فى السيكول سيرفر
من قبل واسم الكلاس AddInMac
وكود الميسودز
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web;
using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq;
using System.Data.SqlClient; using System.Data; using System.Collections.Generic;
/// <summary> /// Summary description for AddInMac /// </summary> public class AddInMac { public AddInMac() { // // TODO: Add constructor logic here // }
public void AddGdata(Int32 dwEnrollNumber, string name, string password, Int32 privileg, Int32 dwVerifyMode, Int32 dwInOutMode, string timeStr, int _machineNumber, int _enrollNumber, int _enrollMachineNumber, int _verifyMode, int _inOutMode, int _year, int _month, int _day, int _hour, int _minute) {
using (SqlConnection con = ConnectMang.GetConnection()) { SqlCommand Cmd = new SqlCommand("AddGdata", con); Cmd.CommandType = CommandType.StoredProcedure; Cmd.Parameters.AddWithValue("@dwEnrollNumber", dwEnrollNumber); Cmd.Parameters.AddWithValue("@name", name); Cmd.Parameters.AddWithValue("@password", password); Cmd.Parameters.AddWithValue("@privileg", privileg); Cmd.Parameters.AddWithValue("@dwVerifyMode", dwVerifyMode); Cmd.Parameters.AddWithValue("@dwInOutMode", dwInOutMode); Cmd.Parameters.AddWithValue("@timeStr", timeStr); Cmd.Parameters.AddWithValue("@_machineNumber", _machineNumber); Cmd.Parameters.AddWithValue("@_enrollNumber", _enrollNumber); Cmd.Parameters.AddWithValue("@_enrollMachineNumber", _enrollMachineNumber); Cmd.Parameters.AddWithValue("@_verifyMode", _verifyMode); Cmd.Parameters.AddWithValue("@_inOutMode", _inOutMode); Cmd.Parameters.AddWithValue("@_year", _year); Cmd.Parameters.AddWithValue("@_month", _month); Cmd.Parameters.AddWithValue("@_day", _day); Cmd.Parameters.AddWithValue("@_hour", _hour); Cmd.Parameters.AddWithValue("@_minute", _minute); Cmd.ExecuteNonQuery(); } } public void AddActdata() { using (SqlConnection con = ConnectMang.GetConnection()) { SqlCommand Cmd = new SqlCommand("AddActdata", con); Cmd.CommandType = CommandType.StoredProcedure; Cmd.ExecuteNonQuery(); } } }
-5 ثم اضافه عدد 2 تكست بوكس وعدد 0 بوتون فى صفحه الويب وجريد فيو وقم بتغير اسمائها كما فى الكود
الدخول على كود بهيند الصفحه بدبل كليك على الصفحه ونستدعى فضاءات الاسماء التاليه مع استدعاء اسم الملف
الدى ال ال الذى قمنا بعمل اد ريفرنس له كالتالى
using System; using System.Collections.Generic; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration;
using zkemkeeper; ملف الدى ال ال
-4 ثم عمل اوبجكت من ملف الدى ال وتعريف الفاريبول واوبجكت من ملف الكلاس الخاص بالميسود الذى قمنا بعمله من قبل راجع الخطوات ويتم
وضع سطور الكود تحت Page: System.Web.UI. HR_PersonalAffire_DownDataMac class partial public
Boolean conn, ll; Int32 errCode, rr; DataTable Dt = new DataTable();
public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM(); اوبجكت من ملف الدى ال ال الريفرنس
private Boolean bIsConnected = false; private int iMachineNumber;
AddInMac addinmacdll = new AddInMac(); اوبجكت من الكلاس الذى قمنا بتعريفه
-7 كود الزر الاول Connection – Check
try {
axCZKEM1.SetCommPassword(Convert.ToInt16(Txt_CommKey.Text.Trim())); axCZKEM1.BASE64 = 1; conn = axCZKEM1.Connect_Net(Txt_MacIP.Text.Trim(), Convert.ToInt16(Txt_MacPort.Text.Trim())); axCZKEM1.GetLastError(errCode); rr = axCZKEM1.MachineNumber;
if (conn.Equals(true)) { LblMsGError.Text = "تم الإتصال بنجاح تستطيع تحميل الحركات ";
}
} catch (Exception ex) {
string Er = ex.ToString(); HttpCookie ErCokis = new HttpCookie("ErCokis"); ErCokis.Value = Er.ToString(); ErCokis.Expires = DateTime.Now.AddHours(1); Response.Cookies.Add(ErCokis); Response.Redirect("~/ErrorPage.aspx"); }
ملحوظه يجب ان نقوم بعمل ميسود لكود فتح الاتصال ونستدعيها تحت الزر الاول بدلا من كتابه هذا الكود تحت الزر
الاول لاننا سنحتاج فتح الاتصال فى عمليه تحميل الحركات وذلك بدلا من اعاده كتابه نفس سطور الكود مره اخرى
تحت الزر الثانى
كود الزر الثانى
ConnectMac(); ميسود فتح الاتصال الذى تكلمنا عنها وهى نفس الكود المكتوب تحت الزر الاول
int dwEnrollNumber = 0; string name = ""; string password = ""; int privileg = 0; SqlConnection conexaoMySQL = default(SqlConnection); string strSQL = ""; int dwVerifyMode = 0; int dwInOutMode = 0; string timeStr = ""; bool enable = false; System.Text.StringBuilder _data = new System.Text.StringBuilder(); int _errorCode = 0; int _machineNumber = 0; int _enrollNumber = 0; int _enrollMachineNumber = 0; int _verifyMode = 0; int _inOutMode = 0; int _year = 0; int _month = 0; int _day = 0; int _hour = 0; int _minute = 0;
axCZKEM1.BASE64 = 1; axCZKEM1.ReadMark = true; axCZKEM1.GetLastError(_errorCode); axCZKEM1.ReadAllUserID(1); axCZKEM1.ReadMark = true;
// Boolean DD = axCZKEM1.ReadGeneralLogData(rr); // Label1.Text = DD.ToString()+"MacNum____"+rr.ToString();
if (axCZKEM1.ReadGeneralLogData(1)) { axCZKEM1.GetLastError(ref _errorCode);
while (axCZKEM1.GetGeneralLogData(1, ref _machineNumber, ref _enrollNumber, ref _enrollMachineNumber, ref _verifyMode, ref _inOutMode, ref _year, ref _month, ref _day, ref _hour, ref _minute)) { axCZKEM1.GetGeneralLogDataStr(1, ref dwEnrollNumber, ref dwVerifyMode, ref dwInOutMode, ref timeStr);
axCZKEM1.GetUserInfo(1, dwEnrollNumber, ref name, ref password, ref privileg, ref enable); int data1 = 0; int data2 = 1000000; conexaoMySQL = new SqlConnection(ConfigurationManager.ConnectionStrings["ERP_ProjectConnectionString"].ToString()); if (data1 < _minute) { //strSQL = "INSERT INTO InOut (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) VALUES ( '" + dwEnrollNumber + "','" + name + "','" + password + "','" + privileg + "','" + dwVerifyMode + "','" + dwInOutMode + "','" + timeStr + "','" + _machineNumber + "','" + _enrollNumber + "','" + _enrollMachineNumber + "','" + _verifyMode + "','" + _inOutMode + "','" + _year + "','" + _month + "', '" + _day + "','" + _hour + "','" + _minute + "')"; //strSQL = "INSERT INTO InOut (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) VALUES ( '" + 1 + "','" + "MM" + "','" + "PS" + "','" + 1 + "','" + 1 + "','" + 1 + "','" + "timeStr" + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "', '" + 1 + "','" + 1 + "','" + 1 + "')";
addinmacdll.AddGdata(dwEnrollNumber, name, password, privileg, dwVerifyMode, dwInOutMode, timeStr, _machineNumber, _enrollNumber, _enrollMachineNumber, _verifyMode, _inOutMode, _year, _month, _day, _hour, _minute);
}
Label1.Text = _enrollNumber.ToString(); } addinmacdll.AddActdata(); LblMsGError.Text = "تم تحميل الحركات "; } // GridView1.DataBind();
وبهذا تم الانتهاء والحمد لله وانا معكم فى التواصل على الميل المكتوب اعلاه
والسلام عليكم ورحمه الله
[/align]
RE: كود الإتصال بماكينات الحضور والإنصراف كامل - Nŏ Coммεητ - 15-09-13
جزاك الله خير والله يعطيك العافيه
بس ياليت يكون الكود في المشاركه مفصول عن الموضوع
وماقصرت وان شاء الله اجربه لاني بحاجه الكود
___________
دمت بخير
RE: كود الإتصال بماكينات الحضور والإنصراف كامل - hoob computer - 09-04-14
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته,
بعد إذن أخي (alhlawy), المشاركة غير واضحة بسبب عدم تنسيقها ...
أحببت أن أقوم بتنسيقها عن أخي صاحب الموضوع ... و للأمانة, لم أقم بتغيير أي شيء في محتواها.
تفضلوا:
السلام عليكم ورحمه الله وبركاته
أسأل الله تعالى أن يتقبل هذا العمل ويأجرنى عليه ويكون ذكاه علم لى
أخوكم فى الله محمد عبدالمرضى الحلوانى مصر وللتواصل معى إذا حدثت مشكله 24001742000
Moh.abdelmordy.it@gmail.com
الإتصال بأى ماكينه حضور وإنصراف سواء بالكارت أو بالبصمه فالتعامل ثابت لا يتغير ملحوظه قاعده البيانات سيكول سيرفر SQL Server
البدايه
سيتم فى البدايه اعداد وانشاء الجداول والاستورد بروسيدجر
أولا:- بناء الجداول اللازمه للإتصال وهما عباره عن جدولين:
الأول :- جدول يضاف فيه كل حركات الماكينه بكل الحقول وسيكون اسمه HR_InOut_Tbl
الثانى :- جدول يضاف فيه حركات الماكينه الجديده ففى الخطوات القادمه سنلاحظ إنه عند كل اتصال وتحميل للبيانات سيتم كل الحركات من على
الماكينه وسيتم ذلك على الجدول الأول أما الجدول الثانى فهو لإضاف السطور الجديده او الاحداث الجديده على الماكينه والبيانات القديمه محفوظه ايضا فيه
وسنرى كيف يتم ذلك
كود انشاء الجدول الأول HR_InOut_Tbl
PHP كود :
CREATE TABLE [dbo].[HR_InOut_Tbl]( [IDD] [int] IDENTITY(1,1) NOT NULL, [dwEnrollNumber] [int] NULL, [name] [nvarchar](50) NULL, [password] [nvarchar](50) NULL, [privileg] [int] NULL, [dwVerifyMode] [int] NULL, [dwInOutMode] [int] NULL, [timeStr] [nvarchar](50) NULL, [_machineNumber] [int] NULL, [_enrollNumber] [int] NULL, [_enrollMachineNumber] [int] NULL, [_verifyMode] [int] NULL, [_inOutMode] [int] NULL, [_year] [int] NULL, [_month] [int] NULL, [_day] [int] NULL, [_hour] [int] NULL, [_minute] [int] NULL, CONSTRAINT [PK_HR_InOut_Tbl] PRIMARY KEY CLUSTERED ( [IDD] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
كود انشاء الجدول الثانى HR_InOutAct_Tbl
PHP كود :
CREATE TABLE [dbo].[HR_InOut_Tbl]( [IDD] [int] IDENTITY(1,1) NOT NULL, [dwEnrollNumber] [int] NULL, [name] [nvarchar](50) NULL, [password] [nvarchar](50) NULL, [privileg] [int] NULL, [dwVerifyMode] [int] NULL, [dwInOutMode] [int] NULL, [timeStr] [nvarchar](50) NULL, [_machineNumber] [int] NULL, [_enrollNumber] [int] NULL, [_enrollMachineNumber] [int] NULL, [_verifyMode] [int] NULL, [_inOutMode] [int] NULL, [_year] [int] NULL, [_month] [int] NULL, [_day] [int] NULL, [_hour] [int] NULL, [_minute] [int] NULL, CONSTRAINT [PK_HR_InOut_Tbl] PRIMARY KEY CLUSTERED ( [IDD] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
ثانيا :- بناء كويرى لجلب البيانات التى لم تضاف فى الجدول الثانى HR_InOutAct_Tbl
وكود انشائها
PHP كود :
SELECT dbo.HR_InOut_Tbl.dwEnrollNumber, dbo.HR_InOut_Tbl.name, dbo.HR_InOut_Tbl.password, dbo.HR_InOut_Tbl.privileg, dbo.HR_InOut_Tbl.dwVerifyMode, dbo.HR_InOut_Tbl.dwInOutMode, dbo.HR_InOut_Tbl.timeStr, dbo.HR_InOut_Tbl._machineNumber, dbo.HR_InOut_Tbl._enrollNumber, dbo.HR_InOut_Tbl._enrollMachineNumber, dbo.HR_InOut_Tbl._verifyMode, dbo.HR_InOut_Tbl._inOutMode, dbo.HR_InOut_Tbl._year, dbo.HR_InOut_Tbl._month, dbo.HR_InOut_Tbl._day, dbo.HR_InOut_Tbl._hour, dbo.HR_InOut_Tbl._minute FROM dbo.HR_InOut_Tbl LEFT OUTER JOIN dbo.HR_InOutAct_Tbl ON dbo.HR_InOut_Tbl.dwEnrollNumber = dbo.HR_InOutAct_Tbl.dwEnrollNumber AND dbo.HR_InOut_Tbl.name = dbo.HR_InOutAct_Tbl.name AND dbo.HR_InOut_Tbl.password = dbo.HR_InOutAct_Tbl.password AND dbo.HR_InOut_Tbl.privileg = dbo.HR_InOutAct_Tbl.privileg AND dbo.HR_InOut_Tbl.dwVerifyMode = dbo.HR_InOutAct_Tbl.dwVerifyMode AND dbo.HR_InOut_Tbl.dwInOutMode = dbo.HR_InOutAct_Tbl.dwInOutMode AND dbo.HR_InOut_Tbl.timeStr = dbo.HR_InOutAct_Tbl.timeStr AND dbo.HR_InOut_Tbl._machineNumber = dbo.HR_InOutAct_Tbl._machineNumber AND dbo.HR_InOut_Tbl._inOutMode = dbo.HR_InOutAct_Tbl._inOutMode AND dbo.HR_InOut_Tbl._verifyMode = dbo.HR_InOutAct_Tbl._verifyMode AND dbo.HR_InOut_Tbl._enrollMachineNumber = dbo.HR_InOutAct_Tbl._enrollMachineNumber AND dbo.HR_InOut_Tbl._enrollNumber = dbo.HR_InOutAct_Tbl._enrollNumber AND dbo.HR_InOut_Tbl._year = dbo.HR_InOutAct_Tbl._year AND dbo.HR_InOut_Tbl._month = dbo.HR_InOutAct_Tbl._month AND dbo.HR_InOut_Tbl._day = dbo.HR_InOutAct_Tbl._day AND dbo.HR_InOut_Tbl._hour = dbo.HR_InOutAct_Tbl._hour AND dbo.HR_InOut_Tbl._minute = dbo.HR_InOutAct_Tbl._minute WHERE (dbo.HR_InOutAct_Tbl._minute IS NULL) GROUP BY dbo.HR_InOut_Tbl.dwEnrollNumber, dbo.HR_InOut_Tbl.name, dbo.HR_InOut_Tbl.password, dbo.HR_InOut_Tbl.privileg, dbo.HR_InOut_Tbl.dwVerifyMode, dbo.HR_InOut_Tbl.dwInOutMode, dbo.HR_InOut_Tbl.timeStr, dbo.HR_InOut_Tbl._machineNumber, dbo.HR_InOut_Tbl._enrollNumber, dbo.HR_InOut_Tbl._enrollMachineNumber, dbo.HR_InOut_Tbl._verifyMode, dbo.HR_InOut_Tbl._inOutMode, dbo.HR_InOut_Tbl._year, dbo.HR_InOut_Tbl._month, dbo.HR_InOut_Tbl._day, dbo.HR_InOut_Tbl._hour, dbo.HR_InOut_Tbl._minute
ثم قم بحفظ الفيو بإسم Vew_AllMacData
ثالثا : بناء الاستورد بروسيدجر اللازمه
-4 ستورد بروسيدجر لاضافه الحركات من الماكينه فى الجدول الاول HR_InOut_Tbl
-0 ستورد بروسيدجر لاضافه البيانات الجديده التى لم تضاف فى الجدول الثانى HR_InOutAct_Tbl
كود انشاء الاستورد بروسيدجر الاولى AddGdata
PHP كود :
CREATE PROCEDURE dbo.AddGdata ( @dwEnrollNumber Int, @name nvarchar(50), @password nvarchar(50), @privileg Int, @dwVerifyMode Int, @dwInOutMode Int, @timeStr nvarchar(50), @_machineNumber int, @_enrollNumber int, @_enrollMachineNumber int, @_verifyMode int, @_inOutMode int, @_year int, @_month int, @_day int, @_hour int, @_minute int ) AS delete from HR_InOut_Tbl insert into HR_InOut_Tbl (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) values (@dwEnrollNumber,@name,@password,@privileg,@dwVerifyMode,@dwInOutMode,@timeStr,@_machineNumber,@_enrollNumber,@_enrollMachineNumber,@_verifyMode,@_inOutMode,@_year,@_month,@_day,@_hour,@_minute) RETURN
كود انشاء الاستورد بروسيدجر الثانيه AddActdata
PHP كود :
CREATE PROCEDURE dbo.AddActdata AS insert into HR_InOutAct_Tbl (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) select dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute from Vew_AllMacData RETURN
الأكواد سليمه ان شاء الله ولكن تتبعو الخطوات بكل دقه
تم الانتهاء من اعداد الجداول وتهيئه الاستورد بروسيدجر سننتقل الى فيجوال بيسك ونفتح مشروع ويب جديد بلغه سى
شارب C#
تم ارفاق ملف SDK فى المرفقات فك ضغط الملف وقم بعمل كوبى لكل الملفات الموجوده فيه وقم بنسخها فى System32
او بنسخها فى Syswow64 اذا كانت الويندوز 7 او 8 او فيستا
ثم قم بكتابه التالى فى قائمه Run
Cmd
ويفضل فتح نافذه ال Command ب
Run As Administrator
ونكتب التالى فيها
Regsvr32 C:\Windows\SysWOW64\ zkemkeeper.dll
ثم اضغط انتر
ستظهر نافذه تدلك على نجاح العمليه فاذا ظهر رساله خطأ فابحث عن الخطأ فى جوجل الحلول موجوده فلن نتطرق لحل
مشاكل ال regsvr هنا حيث انه موضوع طويل بعد نجاح العمليه
-4 سنتوجه الان الى مشروع الويب ونقوم بعمل اد ريفرنس لملف ال zkemkeeper.dll من مساره على سيستم 20 او
سيس واو 41 ونضغط اوك
-0 اضافه جمله الاتصال التاليه فى ملف الويب كونفيج بين تاجات PHP كود :
connectionStrings <connectionStrings> <add name="ERP_ProjectConnectionString" connectionString="Data Source=.;Initial Catalog=ERP_Project;uid=sa; password=mordy;" providerName="System.Data.SqlClient"/> </connectionStrings>
-2 اضافه كلاس للاتصال مع قاعده بيانات السيكول وسيكون اسمه PHP كود :
ConnectMang 4- using System; 5- using System.Data; 6- using System.Configuration; 7- using System.Linq; 8- using System.Web; 9- using System.Web.Security; 10- using System.Web.UI; 11- using System.Web.UI.HtmlControls; 12- using System.Web.UI.WebControls; 13- using System.Web.UI.WebControls.WebParts; 14- using System.Xml.Linq; 15- using System.Data.SqlClient; 16- 17- 18- /// <summary> 19- /// Summary description for ConnectMang 20- /// </summary> 21- public class ConnectMang 22- { 23- 24- public static SqlConnection GetConnection() 25- { 26- 27- SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ERP_ProjectConnectionString"].ToString()); 28- Conn.Open(); 29- return Conn; 30- } 31- }
-1 عمل كلاس لعمل الميسود التى ستستدعى من خلالها الاستورد بروسيدجر التى تم عملها فى السيكول سيرفر
من قبل واسم الكلاس AddInMac
وكود الميسودز
PHP كود :
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.SqlClient; using System.Data; using System.Collections.Generic; /// <summary> /// Summary description for AddInMac /// </summary> public class AddInMac { public AddInMac() { // // TODO: Add constructor logic here // } public void AddGdata(Int32 dwEnrollNumber, string name, string password, Int32 privileg, Int32 dwVerifyMode, Int32 dwInOutMode, string timeStr, int _machineNumber, int _enrollNumber, int _enrollMachineNumber, int _verifyMode, int _inOutMode, int _year, int _month, int _day, int _hour, int _minute) { using (SqlConnection con = ConnectMang.GetConnection()) { SqlCommand Cmd = new SqlCommand("AddGdata", con); Cmd.CommandType = CommandType.StoredProcedure; Cmd.Parameters.AddWithValue("@dwEnrollNumber", dwEnrollNumber); Cmd.Parameters.AddWithValue("@name", name); Cmd.Parameters.AddWithValue("@password", password); Cmd.Parameters.AddWithValue("@privileg", privileg); Cmd.Parameters.AddWithValue("@dwVerifyMode", dwVerifyMode); Cmd.Parameters.AddWithValue("@dwInOutMode", dwInOutMode); Cmd.Parameters.AddWithValue("@timeStr", timeStr); Cmd.Parameters.AddWithValue("@_machineNumber", _machineNumber); Cmd.Parameters.AddWithValue("@_enrollNumber", _enrollNumber); Cmd.Parameters.AddWithValue("@_enrollMachineNumber", _enrollMachineNumber); Cmd.Parameters.AddWithValue("@_verifyMode", _verifyMode); Cmd.Parameters.AddWithValue("@_inOutMode", _inOutMode); Cmd.Parameters.AddWithValue("@_year", _year); Cmd.Parameters.AddWithValue("@_month", _month); Cmd.Parameters.AddWithValue("@_day", _day); Cmd.Parameters.AddWithValue("@_hour", _hour); Cmd.Parameters.AddWithValue("@_minute", _minute); Cmd.ExecuteNonQuery(); } } public void AddActdata() { using (SqlConnection con = ConnectMang.GetConnection()) { SqlCommand Cmd = new SqlCommand("AddActdata", con); Cmd.CommandType = CommandType.StoredProcedure; Cmd.ExecuteNonQuery(); } } }
-5 ثم اضافه عدد 2 تكست بوكس وعدد 0 بوتون فى صفحه الويب وجريد فيو وقم بتغير اسمائها كما فى الكود
الدخول على كود بهيند الصفحه بدبل كليك على الصفحه ونستدعى فضاءات الاسماء التاليه مع استدعاء اسم الملف
الدى ال ال الذى قمنا بعمل اد ريفرنس له كالتالى
PHP كود :
using System; using System.Collections.Generic; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration; using zkemkeeper;
ملف الدى ال ال
-4 ثم عمل اوبجكت من ملف الدى ال وتعريف الفاريبول واوبجكت من ملف الكلاس الخاص بالميسود الذى قمنا بعمله من قبل راجع الخطوات ويتم
وضع سطور الكود تحت
PHP كود :
Page: System.Web.UI. HR_PersonalAffire_DownDataMac class partial public Boolean conn, ll; Int32 errCode, rr; DataTable Dt = new DataTable(); public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
اوبجكت من ملف الدى ال ال الريفرنس
PHP كود :
private Boolean bIsConnected = false; private int iMachineNumber; AddInMac addinmacdll = new AddInMac();
اوبجكت من الكلاس الذى قمنا بتعريفه
-7 كود الزر الاول Connection – Check
PHP كود :
try { axCZKEM1.SetCommPassword(Convert.ToInt16(Txt_CommKey.Text.Trim())); axCZKEM1.BASE64 = 1; conn = axCZKEM1.Connect_Net(Txt_MacIP.Text.Trim(), Convert.ToInt16(Txt_MacPort.Text.Trim())); axCZKEM1.GetLastError(errCode); rr = axCZKEM1.MachineNumber; if (conn.Equals(true)) { LblMsGError.Text = "تم الإتصال بنجاح تستطيع تحميل الحركات "; } } catch (Exception ex) { string Er = ex.ToString(); HttpCookie ErCokis = new HttpCookie("ErCokis"); ErCokis.Value = Er.ToString(); ErCokis.Expires = DateTime.Now.AddHours(1); Response.Cookies.Add(ErCokis); Response.Redirect("~/ErrorPage.aspx"); }
ملحوظه يجب ان نقوم بعمل ميسود لكود فتح الاتصال ونستدعيها تحت الزر الاول بدلا من كتابه هذا الكود تحت الزر
الاول لاننا سنحتاج فتح الاتصال فى عمليه تحميل الحركات وذلك بدلا من اعاده كتابه نفس سطور الكود مره اخرى
تحت الزر الثانى
كود الزر الثانى
ميسود فتح الاتصال الذى تكلمنا عنها وهى نفس الكود المكتوب تحت الزر الاول
PHP كود :
int dwEnrollNumber = 0; string name = ""; string password = ""; int privileg = 0; SqlConnection conexaoMySQL = default(SqlConnection); string strSQL = ""; int dwVerifyMode = 0; int dwInOutMode = 0; string timeStr = ""; bool enable = false; System.Text.StringBuilder _data = new System.Text.StringBuilder(); int _errorCode = 0; int _machineNumber = 0; int _enrollNumber = 0; int _enrollMachineNumber = 0; int _verifyMode = 0; int _inOutMode = 0; int _year = 0; int _month = 0; int _day = 0; int _hour = 0; int _minute = 0; axCZKEM1.BASE64 = 1; axCZKEM1.ReadMark = true; axCZKEM1.GetLastError(_errorCode); axCZKEM1.ReadAllUserID(1); axCZKEM1.ReadMark = true; // Boolean DD = axCZKEM1.ReadGeneralLogData(rr); // Label1.Text = DD.ToString()+"MacNum____"+rr.ToString(); if (axCZKEM1.ReadGeneralLogData(1)) { axCZKEM1.GetLastError(ref _errorCode); while (axCZKEM1.GetGeneralLogData(1, ref _machineNumber, ref _enrollNumber, ref _enrollMachineNumber, ref _verifyMode, ref _inOutMode, ref _year, ref _month, ref _day, ref _hour, ref _minute)) { axCZKEM1.GetGeneralLogDataStr(1, ref dwEnrollNumber, ref dwVerifyMode, ref dwInOutMode, ref timeStr); axCZKEM1.GetUserInfo(1, dwEnrollNumber, ref name, ref password, ref privileg, ref enable); int data1 = 0; int data2 = 1000000; conexaoMySQL = new SqlConnection(ConfigurationManager.ConnectionStrings["ERP_ProjectConnectionString"].ToString()); if (data1 < _minute) { //strSQL = "INSERT INTO InOut (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) VALUES ( '" + dwEnrollNumber + "','" + name + "','" + password + "','" + privileg + "','" + dwVerifyMode + "','" + dwInOutMode + "','" + timeStr + "','" + _machineNumber + "','" + _enrollNumber + "','" + _enrollMachineNumber + "','" + _verifyMode + "','" + _inOutMode + "','" + _year + "','" + _month + "', '" + _day + "','" + _hour + "','" + _minute + "')"; //strSQL = "INSERT INTO InOut (dwEnrollNumber,[name],password,privileg,dwVerifyMode,dwInOutMode,timeStr,_machineNumber,_enrollNumber,_enrollMachineNumber,_verifyMode,_inOutMode,_year,_month,_day,_hour,_minute) VALUES ( '" + 1 + "','" + "MM" + "','" + "PS" + "','" + 1 + "','" + 1 + "','" + 1 + "','" + "timeStr" + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "', '" + 1 + "','" + 1 + "','" + 1 + "')"; addinmacdll.AddGdata(dwEnrollNumber, name, password, privileg, dwVerifyMode, dwInOutMode, timeStr, _machineNumber, _enrollNumber, _enrollMachineNumber, _verifyMode, _inOutMode, _year, _month, _day, _hour, _minute); } Label1.Text = _enrollNumber.ToString(); } addinmacdll.AddActdata(); LblMsGError.Text = "تم تحميل الحركات "; } // GridView1.DataBind();
وبهذا تم الانتهاء والحمد لله وانا معكم فى التواصل على الميل المكتوب اعلاه
والسلام عليكم ورحمه الله
|