منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "القواعد";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

إلى

سؤال مجرد عن التحسين. البحث عن فروع مماثلة


Котелок   (2001-11-30 02:16) [0]

السؤال هو ...

يمكن تحسين الكود أدناه بطريقة أو بأخرى .... ؟؟؟

ثم كتب وحصلت مدمن مخدرات. لا أستطيع التفكير في أي شيء آخر ....: - (((

الإجراء TFSearch.BitBtn3Click (المرسل: TObject) ؛
فار
s: string؛
katId، strId: integer؛
مرشح: سلسلة.
بدأ
إذا edit2.text <> "" بعد ذلك
بدأ
dm1.q1.close.
dm1.q1.sql.clear.
dm1.q1.sql.add ("select * from streets where name =: name")؛
dm1.q1.prepare.
dm1.q1.ParamByName ("name"). asstring: = edit2.text؛
dm1.q1.open.
strId: = dm1.q1.fieldbyname ("idstreet"). asinteger؛
الغاية؛

إذا edit3.text <> "" بعد ذلك
بدأ
dm1.q1.close.
dm1.q1.sql.clear.
dm1.q1.sql.add ("select * from kategor where name =: name")؛
dm1.q1.prepare.
dm1.q1.ParamByName ("name"). asstring: = edit3.text؛
dm1.q1.open.
katId: = dm1.q1.fieldbyname ("idkat"). asinteger؛
الغاية؛

sqlsearch: = "select" +
"otd.predpr ،" +
"otd.otdid ،" +
"pre.idPredpr،" +
"otd.name كـ otdname،" +
"otd.phone" +
"pre.katalog ،" +
"otd.kindid ،" +
"الاسم المسبق كاسم orgname ،" +
"otd.home ،" +
"otd.office ،" +
"str.name بالشارع ،" +
"(حدد اسمًا من النسخة حيث Idkat = pre.katalog) ككاتال ،" +
"kat.name كـ kateg" +
"من" +
"otdel otd ،" +
"prepr pre،" +
"شارع الشوارع ، kategor كات" +
"حيث otd.predpr = pre.IdPredpr و otd.kindId = kat.idkat و otd.streetId = str.IdStreet"؛

إذا edit1.text <> "" بعد ذلك
بدأ
sqlsearch: = sqlsearch + "و pre.name like" + "" "*" + edit1.text + "*" ""؛
الغاية؛
إذا edit4.text <> "" بعد ذلك
sqlsearch: = sqlsearch + "and otd.home =" + "" "" + edit4.text + "" ""؛
إذا edit5.text <> "" بعد ذلك
sqlsearch: = sqlsearch + "and otd.office =" + "" "" + edit5.text + "" ""؛
إذا edit6.text <> "" بعد ذلك
sqlsearch: = sqlsearch + "و otd.name like" + "" "*" + edit6.text + "*" ""؛
إذا edit7.text <> "" بعد ذلك
sqlsearch: = sqlsearch + "و otd.phone like" + "" "*" + edit7.text + "*" ""؛

dm1.qSearch.close.
dm1.qSearch.sql.clear.
dm1.qSearch.sql.add (sqlsearch)؛
dm1.qSearch.Prepare.

مرشح: = "" ؛
إذا edit2.text <> "" بعد ذلك
filt: = "street =" "" + edit2.text + "" ""؛
if (edit3.text <> "") و (edit2.text <> "") بعد ذلك
filt: = filt + "and kateg =" "" + edit3.text + "" ""؛
if (edit3.text <> "") و (edit2.text = "") بعد ذلك
filt: = filt + "kateg =" "+ + edit3.text +" "" "؛
dm1.qSearch.open.
إذا كان التصفية <> "" بعد ذلك
بدأ
dm1.qSearch.Filter: = filt؛
dm1.qSearch.Filtered: = true؛
النهاية
آخر
dm1.qSearch.Filtered: = false؛
الغاية؛



kaif   (2001-11-30 04:40) [1]

تعليق قليلا. أنا لم الخوض بعمق. لكن البنيات مثل "kateg =" "" + edit3.text + "" "" تبدو لي خطيرة. تحتاج إلى استخدام ParamByName ، وإلا تخيل ما سيحدث إذا أدخل المستخدم علامة اقتباس في النص. يمكنك تجربة ذلك مرة واحدة ، وقد قمت بذلك مرة أخرى ... وإذا كان الأمر لا يطاق مطلقًا ، فاستخدم "kateg =" + QuotedStr (edit3.text) بشكل أفضل. وظيفة QuotedStr تحميك من التعطل عند استخدام علامات اقتباس المستخدم. يستبدل كل علامات اقتباس مفردة بعلامات اقتباس مزدوجة في النص.



Котелок   (2001-11-30 08:21) [2]

هممم .....
لم أكن أعرف عن مثل هذا المشغل ...
TNX ......

ParamByName لا يصلح ، لأن ثم يتم استخدام نص الاستعلام هذا في مكالمات أخرى على أشكال أخرى ...
على سبيل المثال ، للفرز حسب الحقول المختلفة.
عندما أتصل ، أؤدي الإجراءات التالية تقريبًا:


dm1.qSearch.close.
dm1.qSearch.sql.clear.
dm1.qSearch.sql.add (sqlsearch)؛
dm1.qSearch.sql.add ("order by otd.home")؛
dm1.qSearch.Prepare.
dm1.qSearch.open.



kaif   (2001-12-01 02:37) [3]

يمكن دائمًا تمكين ParamByName بعد إضافة "order by otd.home". ابدأ في استخدام نقل المعلمات إلى الاستعلامات (لهذا يكفي وضع علامة عليها في النص بأسماء بنقطتين أمام ": myparam"). سترى قريبًا أنها مريحة جدًا وأنيقة. بعد أن تقوم بتثبيته في خاصية SQL وإجراء Prepare ، تقوم بتمرير قيم لجميع المعلمات ، على سبيل المثال ، للسلسلة: ParamByName ("myparam"). AsString: = .. الميزة الأكثر أهمية للمعلمات هي أنها تقوم بتمرير أنواع البيانات الصحيحة. على سبيل المثال ، قام شخص ما بتغيير التثبيت الإقليمي على Windows من "dd / mm / yy" إلى "mm / dd / yy". بعد ذلك ، ستتسبب كل معلمات التاريخ المنقولة بواسطة السلسلة في حدوث خطأ ، وسيتم نقلها لأن AsDateTime سيعمل بشكل إنساني. بعد ذلك ، يكون الإعداد Precept المنطقي فقط إذا قمت بإرسال معلمات مختلفة إلى الطلب بنفس النص وأعد فتح الطلب (اقرأ عن Prepare).



ilysha   (2001-12-01 16:29) [4]

يمكنك أيضًا تحسين الكود مثل هذا:

إذا Edit2.Text <> "" بعد ذلك بدأ مع dm1.q1 تفعل بدأ إغلاق. Sql.Clear. Sql.Add ("select * from street where name =: name")؛ إعداد. ParamByName ("name"). Asstring: = edit2.text؛ فتح. strId: = dm1.q1.FieldByName ("idstreet"). AsInteger؛ ينتهي. ينتهي.



Котелок   (2001-12-04 08:15) [5]

> كيف
غيك ... في البداية فعلت ذلك ، لكن بعد ذلك اضطررت إلى رفض ذلك
أحصل على المعلمات من نموذج تم إنشاؤه ديناميكيًا. على سبيل المثال ، نقر المستخدم على زر البحث. شكل برزت ، دخل مصطلحات البحث. أنا خلقت هذا الطلب بالذات ، ودمرت النموذج. ثم لنفترض أن المستخدم نفسه قرر فرز نتائج البحث حسب حقل آخر. وماذا أفعل في هذه الحالة؟ لذلك تسلقت عبر هذه الحديقة. يتم تخزين الطلب في متغير في النموذج الرئيسي.
ملاحظة: أنا أعرف كيفية استخدام parambyname .... ؛-) ... وبصراحة ، أنا أفضل بهذه الطريقة.

> ilysha
لا أعرف ، في وقت واحد في بضع مقالات رأيت تحذيرًا بعدم استخدام الإنشاء عند العمل مع قواعد البيانات. على الرغم من أنه قد لا يكون صحيحًا ...



kaif   (2001-12-04 16:10) [6]

حسنًا ، احفظ المعلمات في بعض المتغيرات وأعد ترتيبها عدة مرات كما تريد ، بعد استبدال نص الاستعلام فيما يتعلق بـ ORDER BY. ومع ذلك ، من حيث المبدأ ، لا شيء سيء في نسختك ، لا أرى. ليس من الضروري متابعة تحسين الكود. لكنها تمثل الوضوح والوضوح. ماذا لو كنت بحاجة للعودة إلى هذا البرنامج خلال شهر؟ من المهم أحيانًا توفير وقت العمل في المستقبل. الخيار الأفضل هو كتابة إجراء عالمي يقوم بشيء مماثل.



صفحات: 1 فرع كامل

المنتدى: "القواعد";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

الطابق العلوي





الذاكرة: 0.58 ميغابايت
الوقت: 0.029 ج
14-22360
RUS
2001-11-07 19:16
2002.01.08
إنترنت إكسبلورر


14-22380
النادل
2001-11-09 10:37
2002.01.08
سكان موسكو ، هل شاهد أي شخص دليل Win API المرجعي للبيع؟


1-22043
سيرج
2001-12-18 19:18
2002.01.08
حذف الكائن


1-22134
روسكو
2001-12-15 12:54
2002.01.08
هل لديك بالفعل هذا؟


3-21967
SklifF
2001-12-05 11:32
2002.01.08
حول SQL





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch English الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский