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

جمل الكوري ببرنامج مربوط بقاعدة آكسس لا تعمل مع sql server بعد تحويلها

بدأه shalwan في 4 يوليو 2009 · 18 رد · 1,705 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

SQL SERVER

والمعلومات متواجده

جمل SQL في الآكسس هي

adoquery1.SQL.add('SELECT * FROM TABLE2 WHERE DAYA="FRID"');

adoquery1.Open

او

adoquery1.SQL.add('SELECT * FROM TABLE2 WHERE DAYA<>""');

adoquery1.Open ;

وتخرج لي كافة البيانات التي تساوي الشرط السابق

بعد التحويل اصبحت هذه العبارة لا تعمل

كيف لي ان اعرف السبب والعبارة الصحيحه

ادخلت نفس العباره من داخل قاعدة البيانات SQL وعرض لي اما من سورس البرنامج مع الquery فلم يعمل

هذه قطره من جمل كثيره من query كيف لي العمل معها

وشكرا

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#2

قم باستبدال " بواحدة '

وسوف تعمل جميع الاستعلامات لديك إن شاء الله.

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

اخي وائل والأخوه كافه السلام عليكم

احب ان اوضح ما لم اوضحه سابقا:

01 اللغة دلفي 6

02 الوندوز xp sp2

03 الآكسس2003

04 sql server 2000

05 يوجد برايمري كي

وضعت كمه واحده السفليه بدلا من العلويه

اخي انوه بأن الحقل حرفي

هل لل ado connection دخل في هذا الموضوع اما تحديث او متغيرات معينه لم اعملها

ارجوا اسمترار تواصلك معي لم يحل الموضوع الى الآن

لازلت اعاني ومن الصعب تبديل كافة البرنامج فقاعدة البيانات تزيد عن 20 ميجا بايت وعامل لدي الآخرين

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#4

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

يمكنك استخدام هذا الكود

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select* from TABLE2 where DAYA ='+QuotedStr('FRID');
ADOQuery1.Open;

وفقنا الله واياكم

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#5
علي .ع كتب:
السلام عليكم ورحمة الله

يمكنك استخدام هذا الكود

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select* from TABLE2 where DAYA ='+QuotedStr('FRID');
ADOQuery1.Open;

وفقنا الله واياكم

اشكر لك هذه المساهمه ولقد عمل الكود بشكل جيد وسهل

ولذا فسؤالي لك يا أخ علي هل كل حقل حرفي اضع امامه Quotedstr

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#6

الأفضل هو استخدام بارميتر و تمرير القيم إلى ال Ado query و هناك العديد من الامثلة في المنتدى, ابحث عن Parameter و سوف تجد الكثير, في حال استخدمت Parameter سوف يعمل الكود على جميع ال DBMS المدعومة من OLE DB و بالتالي لن تحتاج في المستقبل لتعديل اي كود في البرنامج عند التحويل بين DBMS

شيئ أخر, عند استخدام QuotedStr او تمرير باستخدام هذه الطريقة سوف يؤدي إلى مشاكل اضافية في المستقبل مثل SQL Injection او حصول اخطاء بسبب ادخال المستخدم ' في النص

جرب بعد استخدام Quotedstr ان تكتب كلمة can't في النص و انظر النتيجة؟!

إذا الحل الامثل هو استخدام Parameter و تمريرها إلى ال Ado query

اقتباس
ولذا فسؤالي لك يا أخ علي هل كل حقل حرفي اضع امامه Quotedstr

نعم يجب ذلك, إذا كنت سوف تستمر في استخدام هذه الطريقة :)

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#7
Wael Dalloul كتب:
شيئ أخر, عند استخدام QuotedStr او تمرير باستخدام هذه الطريقة سوف يؤدي إلى مشاكل اضافية في المستقبل مثل SQL Injection او حصول اخطاء بسبب ادخال المستخدم ' في النص

جرب بعد استخدام Quotedstr ان تكتب كلمة can't في النص و انظر النتيجة؟!

إذا الحل الامثل هو استخدام Parameter و تمريرها إلى ال Ado query

استمرار مع الأخوان وائل وعلي وطلب الحل من الأخ علي اذا كان متوفر

صحيح يا اخ وائل حصل لي ذلك لايقبل الكمه ' ولا يقبل متغير فارغ يعني عندي المثال التالي

edit:='';

qq:='select * from dayf where nas<>'+qutedstr(edit);

يقرأ الكري كالتالي

select * from dayf where nas<>qutedstr();

وهذا لا يفهمه الكوري وسؤالي كيف الطريقه

كيف لي ان اضع متغير بحيث يقبل الكمتين ليصبح('')

select * from dayf where nas<>qutedstr('');

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

شكرا جزيلا

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#8

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

اخي العزيز بخصوص ان تضع الكود في عنصر edit فهذا ليس بالامر الصعب وتستطيع ان تضع شروط التي تريد

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

if edit1.Text='' then
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select* from TABLE2 where DAYA ='+QuotedStr('''');
ADOQuery1.Open;
end;

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

وفقنا الله واياكم لما يحبه ويرضاه

تم تعديل هذه المشاركة بواسطة علي .ع في 7 يوليو 2009 في 23:00

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#9
علي .ع كتب:
if edit1.Text='' then
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select* from TABLE2 where DAYA ='+QuotedStr('''');
ADOQuery1.Open;
end;

اخي الكريم اسعد الله ايامك وايام كل المسلمين يارب

بالنسبة للإشتراط ممكن عمله لكن القضيه الأخرى في اسم داخل حقل مدخل باللغه الأنجليزيه او العربيه وبه الكمه مثال(can't)

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

عسى ان اكون قد اوصلت المشكله بشكل جيد

لكم جميعا الشكر

ثم اين انت يا (وائل) مفقود لك يومين

اقرأ ردكم إن شاء الله

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#10

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

نعم هذه مشكلة لكن يمكنك ان تتحايل بالكود على هذه المشكلة

يمكنك ان تستعمل الكود التالي

ضع الكود التالي في حدث OnKeyPress للعنصر Edit

if key =#39 then
begin
x:=Length(Edit1.Text);
Val1:=Edit1.Text+DupeString('''',2);
end;

وتضع الكود التالي في الحدث OnExit

begin
y:=Length(Edit1.Text);
Val2:=copy(Edit1.Text,x+2,y);
val3:=val1+val3;
end;

ثم ابحث بالمتغيير val3

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

ارجو ان اكون قد وفقت في الاجابة

وفقنا الله واياكم

تم تعديل هذه المشاركة بواسطة علي .ع في 9 يوليو 2009 في 00:34

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#11

السلام عليكم, اسف على التأخر

جرب الكود التالي لتمرير الباراميتر, لاحظ انه في دلفي يجب وضع نقطتين قبل اسم البارميتر...

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select* from TABLE2 where DAYA =:ParameterName';
ADOQuery1.Params.ParamByName('ParameterName').Value = 'FRID';
ADOQuery1.Open;

اخي علي, لماذا كل هذا العناء و الحل موجود و بسهولة؟

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

إذاً استخدم الباراميتر في اي Query تريد تمرير قيم لها و ريح رأسك من الصداع ....

تم تعديل هذه المشاركة بواسطة Wael Dalloul في 9 يوليو 2009 في 06:44

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#12

اخي وائل / وعلي استخدمت البرامترز كما في المثال التالي بس لم تعمل معي

adoquery1.Close;
adoquery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * from bockf where namet = :P1 order by acnt');
ADOQuery1.Prepared;
ADOQuery1.Parameters.ParamByName('p1').Value :='محمد وائل'
adoquery1.open;

المتغير بالعربي لا يعطي نتيجه اما باللغة الأنجليزيه فالنتيجه صحيحه كيف لي بطريقه احل بها اللغة العربية

شكرا وائل بإنتظار حلك والشكر موصول للأخ على وطلال

تم تعديل هذه المشاركة بواسطة Wael Dalloul في 9 يوليو 2009 في 12:48

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#13

الأخ shalwan, الرجاء استخدام الوسم Code لكي تدرج اي كود تريده في المشاركة, ايضا وضعت سؤالك في مكان ما فلا تعيد وتضعه في مكان اخر و تكرره اكثر من مرة فذلك مخالف للقوانين, وسوف يتم حذف المشاركات الاخرى الان...

لا مشكلة عندي مع العربي فهي تعمل بدون مشاكل ولكن احذر عند استخدام = فيجب ان يكون هناك تطابق 100% , استخدم Like مع اشارة % و دعنا نرى النتائج....

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#14
Wael Dalloul كتب:
الأخ shalwan, الرجاء استخدام الوسم Code لكي تدرج اي كود تريده في المشاركة, ايضا وضعت سؤالك في مكان ما فلا تعيد وتضعه في مكان اخر و تكرره اكثر من مرة فذلك مخالف للقوانين, وسوف يتم حذف المشاركات الاخرى الان...

1) نأسف لهذا التكرار ولكن من شوقي للحل اتحسس في كل مكان

2) ما معنى استخدام الوسم code

Wael Dalloul كتب:
لا مشكلة عندي مع العربي فهي تعمل بدون مشاكل ولكن احذر عند استخدام = فيجب ان يكون هناك تطابق 100% , استخدم Like مع اشارة % و دعنا نرى النتائج....

الأخ وائل لازالت لدي مشكلة مع العربي في البراميترز ما ذا تقترح علي عمله شكرا لك

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#15

1) طلبت افادتي ولم تفيد هل هذا يعني لا اجابه

ام يعني ؟؟

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#16
اقتباس
الأخ وائل لازالت لدي مشكلة مع العربي في البراميترز ما ذا تقترح علي عمله شكرا لك

ضع مثالا لكي اجربه عندي, لأنه لا يوجد مشكلة و المشكلة تظهر فقط عندك...

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#17
Wael Dalloul كتب:
ضع مثالا لكي اجربه عندي, لأنه لا يوجد مشكلة و المشكلة تظهر فقط عندك...

فعلا هي عندي وتم اصلاحها بتحميل الويندوز من جديد والدولفي من جديد وعملت ولله الحمد شكرا لتعاونك

لدي مشكلة اخرى

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

ADOTable1.Open;
edit1.Text:=ADOTable1.fieldbyname('namet').text; 
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from bockf where namet = :P1');
//edit1.text فارغه
ADOQuery1.Parameters.ParamByName('p1').Value :=edit1.Text;
ADOQuery1.Prepared;
ADOQuery1.Open;

المفروض يظهر لي سجلات كثيره مشابهه لهذا السجل لكن للأسف انا متأكد بأن هناك خطأ ما اواجراء لم يتخذ

ارجوا الحل شكرا لكم

تم تعديل هذه المشاركة بواسطة Wael Dalloul في 13 يوليو 2009 في 08:02

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#18

اخي الكريم للمرة الثانية اقول لك استخدم الوسم code عندما تريد كتابة اي كود في المنتدى وذلك لكي لا يظهر بشكل قبيح...

هذا الوسم سوف تجده في ال Toolbar عندما تريد الكتابة بجانب الاقتباس.

بالنسبة للمشكلة التي تواجهك الان قلت لك سابقاً:

Wael Dalloul كتب:
ولكن احذر عند استخدام = فيجب ان يكون هناك تطابق 100% , استخدم Like مع اشارة % و دعنا نرى النتائج....

جرب استبدال

ADOQuery1.SQL.Add('select * from bockf where namet = :P1');
ADOQuery1.Parameters.ParamByName('p1').Value :=edit1.Text;

بالتالي:

ADOQuery1.SQL.Add('select * from bockf where namet like :P1');
ADOQuery1.Parameters.ParamByName('p1').Value :='%' + edit1.Text + '%';

هذه سوف تجلب جميع السجلات التي تحتوي على النص وليست مساوية للنص

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#19

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

علما بأن الحقل فارغ كيف لي بإستخدام المتغير فارغ

الموضوع الثاني

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

تم تعديل هذه المشاركة بواسطة Wael Dalloul في 13 يوليو 2009 في 10:17 — السبب: فقط عند كتابة كود استخدم الوسم وليس في كل شي&

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

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

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

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

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

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