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

هل يمكن توليد رقم تلقائيا؟

بدأه nada480 في 27 يونيو 2008 · 13 رد · 4,126 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أساتذتي الأفاضل : هل يمكن توليد الرقم الوظيفي تلقائيا على الأكسس بمجرد الضغط علز زر إضافة من الفيجوال بيسك؟؟؟؟؟

لأنني أعمل بالفيجوال والأكسس

أرجو الإفادة وبسرعة

ألف شكر مقدما

#2

السلام عليكم...

إذا كان الرقم الوظيفي عدداً صحيحاً تسلسلياً فالأمر بسيط:

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 مفتوح سابقاً.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

أنا استخدم

adodc

في عملية ربط القاعدة بالفيجوال ولم أعرف ماذا أغير من الكود الذي أعطيتني إياه

هل بالغمكان تسهيل الموضوع أكثر

أشكرك على تفهمك

#4

أختى nada480

أختى انا اعتقد انا انتى عايزه كود للترقيم التلقائى لكل سجل (فى الحسبان اضافة وحذف)؟

بص أختى عموما وبدون اكواد هحاول اقولك الفكره كده اوكى

انتى فى السجل اللى قبل الاخير ده كان فى حقل انت مسجل فى مجموع عدد السجلات الموجوده...................يبقى ممكن نفتح قاعدة البيانات ونستدعى الحقل ده تانى ونزود عليه +1

وليكن الحقل ده اسمه myid

اقتباس
Data1.Recordset.MoveLast

text1.Text = Data1.Recordset("myid") + 1

Data1.Refresh

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

بحيث الكود يبقى كده

text1.Text = Data1.Recordset.RecordCount + 1
Data1.Refresh

أختى يارب اكون وصلتلك الفكره

أختى لو معرفتيش برده

اذهبى للموضوع ده

vb4arab

بالتوفيق ان شاء الله

00
 

فاضى 

 

00

#5

ماذا لو تم حذف سجل موظف ... عندها سيتكرر الرقم لان العمليه تمت على اجمالي عدد السجلات .

أما طريقة الأخ : najy_zl فهي طريقه صحيحه مليون بالميئه .

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#6

أخى العقده

عزرا انا لا اقول كلام هباءا انا اقول بالحذف والاضافة نعم بالحذف والاضافة انظر المشاركه رقم 7

00
 

فاضى 

 

00

#7
اقتباس
أما طريقة الأخ : najy_zl فهي طريقه صحيحه مليون بالمئه .

طريقة الاخ najy_zl هي حل متكامل لايؤثر على نتائجها الحذف أو الاضافه ... اما حلك فهو حل ناقص ومؤقت يستثني الحذف والاضافه والتي لا بد ان تتعرض لها قاعدة البيانات .

لا يصح الا الصحيح

تم تعديل هذه المشاركة بواسطة العقده في 1 يوليو 2008 في 06:02

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#8

أخى العقده

ههههههههههههههههه

والله أخى شككتنى بنفسى ورحت اجرب مثالى هلى العموم انا لا اطلب الا وجه الله

00
 

فاضى 

 

00

#9

السلام عليكم...

الآخ "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 نقاط بيع (طبعاً على شبكة) مع وجود عشرات الآلاف من الأصناف، ستصاب الشبكة بالازدحام و تتوقف.

أخيراً إذا كنت فعلاً محتاجاً إلى أن تكون الأرقام متسلسلة فيجب البحث عن طريقة أخرى.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#10
nada480 كتب:
أنا استخدم

adodc

في عملية ربط القاعدة بالفيجوال ولم أعرف ماذا أغير من الكود الذي أعطيتني إياه

هل بالغمكان تسهيل الموضوع أكثر

أشكرك على تفهمك

\/

كلمات اتعبت الملائكة في كتابة الأجر فذهبوا وشكوا إلى ربهم .... ماذا يفعلون

فقال لهم سبحانه وتعالى اطووها بصحائفها وضعوها تحت عرشي فتبقى حسناتها إلى يوم القيامة الله اكبر

(( اللهم لك الحمد كما ينبغي لجلال وجهك وعظيم سلطانك))

#11

اخى ارفع مثالك ليتم التعديل عليه

بالتوفيق ان شاء الله

00
 

فاضى 

 

00

#12

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

هذا مثال

ASDF.rar

كلمات اتعبت الملائكة في كتابة الأجر فذهبوا وشكوا إلى ربهم .... ماذا يفعلون

فقال لهم سبحانه وتعالى اطووها بصحائفها وضعوها تحت عرشي فتبقى حسناتها إلى يوم القيامة الله اكبر

(( اللهم لك الحمد كما ينبغي لجلال وجهك وعظيم سلطانك))

#13

اين الحل ؟

كلمات اتعبت الملائكة في كتابة الأجر فذهبوا وشكوا إلى ربهم .... ماذا يفعلون

فقال لهم سبحانه وتعالى اطووها بصحائفها وضعوها تحت عرشي فتبقى حسناتها إلى يوم القيامة الله اكبر

(( اللهم لك الحمد كما ينبغي لجلال وجهك وعظيم سلطانك))

#14

ضع هذا الكود في زر جديد في المثال المرفق من قبل الأخت 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

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

post-12787-12780191801974.jpg

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

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