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

اخفاء الجداول بالكود

مغلق
بدأه علي حسين في 23 سبتمبر 2001 · 9 رد · 1,722 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة الكرام السلام عليكم

عندي برنامج مربوط بقاعدة بيانات .في البداية عملت ربط لبعض الجداول وتم عمل البرنامج والحمدلله .

السؤال هو /

كيف يمكن اخفاء جميع الجداول والاستعلامات من القاعدة الجديدة بحيث لايمكن مشاهدة اي منها بالدخول عن طريق الشفت .حسب معلوماتي ان الطريقة هي الكتابة بالكود ولكن كيف .ارجو التوضيح بالتفصيل .

ولكم مني كل الشكر والتقدير...

#3

اخي واستاذي الكبير ابو حمود

ماقصدت هو كيف يمكن ربط الجداول باستخدام الكود ،وليس الغاء عمل الشفت ، بحيث حتى لو استخدم المستخدم الشفت لايرى اي جدول.

وعذرا على عدم صياغة السؤال بطريقة غير واضحة.

#4

ما معنى ربط الجداول ؟

هل تقصد تقسيم القاعدة الى قاعدتين الأولى فيها الجداول والثانية فيها بقية الكائنات أم ماذا ؟

ولك تحياتي

#5

استاذي الكريم ابو حمود

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

بمعنى اوضح عندي قاعدة بها اسماء جميع الموظفين تعمل على برنامج ضخم .

وارغب في عمل بعض التقارير وتكوين قاعدة بيانات صغيرة لبعض التقارير الغير موجودة في القاعدة الاساسية .طبعا عملت ذلك بربط القاعدتين مع بعض وتم كل شيء .والجداول المرتبطة الكل يستطيع ان يراها عند الخول مع الشفت .

لكن هناك طريقة اخرى وهي ربط الجداول باستخدام الكود .بمعنى لو دخل على القاعدة بعد تحويلها الى mde باستخدام الشفت لايرى اي جدول .

ولك كل الشكر والتقدير ياعزيزي واستاذي الكريم.

#6

ألغي عمل الشفت وهذا موضوع بكيفية ذلك :

http://arabteam.nicmatic.com/vb/showthread...3?threadid=3416

وإذا لم ترغب أن يطلع المستخدم على إطار كائن البيانات كله فقم في بدء التشغيل بإزالة علامة صح من :

1- السماح بالقوائم الافتراضية

2- السماح بأشرطة القوائم الكاملة

3- السماح بالقوائم المختصرة الافتراضية

4- السماح بتغييرات أشرطة الأدوات /القوائم

5- عرض إطار قاعدة البيانات

لكن لاحظ أنك قد لا تستطيع الوصول أو التمكن من تعديل هذه القاعدة حتى ولو لم تحولها إلى MDE فجرب في نسخة احتياطية حتى تصل إلى المطلوب .

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

وزيادة قم باختيار كل جدول ثم انقر عليه بزر الفأرة الأيمن واختيار خصائص ثم مخفي أو استخدم الكود التالي :

Dim obj As AccessObject, dbs As Object

Set dbs = Application. CurrentData

For Each obj In dbs.AllTables

SetHiddenAttribute acForm, obj.Name, True

Next obj

أخبرنا بالنتيجة .

ولك تحياتي

#7

يمكنك اخفاء الجداول بالكود التالي

Dim db As Database

Dim tbl As TableDef

Set db = DBEngine.OpenDatabase(CurrentDb.Name)

Set tbl = db!num 'اسم الجدول



 tbl.Attributes = tbl.Attributes + dbHiddenObject



Set tbl = Nothing

db.Close

Set db = Nothing

ممكن تستخدم تكرار لجميع الجداول عن طريق

الامر التالي

for each tbl in db

'وتكتب هنا الكود

next

#8

استاذي الكريم ابو حمود / بقي شيء واحد فقط اطلبه واعتذر على كثرت الاسئلة وهو الكود الذي يعطل عمل الشفت طويل اين بالضبط اكتبه.

كذلك اخي وعزيزي muhammed_1

ارجو منك ان توضح لي مكان كتابة هذا الكود بالتفصيل لانه هذا ما ابحث عنه .

وللجميع الشكر والتقدير

#9

أولا أشير الى خطأ في ردي السابق حيث كتبت في الكود

SetHiddenAttribute acForm, obj.Name, True

وهو خاص بإخفاء النماذج والصحيح

SetHiddenAttribute acTable, obj.Name, True

والكود الخاص بالشفت ضعه في أي وحدة نمطية لنموذج وضع زر أمر لإستدعائه يعني ضع الدالة التالية في آخر الوحدة النمطية لنموذج

Public Function changeproperty(strPropName As String, varPropType As Variant, varPropValue As Variant)

Dim dbs As Database, prp As Property

Const conPropNotFoundError = 3270

Set dbs = CurrentDb

On Error GoTo Change_err

dbs.Properties(strPropName) = varPropValue

changeproperty = True

Change_Bye:

Exit Function

Change_err:

If Err = conPropNotFoundError Then

Set prp = dbs.CreateProperty(strPropName, varPropType, varPropValue)

dbs.Properties.Append prp

Resume Next

Else

changeproperty = False

Resume Change_Bye

End If

End Function

ثم أنشئ زر أمر على النموذج وفي حدث عند النقر ضع

changeproperty "AllowBypassKey", dbBoolean, False

الأخ muhammed

لقد حاولت تشغيل الكود الذي كتبته ولكن يعطيني رسالة خطأ وقد عدلته إلى التالي :

Dim db As Database

Dim obj As AccessObject, dbs As Object

Dim tdf As TableDef

Set dbs = Application.CurrentData

Set db = CurrentDb

For Each obj In dbs.AllTables

Set tdf = db.TableDefs(obj.Name)

tdf.Attributes = tdf.Attributes + dbHiddenObject

Next

Set tbl = Nothing

db.Close

Set db = Nothing

وقد قام بإخفاء جميع الجداول حتى النظامية بطريقة لم استطع بواسطة مربع الخيارات إعادة عرضها مرة أخرى ولكن بعد جهد لم أتمكن سوى من إعادة عرض جدول نظامي واحد ، لذلك آمل أن تكتب كود الإظهار مع إبداء رأيك في الكود الذي كتيته وإكمال كتابة كودك كاملا ليخفي جميع الجداول دون حاجة إلى أن يكتب المستخدم اسم الجدول .

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

#10

بالنسبة لكود الإظهار فقد توصلت إلى التالي :

Dim dbs As Database, tdf As TableDef

Set dbs = CurrentDb

For Each tdf In dbs.TableDefs

tdf.Attributes = tdf.Attributes - dbHiddenObject

Next tdf

Set dbs = Nothing

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

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

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