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

هل يوجد كود لبناء جدول عن طريق VBA

مغلق
بدأه wkalo في 13 أبريل 2006 · 4 رد · 2,289 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

هل يوجد كود لبناء جدول عن طريق VBA و تحديد خاصية كل Field اذا كان Number، Auto Number،Text او ما شابه

شكرا سلفا

#2

اخي الفاضل

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

نعم يمكن انشاء عدة جداول برمجيا عن طريق العبارة CREATE TABLE

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

عبارة CREATE TABLE

تنشئ جدولاً جديداً.

بناء الجملة

CREATE [TEMPORARY] TABLE table (field1 type [(size)] [NOT NULL] [WITH COMPRESSION | WITH COMP] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]])

تتكون عبارة CREATE TABLE من الأجزاء التالية:

الجزء ............................الوصف

table ...........................اسم الجدول المراد إنشاؤه.

field1, field2 ..............اسم الحقل أو الحقول المراد إنشاؤها في الجدول الجديد. ينبغي إنشاء حقل واحد على الأقل.

type ............................نوع بيانات field (الحقل) في الجدول الجديد.

size .............................حجم الحقل بالأحرف (الحقول النصية وحقول البيانات الثنائية فقط).

index1, index2 .........جملة CONSTRAINT التي تقوم بتعريف الفهرس ذو الحقل الواحد.

multifieldindex .........جملة CONSTRAINT التي تقوم بتعريف فهرس متعدد الحقول.

تنويهات هامة :

1. استخدم عبارة CREATE TABLE لتعريف جدول جديد وحقوله وقيود حقوله. في حالة تعيين NOT NULL لأحد الحقول، ستحتاج السجلات الجديدة إلى وضع بيانات صالحة في هذا الحقل.

2. تقوم جملة CONSTRAINT بإنشاء قيود متعددة على أحد الحقول، ويمكن استخدمها لإنشاء المفتاح الأساسي. يمكنك أيضاً استخدام عبارة CREATE INDEX لإنشاء مفتاح أساسي أو فهارس إضافية في جداول موجودة.

3. يمكنك استخدام NOT NULL في حقل مفرد أو داخل جملة CONSTRAINT المسماة التي يتم تطبيقها إما على حقل واحد أو حقول متعددة مسماة CONSTRAINT. ومع ذلك، يمكنك تطبيق قيد NOT NULL مرة واحدة فقط على حقل. تؤدي محاولة تطبيق هذا القيد أكثر من مرة واحدة إلى حدوث خطأ أثناء وقت التشغيل.

4. عند إنشاء جدول TEMPORARY (مؤقت)، فإنه يظهر في جلسة العمل التي تم إنشاؤه فيها فقط. ويتم حذفه تلقائياً عند انتهاء جلسة العمل. يمكن لأكثر من مستخدم واحد الوصول إلى الجداول المؤقتة.

5. يمكن استخدام السمة WITH COMPRESSION مع أنواع البيانات CHARACTER "الأحرف" و MEMO "المذكرة" (المعروفة أيضاً بـ TEXT "نص") ومرادفاتها.

6. تمت إضافة السمة WITH COMPRESSION للأعمدة CHARACTER (الحرف) بسبب التغيير في تنسيق تمثيل أحرف Unicode. تحتاج أحرف Unicode بشكل مطرد إلى وحدتي بايت لكل حرف. وبالنسبة لقواعد بيانات Microsoft® Jet الموجودة التي تحتوي على بيانات نصية غالباً، قد يعني هذا أنه ستتم مضاعفة حجم ملف قاعدة البيانات تقريباً عند التحويل إلى تنسيق Microsoft Jet 4.0. ومع ذلك، يمكن بسهولة ضغط تمثيل Unicode الخاص بالعديد من مجموعات الأحرف، والتي كانت تتم الإشارة إليها سابقاً بمجموعات الأحرف أحادية البايت (SBCS)، إلى بايت واحد. في حالة تعريف العمود CHARACTER باستخدام هذه السمة، سيتم ضغط البيانات تلقائياً عند تخزينها وسيتم إلغاء ضغطها عند استردادها من العمود.

7. يمكن أيضاً تعريف الأعمدة MEMO (المذكرة) لتخزين البيانات بتنسيق مضغوط. ومع ذلك، هناك تقييد لذلك. سيتم ضغط مثيلات أعمدة MEMO فقط التي يصل حجمها إلى 4096 بايت أو أقل، عند الضغط. وستبقى كافة مثيلات أعمدة MEMO الأخرى غير مضغوطة. هذا يعني أنه داخل أي جدول معين، يمكن ضغط بعض البيانات ويمكن إلغاء ضغط بعضها الآخر في عمود MEMO معين.

استعلام تعريف البيانات

يقوم استعلام تعريف البيانات بإنشاء أو حذف أو تغيير الجداول أو إنشاء الفهارس في جدول قاعدة بيانات. على سبيل المثال، يستخدم استعلام تعريف البيانات التالي العبارة CREATE TABLE لإنشاء جدول يسمى "الأصدقاء" (Friends). وتشمل العبارة الاسم ونوع البيانات لكل حقل في الجدول ويعين للحقل FriendID فهرساً يجعل منه المفتاح الأساسي

مثال على انشاء جدول برمجيا

قم بعمل قاعدة بيانات جديده خالية من الجداول .

قم بعمل نموذج فارغ وضع به زر امر مثلا GO وفي حدث عند النقر ضع هذا الكود

Private Sub GO_Click()
DoCmd.RunSQL "CREATE TABLE Friends" & _
"([FriendID] integer," & _
"[LastName] text," & _
"[FirstName] text," & _
"[Birthdate] date," & _
"[Phone] text," & _
"[Notes] memo," & _
"CONSTRAINT [Index1] PRIMARY KEY ([FriendID]));"
MsgBox "مبروك تم انشاء الجدول بنجاح"
End Sub

بعد النقر على زر الامر سينشأ لك جدول جديد بإسم Friends قم بالاطلاع عليه

وهذا مثال عملي على ذلك ( قبل الضغط على زر الامر تأكد انه لايوجد جدول بإسم Friends ومن ثم قم بالضغط على زر الامر وتأكد الان من الجدول المنشىء برمجيا

CreateTableProgrammatically.rar

اختكم

زهره

تم تعديل هذه المشاركة بواسطة zahrah في 14 أبريل 2006 في 17:54

#3

بارك الله فيك .......

كعادتك دائما سباقة للخير ماشاء الله :D :D

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

كنت ابرفقه لكن خلاص اذا حضر الماء بطل التيمم :lol: :lol:

الكود مختصر جدا

طبعا تحت زر امر a

Private Sub a_Click()
On Error GoTo Err_a_Click


DoCmd.RunSQL "create table tab (ID Integer, Name Char, Dateone Date)"

MsgBox "تم انشاء الجدول بنجاح"


Exit_a_Click:
    Exit Sub

Err_a_Click:
    MsgBox Err.Description
    Resume Exit_a_Click
    
End Sub

لكن مثالك ممتاز جدا حيث فيه خاصية PRIMARY KEY .......

وبعد اذنك يا اخت زهرررررررررة تراني عدلت في المرفق شوي :) :) ادري ان حقوق الطبع محفوظة في درج الطاولة :D :D

لأنه عند انشاء الجدول للمرة الثانية يظهر الخطأ في الكود ............

تحياتي للجميع.............

CreateTableProgrammatically.rar

ريح من الزفرات تعصف في الحشى &&& و ورائها مطر من العبرات

ابو حسن

#4

تحسينات على المثال السابق ويحتوي :

'حذف السجلات و الابقاء على هيكل الجدول
Sub EmptyMDBTable(ByVal MDBTable As String)
Dim strSQL As String
DoCmd.Hourglass True
DoCmd.SetWarnings False
strSQL = " DELETE * FROM " & MDBTable & ";"
DoCmd.RunSQL (strSQL)
DoCmd.SetWarnings True
DoCmd.Hourglass False
End Sub



'حذف الجول برمجياُ
Sub DeleteMDBTable(ByVal MDBTable As String)
DoCmd.Hourglass True
DoCmd.SetWarnings False
DoCmd.DeleteObject acTable, MDBTable
DoCmd.SetWarnings True
DoCmd.Hourglass False

End Sub





'اختبار وجود الجول من عدمه
Function TableExists(ByVal MDBTable As String) As Boolean
Dim TableDefsCounter As Long
TableExists = False
For TableDefsCounter = 0 To CurrentDb.TableDefs.Count - 1
        If (MDBTable = CurrentDb.TableDefs(TableDefsCounter).Name) Then
        TableExists = True
        End If
    Next TableDefsCounter
End Function






'عدد السجلات في جدول
Function TableRecordCount(ByVal MDBTable As String) As Long

TableRecordCount = Application.CurrentDb.TableDefs(MDBTable).RecordCount
End Function

آمل ان تكون هذه الاضافة مفيدة

CreateTableProgrammatically3.rar

تم تعديل هذه المشاركة بواسطة f11 في 15 أبريل 2006 في 13:48

#5

بسم الله الرحمن الرحيم

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

الى الاخوه الكرام الاخت zahrah،الاخ المبرج2003، الاخ f11

اود ان اشكر كل فرد منكم على التعاون السريع و بالاخص الاخت zahrah التي دائما في الطليعة و السباقة لمساعدة الاخوه في المنتدى، عسى الله سبحانه و تعالى ان يجعل هذه الاعمال في ميزان حسناتكم.............

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

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