تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيف أستخدم دالة معرفة مسبقاً ضمن الاستعلام؟
#1
السلام عليكم ورحمة الله وبركاته

عندي هذه الدالة ReplaceString:
كود :
 Public Function ReplaceString(In_Text As String) As String
       Dim X As Long
       Dim strChar As String
       Dim strReturn As String
       strReturn = ""

       For X = 1 To Len(In_Text)
           strChar = Mid(In_Text, X, 1)
           Select Case strChar
               Case "ال"
                   strChar = ""
               Case Chr(243), Chr(240), Chr(245), Chr(246), Chr(242), Chr(241), Chr(248), Chr(250)
                   strChar = ""
           End Select
           strReturn = strReturn & strChar
       Next
       ReplaceString = strReturn
   End Function

 
كيف أقوم باستخدامها ضمن جملة الاستعلام التالية:
كود :
daReplace = New OleDbDataAdapter("Select * From TBooksNames Order By ReplaceString(TitleAuthor)", ConnReplace)


عندما أستخدم الدالة Replace لا تحدث مشكلة:
كود :
daReplace = New OleDbDataAdapter("Select * From TBooksNames Order By REPLACE(TitleAuthor, 'ال', '')", ConnReplace)


ولكن عندما أستخدم دالتي الجديدة ReplaceString تظهر لي رسالة خطأ:
(دالة غير معرفة في التعبير).

فما الحل أيها الإخوة؟
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: asemshahen5
#2
الفكرة ان هذه الدالة معرفة بالنسبة لملف فيجوال بيسيك الحالي لديك فقط وليست اجراء بالنسبة ل SQL
الحل من وجهة نظري ان تجلب السجلات بدون ترتيب ثم ترتبهم بعد ذلك باستخدام LINQ

كود :
       daReplace = New OleDbDataAdapter("Select * From TBooksNames", ConnReplace)
       daReplace.Fill(dtReplace)
       dtReplace = dtReplace.AsEnumerable().OrderBy(Function(x) ReplaceString(x("TitleAuthor"))).CopyToDataTable
الرد }}}
#3
PHP كود :
DECLARE @x int;
set @x= (Select ROW_NUMBER() OVER(ORDER BY (SELECT 1)))
DECLARE @
TBooksNames TABLE (id intChrCol nvarchar(255));
insert into @TBooksNames(id,ChrCol)values(@x,(CHAR(243)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(240)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(245)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(246)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(242)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(241)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(248)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(250)))
Select from @TBooksNames;

SELECT id,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(ChrCol ,(CHAR(243)) ,'X'),(CHAR(240)) ,'X'),
(
CHAR(245)) ,'X'),(CHAR(246)) ,'X'),(CHAR(242)) ,'X'),(CHAR(241)) ,'X'),(CHAR(248)) ,'X'),(CHAR(250)) ,'X') as x FROM @TBooksNames 

بعض التسالي موفق انشاء الله .
الرد }}}
#4
(02-11-20, 05:49 PM)Anas Mahmoud كتب : الفكرة ان هذه الدالة معرفة بالنسبة لملف فيجوال بيسيك الحالي لديك فقط وليست اجراء بالنسبة ل SQL
الحل من وجهة نظري ان تجلب السجلات بدون ترتيب ثم ترتبهم بعد ذلك باستخدام LINQ

كود :
       daReplace = New OleDbDataAdapter("Select * From TBooksNames", ConnReplace)
       daReplace.Fill(dtReplace)
       dtReplace = dtReplace.AsEnumerable().OrderBy(Function(x) ReplaceString(x("TitleAuthor"))).CopyToDataTable

للأسف لم تنجح هذه الطريقة

جزاك الله خيراً

(02-11-20, 06:18 PM)asemshahen5 كتب :
PHP كود :
DECLARE @x int;
set @x= (Select ROW_NUMBER() OVER(ORDER BY (SELECT 1)))
DECLARE @
TBooksNames TABLE (id intChrCol nvarchar(255));
insert into @TBooksNames(id,ChrCol)values(@x,(CHAR(243)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(240)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(245)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(246)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(242)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(241)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(248)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(250)))
Select from @TBooksNames;

SELECT id,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(ChrCol ,(CHAR(243)) ,'X'),(CHAR(240)) ,'X'),
(
CHAR(245)) ,'X'),(CHAR(246)) ,'X'),(CHAR(242)) ,'X'),(CHAR(241)) ,'X'),(CHAR(248)) ,'X'),(CHAR(250)) ,'X') as x FROM @TBooksNames 

بعض التسالي موفق انشاء الله .

هذه هي الطريقة التي أستخدمها، ولكنها تجعل الكود كبيراً للغاية؛ لذا فكرت باستخدام دالة معدة مسبقاً.
شكراً لك أخي العزيز
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: asemshahen5 , Anas Mahmoud , Anas Mahmoud
#5
اذا كنت تريد استخدامه لعملية تعديل سجلات الجدول فهذا استعلام  :

PHP كود :
DECLARE @x int;
set @x= (Select ROW_NUMBER() OVER(ORDER BY (SELECT 1)))
DECLARE @
TBooksNames TABLE (id intChrCol nvarchar(255));
insert into @TBooksNames(id,ChrCol)values(@x,(CHAR(243)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(240)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(245)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(246)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(242)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(241)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(248)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(250)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,'ال')
DECLARE @
End int,@CharXT nvarchar(255);
set @End =(Select count(*) from @TBooksNames);
set @x=1;
WHILE @
< @End
begin
    set 
@CharXT=(select ChrCol from @TBooksNames where id=@x);
    
update @TBooksNames set ChrCol=REPLACE(ChrCol ,@CharXT ,'X'where id=@x;
    
set @+=1;
end;
Select from @TBooksNames

ملاحظة :
تستطيع استبدال الجدول الوهمي بجدول حقيقي بقاعدة البيانات و هذا يختصر الكود بشكل كبير و لا يبقى منه الا القليل مع اطيب امنياتي لك بالتوفيق و النجاح انشاء الله .
الرد }}}
#6
(02-11-20, 09:23 PM)asemshahen5 كتب : اذا كنت تريد استخدامه لعملية تعديل سجلات الجدول فهذا استعلام  :

PHP كود :
DECLARE @x int;
set @x= (Select ROW_NUMBER() OVER(ORDER BY (SELECT 1)))
DECLARE @
TBooksNames TABLE (id intChrCol nvarchar(255));
insert into @TBooksNames(id,ChrCol)values(@x,(CHAR(243)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(240)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(245)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(246)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(242)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(241)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(248)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(250)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,'ال')
DECLARE @
End int,@CharXT nvarchar(255);
set @End =(Select count(*) from @TBooksNames);
set @x=1;
WHILE @
< @End
begin
    set 
@CharXT=(select ChrCol from @TBooksNames where id=@x);
    
update @TBooksNames set ChrCol=REPLACE(ChrCol ,@CharXT ,'X'where id=@x;
    
set @+=1;
end;
Select from @TBooksNames

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

ألف شكر لك أخي العزيز.
أنا أريد عرض البيانات مرتبة مع تجاهل بعض العبارات، والعبارات سأضعها ضمن الدالة ReplaceString
وفي الحقيقة الغاية معرفة كيفية استخدام دالة ضمن جملة الاستعلام
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: asemshahen5
#7
هذا طلبك باذن الله :

PHP كود :
DECLARE @x int;
set @x= (Select ROW_NUMBER() OVER(ORDER BY (SELECT 1)))
DECLARE @
TBooksNames TABLE (id intChrCol nvarchar(255));
insert into @TBooksNames(id,ChrCol)values(@x,(CHAR(243)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(240)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(245)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(246)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(242)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(241)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(248)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(250)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,'ال')
DECLARE @
CharXT nvarchar(255);
set @CharXT  (CHAR(240)) + '|' + (CHAR(241)) + '|' + (CHAR(242)) +'|' + (CHAR(243)) +
                    (
CHAR(245)) + '|' + (CHAR(246)) + '|' + (CHAR(248)) +'|' + (CHAR(250));
select @CharXT;
select *
from    @TBooksNames
where   ChrCol like 
'%[^' + @CharXT ']%' escape '|' 



الكود حسب جدول بقاعدة البيانات :

PHP كود :
DECLARE @CharXT nvarchar(255);
set @CharXT  (CHAR(240)) + '|' + (CHAR(241)) + '|' + (CHAR(242)) +'|' + (CHAR(243)) +
                    (
CHAR(245)) + '|' + (CHAR(246)) + '|' + (CHAR(248)) +'|' + (CHAR(250));
select @CharXT;
select *
from    TBooksNames
where   ChrCol like 
'%[^' + @CharXT ']%' escape '|' 
الرد }}}
تم الشكر بواسطة: عبد العزيز البسكري
#8
(02-11-20, 10:30 PM)asemshahen5 كتب : هذا طلبك باذن الله :

PHP كود :
DECLARE @x int;
set @x= (Select ROW_NUMBER() OVER(ORDER BY (SELECT 1)))
DECLARE @
TBooksNames TABLE (id intChrCol nvarchar(255));
insert into @TBooksNames(id,ChrCol)values(@x,(CHAR(243)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(240)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(245)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(246)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(242)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(241)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(248)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,(CHAR(250)))
set @+= 1
insert into 
@TBooksNames(id,ChrCol)values(@x,'ال')
DECLARE @
CharXT nvarchar(255);
set @CharXT  (CHAR(240)) + '|' + (CHAR(241)) + '|' + (CHAR(242)) +'|' + (CHAR(243)) +
                    (
CHAR(245)) + '|' + (CHAR(246)) + '|' + (CHAR(248)) +'|' + (CHAR(250));
select @CharXT;
select *
from    @TBooksNames
where   ChrCol like 
'%[^' + @CharXT ']%' escape '|' 



الكود حسب جدول بقاعدة البيانات :

PHP كود :
DECLARE @CharXT nvarchar(255);
set @CharXT  (CHAR(240)) + '|' + (CHAR(241)) + '|' + (CHAR(242)) +'|' + (CHAR(243)) +
                    (
CHAR(245)) + '|' + (CHAR(246)) + '|' + (CHAR(248)) +'|' + (CHAR(250));
select @CharXT;
select *
from    TBooksNames
where   ChrCol like 
'%[^' + @CharXT ']%' escape '|' 

ظهر لي هذا الخطأ:
   
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#9
Information 
جربته عندي و ده النتيجة :

   

   
الرد }}}
تم الشكر بواسطة: عبد العزيز البسكري
#10
(02-11-20, 07:51 PM)السندبااد كتب :
للأسف لم تنجح هذه الطريقة

جزاك الله خيراً

ولك بمثله

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

لو تشاركني بالجزء الخاص بملىء الداتا تيبل لديك مثلا ربما نصل الى شيء وصدقني مرادك يتحقق ان شاء الله باستخدام LINQ
الرد }}}


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  معرفة رصيدي للهاتف النقال المتصل بالكمبيوتر وارسال رسائل نصية منه AHMED213 0 98 22-02-24, 11:47 AM
آخر رد: AHMED213
  [VB.NET] معرفة بيانات الجهاز محمد بوقزاحة 1 309 21-02-24, 11:44 PM
آخر رد: AHMED213
  [VB.NET] البحث باستخدام CheckedListBox لتكون نتيجة التحديد شرط لجملة الاستعلام ahmedramzyaish 0 116 19-02-24, 03:44 AM
آخر رد: ahmedramzyaish
  معرفة عدد مرات تكرار الاسم في الداتاقريدفيو صالح عبدالله 8 426 05-02-24, 04:39 PM
آخر رد: صالح عبدالله
  [VB.NET] معرفة بيانات الجهاز محمد بوقزاحة 7 676 12-01-24, 07:31 PM
آخر رد: Kamil
  معرفة عدد الاشهر خلال فترة زمنيةمعينة boofa2022 0 170 01-01-24, 01:18 PM
آخر رد: boofa2022
  كيفية رسم بيان دالة رياضية؟ الخير19 6 415 23-12-23, 03:36 PM
آخر رد: الخير19
  [سؤال] كيف نستعيد قيمة من دالة ضمن مسار مستقل justforit 2 393 21-11-23, 10:51 AM
آخر رد: justforit
  [VB.NET] مساعدة فى ترتيب نتائج الاستعلام ZEEN4ZEEN 1 362 08-11-23, 01:34 AM
آخر رد: الحزين اليماني
  [VB.NET] مساعدة فى طريقة كتابة الاستعلام ZEEN4ZEEN 4 435 11-10-23, 03:33 PM
آخر رد: ZEEN4ZEEN

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم