اذهب الي المحتوي
أوفيسنا

(تمت الاجابة) جمل SQL - التعامل مع المتغيرات والدالة Chr


محمد ايمن

الردود الموصى بها

الاخوة الاكارم تحية طيبة

الجملة التالية تقوم باضافة بيانات الى الجدول logaction


DoCmd.RunSQL ("insert into logaction (username) values  (UName)")

المشكلة تكمن في UName لانه في كل مرة يحمل قيمة جديدة !!!!

ماهو التعديل المطلوب لاستطيع استخدام هذا المتغير

ملاحظة المتغير من نوع Variant

رابط هذا التعليق
شارك

الاخ محمد

اعتقد ان الكود ناقص او انك لم تضع كامل الكود

من اي تاتي قيمه UName بالاساس؟؟ اي من اي كائن تاخذ القيمه؟؟

على العموم هذا مثال بسيط لتوضيح اسناد القيمه الى متغير وهو غير مجرب


Dim varValue As Variant

varValue = me.TextUserName

If not IsNull(varvalue) Then

DoCmd.RunSQL ("insert into logaction (username) values (varValue)")




رابط هذا التعليق
شارك

اخي bluemaind

المتغير Uname يتحكم به اكثر من نموذج

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

عند التجربة ظهرت لي هذه الصورة ( طبعا المتغير كان يحوي قيمة )

post-37077-0-28818500-1351612776_thumb.p

رابط هذا التعليق
شارك

اذا عليك تعريف متغير عام او globle variable و استدعائه عن تشغيل البرنامج من نموذج البداء

قم بالتالي

انشاء module جديد وضع الكود التالي به


Option Compare Database


' Access global variables definition

Global Gbl_Username As String


Option Explicit

Public Sub Start_Globals()

    Gbl_Username = Environ("username")


End Sub

ثم في حدث عن الفتح لنموذج البداء قم بوضع الكود التالي

Option Compare Database

Option Explicit

Private Sub Form_Open(Cancel As Integer)

    DoCmd.Maximize

    Call start_Globals

End Sub


و ان انت تستخدم اكسس 2007

فهناك Tempvars معرف وجاهز

رابط هذا التعليق
شارك

اذا عليك تعريف متغير عام او globle variable و استدعائه عن تشغيل البرنامج من نموذج البداء

قم بالتالي

انشاء module جديد وضع الكود التالي به


Option Compare Database


' Access global variables definition

Global Gbl_Username As String


Option Explicit

Public Sub Start_Globals()

Gbl_Username = Environ("username")


End Sub

ثم في حدث عن الفتح لنموذج البداء قم بوضع الكود التالي

Option Compare Database

Option Explicit

Private Sub Form_Open(Cancel As Integer)

DoCmd.Maximize

Call start_Globals

End Sub


و ان انت تستخدم اكسس 2007 فهناك Tempvars معرف وجاهز
هذا ما فعلته و لكن لم يعمل كود الادراج

DoCmd.RunSQL ("insert into logaction (username) values (UName)")

حيث تظهر الصورة السابقة دائما

رابط هذا التعليق
شارك

للتوضيح

النموذج main يحتوي على ثلاثة ازرار و هي تقوم بفتح النماذج frm1 - frm2 - frm3

و كل نموذج عند الفتح يقوم بتخزين قيمة في المتغير UName

يوجد في كل نموذج رز ادخال قيمة المتغير و هو الذي ينفذ الكود التالي


DoCmd.RunSQL ("insert into logaction (formname) values (uname)")

SQLVariable.rar

رابط هذا التعليق
شارك

تفضل

هذا مجرب

كود الزر


mysql = "INSERT INTO logaction ( formname )SELECT [Forms]![frm1]![rrr] AS Expr1;"

DoCmd.RunSQL mysql

بعد إضافة مربع نص( يمكنك إخفاؤه) به اسم النموذج SQLVariable_2.rar وهذا لإخفاء التحذير

Private Sub cmd1_Click()

DoCmd.SetWarnings False

Dim myvar As String

myvar = Me.Name

AddAction myvar

DoCmd.SetWarnings True

End Sub

Private Sub Form_Open(Cancel As Integer)

Me.rrr = Me.Form.Name

End Sub

تم تعديل بواسطه أبو لميس
رابط هذا التعليق
شارك

اخي ابو لميس تحية طيبة

الكود لا يصلح لسبب ان من يتحكم بقيمة المتغير عناصر متغيرة و ليست ثابتة

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

رابط هذا التعليق
شارك


Chr (code)

تقوم الدالة Chr بتحويل رقم بين ( 0 - 255 ) الى كود ASCII المخزن في جدول هذه الدالة مثلا العبارة التالية:

Hi, I'm "mubarmej"

ستجد انه لايمكنك كتابتها بهذا الشكل

myText = "Hi," & vbCrLf & "I'm "mubarmej""

لان البرنامج سيعتقد ان نهاية السلسلة النصية هي عند علامة الاقتباس التي تقع قبل كلمة mubarmej لذلك نستخدم الدالة Chr للتعبير عن علامات الاقتباس المزدوجة و بذلك تصبح العبارة السابقة

myText = "Hi," & vbCrLf & "I'm " & chr(34) & "mubarmej" & chr(34)

وفيما يلي اهم الارقام و مايقابلها في جدول ASCII

chr(33) اشارة التعجب !

chr(34) علامة الاقتباس المزدوجة "

chr(35) اشارة المربع #

chr(36) اشارة الدولار $

chr(37) اشارة النسبة المئوية %

chr(38) اشارة جمع السلاسل النصية &

chr(39) علامة الاقتباس المفردة '

chr(40) اشارة القوس (

chr(41) اشارة القوس )

chr(42) اشارة النجمة *

chr(44) اشارة الفاصلة ,

chr(58) النقطتين :

chr(59) الفاصلة المنقوطة ;

اتمنى ان أكون قد وفقت في الشرح

منقول لعموم الفائدة

رابط هذا التعليق
شارك

بارك الله فيك اخي الكريم

الكود يعمل 100 %

و لعموم الفائدة الكود يكتب بهذا الشكل


("Insert Into logaction (formname) Values (" & Chr(34) & UName & Chr(34) & ")")

UName هو متغير

تم تعديل بواسطه Bluemind
رابط هذا التعليق
شارك

اخي كنعان تحية طيبة و بارك الله فيك

لكن لي توضيح لما ذكرته

الكود الذي اضفته يقبل التعامل مع متغير واحد فقط و عند محاولة استخدام اكثر من متغير تظهر رسالة خطأ بالكود


str = ("insert into logaction(username) values ('" & UName & "' & "," & '" & utime & "')")

بينما الكود المرفق من اخينا bluemaind يقبل اكثر من متغير

str = ("Insert Into logaction (username,tmstamp,dastamp,frmname,actionname) Values(" & Chr(34) & UName & Chr(34) & "," & Chr(34) & UTime & Chr(34) & "," & Chr(34) & UDate & Chr(34) & "," & Chr(34) & UForm & Chr(34) & "," & Chr(34) & UAction & Chr(34) & ")")

لاحظ ان uname - utime - udate - uform - uaction جميعها متغيرات

قد اكون اخطأت في تطبيق الكود و لكن جميع محاولاتي بائت بالفشل عند دمج اكثر من متغير

رابط هذا التعليق
شارك

اعذرني اخي الكريم

في مثالك عدنا الى المشاركة 10

حيث يتم الادخال عن طريق مربعات من موجودة في نموذج

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

ارجو ان تكون قد اتضحت الفكرة

دمتم بحفظ الله و رعايته

رابط هذا التعليق
شارك

اذا كنت قد أحسنت الفهم عنكم

ما تريدونه متغيرات تذهب للجدول كسجل جديد تحت شرط معين

المرفق فيه تعديل آمل أن يفي بالغرض ، إسم النموذج والوقت والمستخدم

إستلزم الأمر تعديل الجدول


Function AddAction(strFormName As String)

Dim strSQL As String

strSQL = "INSERT INTO logaction(cUserCode, dDateTime,FormName) VALUES ('" & CurrentUser & "', #" & Now & "#, " & Chr(34) & Replace(strFormName, Chr(34), Chr(34) & Chr(34)) & Chr(34) & ")"

CurrentDb.Execute strSQL, dbFailonerror

End Function

جرب ووافني بالنتيجة ....

والله من وراء القصد وهو حسبي

............

NA_SQLVariable_UP.rar

رابط هذا التعليق
شارك

اخي كنعان لم تتضح الفكرة

ممكن تغير أسماء مربعات في الكود الى اسماء متغيرات و مسح مربعات

الموجود بين المربعات هو اسماء حقول الجدول التي سادخل القيم اليها ؟؟

ارجو التوضيح

اخي ابو آدم تحية طيبة

الفكرة هي متغيرات عامة في قاعدة البيانات ( مخزنة ضمن وحدة نمطية )

هذه المتغيرات تستخدمها كافة نماذج قاعدة البيانات و تخزن فيها قيم متعددة ( احيانا نص احيانا رقم احيانا تاريخ ) حسب النموذج

المشكلة هي كيف ساعبر عن المتغيرات في جملة SQL

الحل تم بفضل الله ثم فضل اخينا bluemaind في المشاركة 15 وضعت الطريقة الصحيحة للحل

مرفق اخينا كنعان يمثل ايضا احدى طرق الحل و لكن هناك اختلاف بسيط

في طريقة الاخ bluemaind استطعت و ضع اكثر من متغير ( المشاركة 18 )

في طريقة اخينا كنعان لم استطع وضع سوى متغير واحد !!

ملاحظة المطلوب هو ادخال البيانات الى الجدول بدون شروط

ايضا مرفقك يمثل احدى الحلول التي يمكن استخدامها

ولكن هل لك ان تشرح لنا الكود قليلا

رابط هذا التعليق
شارك

أخي محمد أيمن

إعتقدت أنني قد فهمت مرادك من مجمل المشاركات ، وقد أكون غفلت عن شيئ ما ...

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

وكون تطبيق الفكرة فرع عن تصورها ، كان التطبيق المرفق كما رأيتم .

أما إن كان مرادك غير ذلك فأفصح و أسهب بالشرح و عزّز بمثال فعلي لكامل مقصدك كيما يتم السعي لتطبيق يحقق المراد.

و إخوتك كما ترى سباقون للعون وأنت منهم ومثلك لا يرّد طلبه إلا بعجز عنه ... والله الموفق و المستعان

...........

رابط هذا التعليق
شارك

بارك الله فيك اخي ابو آدم و الله اخجلتني بكلامك

فعلا المراد من كل هذا هو انشاء سجل عن تحركات المستخدم ضمن قاعدة البيانات ( اضافة - حذف - دخول - اغلاق - كل شيئ تقريبا )

و سارفع المثال عند الانتهاء منه إن شاء الله

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information