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

كيف اضيف دالة من صنعي الى جملة استعلام

مغلق
بدأه ابوطلال في 9 أكتوبر 2006 · 16 رد · 1,274 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

نعلم ان هناك دوال يمكن استخدامها في جمل الاستعمال مثل MAX,MIN,AVG,SUM وتكون الجملة بالشكل التالي:

SELECT AVG(A1) FROM TABEL

المطلوب:

لو انشات دالة من صنعي ولتكن كالتالي:

(Public Function Fun(a

fun = a * 3

End Function

اريد ان استخدم الدالة كالتالي:

SELECT Fun(A1) FROM TABEL

ينتج عن ذلك رسالة الخطأ التالية

Undefined function 'Fun' in expression

ماهي الطريقة الصحيحة للوصول الى المطلوب

ارجو ان يكون المطلوب واضح

#2

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

اخي اعتقد انه لا يمكن عمل ذلك

لأن لغة الـ SQL هي لغة قياسية لا يمكن اضافة اي وظائف خارجية لها

ولكن يمكنك ان تستعيض عن ذلك بأن تقوم بتمرير محتويات الـ RS الى الدالة الخاصة بك للحصول على النتائج المطلوبة

وبذلك تكون حصلت على ما تريد

أتمنى تكون فهمت المقصود

بالتوفيق

================

الى اللقاء

JusT LeT YouR MinD WorK

#3

اشكرك اخي MR^King

وكلامك واضح جدا

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

بارك الله فيك

ولازال لدينا امل في وجود حل

لاني وجدت حلول لكن نجحت في الاكسس لكن اريدها بالفيجوال

#4

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

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

مثال

do while not rs.eof

fun(rs("myrec")

rs.movenext

loop

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

او تاخد النتيجة الاجمالية للمجموع مثلا بعد انتهاء الحلقة

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

بالتوفيق

=============

الى اللقاء

JusT LeT YouR MinD WorK

#5

اشكرك اخي العزيز على تعاونك معي

انا جربت استخدام حلقات التكرار ولكن

العملية تتنفذ على الاف السجلات بشكل مستمر وتاخذ وقت كثير

انا جربت العملية على اكسس بجملة استعلام نجحت معي وبوقت يسير جدا

و يوجد مثال اكسس على الرابط التالي

/index.ph...=102625&hl=

ارجو ان يعطيك توضيح اكثر

ان شاء الله نجد حل بالفيجوال

#6

coffee.gif

الأمر الذي يجعله ينج في الاكسس ولا ينجح في الفيجوال ...

هو انا لغة SQL : هي قواعد بيانات بالدرجة الأولى لهذا تعاملها مع قواعد البيانات بشكل مباشر سيكون ذو امكانيات ممكنه لأنه عند عمل اي Function سيتم اسناد ذلك لجمل الاستعلام بعكس البرامج التطبيقية التي تستخدم جمل SQL لأتمام مهام لقواعد البيانات وهنا الفرق حيث عند عمل Function سيتم اسناده كأجراء تنفيذي داخل التطبيق ولا تعلم هذه الآلة أن هذا الاجراء لتكملة جملة أستعلام أو ما شابه .. أذا سنحتاج إلى انشاء طريقة اخرى لأتمام ذلك كـــ Class والأمر سينجح ولكن بطرق مختلفة كما هو موجود على هذا الرابط

وانظر الى الدوال SQL هنا ستجد بعضها محدد أو تم ذكر MS Acss

هذا والله اعلم B)

تم تعديل هذه المشاركة بواسطة HnHn في 10 أكتوبر 2006 في 02:11

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#7

اخواني الافاضل

هذا ملف مرفق يوجد به توضيح للمشكلة

وارجو من الاخ HnHn انا يزودنا بطريقة استخدام ال Class للوصول الى المطلوب

وشكرا

EMA.zip

#8

ذكرت لك ذلك على الرابط الذي ارفقته ... هذه هي احدى الطرق

وكويس انك ارفقت مثال .. سأرى ما يمكنني تقديمه لك

تم تعديل هذه المشاركة بواسطة HnHn في 11 أكتوبر 2006 في 04:02

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#9

اخي هاني

اسأل الله لك التوفيق في جميع امور حياتك

وانا في انتظار ردك

#10

أخي ابوطلال

جرب تقرا هذا الرابط

coffee.gif

وهذه محاولتي مع الشفرة قم بتجربتها وهي كالتالي

[1] قم بوضع هذه الشفرة داخل مديول Module

Public Function Fun(ByVal a As Integer) As Integer
	Fun = a * 3
End Function

[2]ثم ضع هذا الاستعلام تحت زر أمر بعد أن ترسم Text1

Private Sub Command1_Click()
	'HnHn :
	Dim SQL As String
	Dim a As Integer
	On Error GoTo errHandler

	 'HnHn :لوضع القيمة التي تريد أن تقم بضربها Text هنا قم برسم
	If IsNumeric(Text1.Text) Then
		a = CInt(Text1.Text)
		SQL = "SELECT " & Fun(a) & " FROM pice"
		'HnHn : Show Select
		MsgBox SQL
	Else
		 MsgBox "Please enter a number"
		 Text1.SetFocus
   End If
Exit Sub
errHandler:
End Sub

تم تعديل هذه المشاركة بواسطة HnHn في 13 أكتوبر 2006 في 17:35

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#11

السلام عليكم

هذه جملة SQL ستفي بالغرض ان شاء الله

 select top 1 id, price , price as Price_Previous ,
   (0.15*([price]-Price_Previous))+Price_Previous AS EMA12
 from price as first_table where id=1
union
 select price.id,price.price, prices_prev.price as Price_Previous,
   (0.15*(price.[price]-Price_Previous))+Price_Previous AS EMA12
  from price  inner join price as prices_prev 
  on price.id =prices_prev.id+1  order by id;

اذا اردت ان تضعها داخل البرنامج

dim strSql as string
strSql = "select top 1 id, price , price as Price_Previous ," + vbNewLine + _
	" (0.15*([price]-Price_Previous))+Price_Previous AS EMA12 " + vbNewLine + _
	" from price as first_table where id=1" + vbNewLine + _
	" union " + _
	" select price.id,price.price, prices_prev.price as Price_Previous," + vbNewLine + _
	" (0.15*(price.[price]-Price_Previous))+Price_Previous AS EMA12 " + vbNewLine + _
	" from price  inner join price as prices_prev " + vbNewLine + _
	" on price.id =prices_prev.id+1  order by id;"

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#12

اخواني الافاضل هاني و محب الرسول

اولا : يعجز لساني عن شكركما لاهتمامكما بموضوعي

ثانيا :

بالنسبة لرد الاخ هاني نجحت عملية ادخال دالة الجملة ولكن اريد تمرير احد الحقول على الدالة و لم تنجح العملية مثال (Fun(col

بالنسبة لرد اخي محب الرسول

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

بارك الله في جهودكم.

REC.zip

#13
اقتباس
ولكن اريد تمرير احد الحقول على الدالة و لم تنجح العملية مثال (Fun(col

016.gifلم أفهــــم ممكن توضح ما تقصد

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#14

شكرا لمرورك اخي هاني

مثال:

select fun(price) from price

حيث ان price اسم احد حقول الجدوال price

#15

wink.gif هذا شي طبيعي أن يظهر الخطأ لأن Fun

وظيفة مسند إلية العملية التاليه

Public Function Fun(ByVal a As Integer) As Integer
	Fun = a * 3
End Function

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

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

تم تعديل هذه المشاركة بواسطة HnHn في 17 أكتوبر 2006 في 16:33

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#16

اخي هاني تعبناك معنا شوي

لكن جربت وما مشي الحال.

#17

السلام عليكم

اقتباس
بالنسبة لرد اخي محب الرسول

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

هل تقصد ان المعادلة تعتمد على ناتج المعادلة للحقل السابق؟

اي بدل ال Price_Previous تريد ان يكون EMA_Previous ؟

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…