أساتذتي الأفاضل : هل يمكن توليد الرقم الوظيفي تلقائيا على الأكسس بمجرد الضغط علز زر إضافة من الفيجوال بيسك؟؟؟؟؟
لأنني أعمل بالفيجوال والأكسس
أرجو الإفادة وبسرعة
ألف شكر مقدما
أساتذتي الأفاضل : هل يمكن توليد الرقم الوظيفي تلقائيا على الأكسس بمجرد الضغط علز زر إضافة من الفيجوال بيسك؟؟؟؟؟
لأنني أعمل بالفيجوال والأكسس
أرجو الإفادة وبسرعة
ألف شكر مقدما
السلام عليكم...
إذا كان الرقم الوظيفي عدداً صحيحاً تسلسلياً فالأمر بسيط:
1. إما أن نجعل حقل الرقم الوظيفي (ID مثلاً) في Access من النوع "ترقيم تلقائي" (Auto Increment). و في هذه الحالة لا نحتاج إلى كود لتحديد الرقم الوظيفي الجديد لأنه بمجرد إضافة سجل جديد إلى الجدول سيتولى Access إعطاء قيمة جديدة غير مكررة لحقل الرقم الوظيفي.
2. إذا كنا نريد استعمال حقل عددي عادي (ليس ترقيماً تلقائياً) فإننا نجعل نوعه "رقم - عدد صحيح طويل" (Number - Long) ثم في الـ VB نكتب دالة كالمبينة في الكود أدناه للحصول على رقم وظيفي جديد:
Private Function GetNewID() As Long
Dim RS As New ADODB.Recordset
RS.Open "SELECT MAX(ID) AS MaxID FROM Employees", SQLCnn, adOpenStatic, adLockOptimistic, adCmdText
If RS.Bof And RS.Eof Then
GetNewID = 1
ElseIf IsNull(RS("MaxID")) Then
GetNewID = 1
Else
GetNewID = RS("MaxID") + 1
End If
RS.Close
Set RS = Nothing
End Functionحيث ID هو اسم حقل الرقم الوظيفي، Employees هو اسم جدول بيانات الموظف، و SQLCnn إما نص اتصال بقاعدة البيانات (Connection String) أو كائن ADODB.Connection مفتوح سابقاً.
نرجو الاستفادة و السلام.
وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ
صدق الله العظيم
أنا استخدم
adodc
في عملية ربط القاعدة بالفيجوال ولم أعرف ماذا أغير من الكود الذي أعطيتني إياه
هل بالغمكان تسهيل الموضوع أكثر
أشكرك على تفهمك
أختى nada480
أختى انا اعتقد انا انتى عايزه كود للترقيم التلقائى لكل سجل (فى الحسبان اضافة وحذف)؟
بص أختى عموما وبدون اكواد هحاول اقولك الفكره كده اوكى
انتى فى السجل اللى قبل الاخير ده كان فى حقل انت مسجل فى مجموع عدد السجلات الموجوده...................يبقى ممكن نفتح قاعدة البيانات ونستدعى الحقل ده تانى ونزود عليه +1
وليكن الحقل ده اسمه myid
اقتباسData1.Recordset.MoveLasttext1.Text = Data1.Recordset("myid") + 1
Data1.Refresh
الطريقه التانيه إنك ممكن فى كل مره تعمل تشيك على عدد السجلات الموجوده عندك فى الجدول
بحيث الكود يبقى كده
text1.Text = Data1.Recordset.RecordCount + 1 Data1.Refresh
أختى يارب اكون وصلتلك الفكره
أختى لو معرفتيش برده
اذهبى للموضوع ده
بالتوفيق ان شاء الله
00
فاضى
00
ماذا لو تم حذف سجل موظف ... عندها سيتكرر الرقم لان العمليه تمت على اجمالي عدد السجلات .
أما طريقة الأخ : najy_zl فهي طريقه صحيحه مليون بالميئه .
ليس كل ما يتمناه المرء يدركه

أخى العقده
عزرا انا لا اقول كلام هباءا انا اقول بالحذف والاضافة نعم بالحذف والاضافة انظر المشاركه رقم 7
00
فاضى
00
اقتباسأما طريقة الأخ : najy_zl فهي طريقه صحيحه مليون بالمئه .
طريقة الاخ najy_zl هي حل متكامل لايؤثر على نتائجها الحذف أو الاضافه ... اما حلك فهو حل ناقص ومؤقت يستثني الحذف والاضافه والتي لا بد ان تتعرض لها قاعدة البيانات .
لا يصح الا الصحيح
تم تعديل هذه المشاركة بواسطة العقده في 1 يوليو 2008 في 06:02
ليس كل ما يتمناه المرء يدركه

أخى العقده
ههههههههههههههههه
والله أخى شككتنى بنفسى ورحت اجرب مثالى هلى العموم انا لا اطلب الا وجه الله
00
فاضى
00
السلام عليكم...
الآخ "wael abed" لقد قمت بإنزال المثال الذي أشرت إليه بأنه في المشاركة 7 المتعلقة بنفس الموضوع في موقع vb4arab و إليك الملاحظات التالية من واقع تجربة عملية لمدة أكثر من 10 سنوات في دوشة البرمجة و قواعد البيانات:
1. قبل تشغيل البرنامج فتحت قاعدة البيانات و حذفت أحد السجلات. و عند تشغيل البرنامج و الضغط على الزر جديد أعطاني أن الرقم التالي هو 88، مع أنه يوجد سجل بالرقم 88 (ما الذي يمنع أي مستخدم من فعل ذلك، خاصة إذا كانت قاعدة البيانات غير محمية بكلمة مرور؟).
2. إذا كان الأمر يتعلق بالحصول على رقم تعريف فريد (Unique Identifier) فإنه لا أهمية إطلاقاً لأن تكون الأرقام مرتبة تسلسلياً (1، 2، 3، ... إلخ). لأن الغرض من المعرفات هو ضمان تعريف كل سجل (موظف، صنف، جهة، ... إلخ) بقيمة فريدة لا تتكرر بحيث تكون بمثابة مؤشر لذلك السجل. بل ليس من الضروري أصلاً أن تكون المعرفات أعداداً صحيحة، و لقد رأيت في بعض البرامج التجارية الكبيرة أن المعرفات عبارة عن مزيج من الأرقام و الحروف يتم توليدها (يمكن القول عشوائياً!) و لكن مع ضمان عدم تكرارها في نفس الجدول.
3. استعمال RecordCount قد يكون أحياناً مكلفاً (في وقت و جهد البرنامج) لأن بعض محركات قواعد البيانات تحتاج إلى الذهاب إلى آخر سجل في الجدول (أو مجموعة السجلات) للحصول على العدد الفعلي للسجلات (ماذا لو كانت السجلات في الجدول بعشرات الآلاف؟).
نص مأخوذ من ملف تعليمات DAO
The RecordCount property doesn't indicate how many records are contained in a dynaset-, snapshot-, or forward-only–type Recordset object until all records have been accessed
4. لاحظ أنك في برنامجك كلما أضفت سجلاً أو حذفت سجلاً تقوم بالمرور على كافة السجلات و إعادة ضبط الـ ID باستعمال حلقة For، و لي ملاحظتان هنا:
أ. أنك تعتمد فيها على خاصية RecordCount و هي كما ذكرنا في النقطة السابقة غير مضمونة.
ب. تصور لو أن برنامجك يعمل في محل تجاري متوسط به بضعة آلاف من الأصناف فأية سرعة تتوقعها لهذا البرنامج مع وجود مثل هذه الحلقة؟ زد على ذلك لو أن البرنامج يعمل في محل أكبر و يحتوي على 3 أو 4 نقاط بيع (طبعاً على شبكة) مع وجود عشرات الآلاف من الأصناف، ستصاب الشبكة بالازدحام و تتوقف.
أخيراً إذا كنت فعلاً محتاجاً إلى أن تكون الأرقام متسلسلة فيجب البحث عن طريقة أخرى.
نرجو الاستفادة و السلام.
وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ
صدق الله العظيم
nada480 كتب:أنا استخدمadodc
في عملية ربط القاعدة بالفيجوال ولم أعرف ماذا أغير من الكود الذي أعطيتني إياه
هل بالغمكان تسهيل الموضوع أكثر
أشكرك على تفهمك
\/
كلمات اتعبت الملائكة في كتابة الأجر فذهبوا وشكوا إلى ربهم .... ماذا يفعلون
فقال لهم سبحانه وتعالى اطووها بصحائفها وضعوها تحت عرشي فتبقى حسناتها إلى يوم القيامة الله اكبر
(( اللهم لك الحمد كما ينبغي لجلال وجهك وعظيم سلطانك))
اين الحل ؟
كلمات اتعبت الملائكة في كتابة الأجر فذهبوا وشكوا إلى ربهم .... ماذا يفعلون
فقال لهم سبحانه وتعالى اطووها بصحائفها وضعوها تحت عرشي فتبقى حسناتها إلى يوم القيامة الله اكبر
(( اللهم لك الحمد كما ينبغي لجلال وجهك وعظيم سلطانك))
ضع هذا الكود في زر جديد في المثال المرفق من قبل الأخت layan كما يجب تغيير اسماء الحقول في الجدول لان بعضها اسماء محجوزة . مثل name ,no
ولنفترض اننا قمنا باعادة تغيير اسم الحقل no الى myno
Command1.Enabled = False
Dim rs As New ADODB.Recordset
If rs.State = adStateOpen Then rs.Close
rs.Open "select max(myno)as NewID from tab;", Adodc1.ConnectionString, adOpenStatic, adLockOptimistic
Dim newID As Integer
newID = IIf(rs.Fields("NewID") <> Null, rs.Fields("NewID") + 1, 1)
rs.Close
Set rs = Nothing
DoEvents
Adodc1.Recordset.AddNew
DoEvents
Text1.Text = newIDتحياتي
OMANI FOR EVER
-------------------------------------------------

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