delphi4arab منتديات دلفي للعرب
البحث باستعلام sql و طباعة النتيجة - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : البحث باستعلام sql و طباعة النتيجة (/showthread.php?tid=1779)

الصفحات: 1 2


البحث باستعلام sql و طباعة النتيجة - kachwahed - 13-03-2010

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

Access على خلاف غيره، حيث يقرأ التواريخ في الاستعلامات بين علامتين #، الاستعلام:
كود :
ADODataSet1.CommandText:= ('select * from BON where [DAT-JOUR]>= #' + maskEdit1.EditText + '# and' +' [dat-jour] <= #' + maskEdit2.EditText + '#');

أيضا لقراء النص من مكونات TMaskEdit (أقصد maskEdit2) يفضل استخدام EditText عوضا عن Text مباشرة، في هذه الحالة لا يظهر الفرق.

والأفضل استخدام BETWEEN بين التواريخ بهذا الشكل:
PHP كود :
ADODataSet1.CommandText:= ('SELECT * FROM BON WHERE [DAT-JOUR] BETWEEN #' + maskEdit1.EditText + '# AND' +' [dat-jour] #' + maskEdit2.EditText + '#'); 

بالتوفيق أخي Yahia Wink



البحث باستعلام sql و طباعة النتيجة - yahia1921 - 13-03-2010

وعليك السلام اخي ارفع لك القبعة كشفتني:laugh:
لكن لدي محاولات ب between وايضا بنفس طريقتك لكن المشكل هوا في ان النتائج لا تظهر
لقد جربت كل مااتيح الي من سبل لكن بدون اظهار اي نتيجة والله على ما اقول شهيد
:oops:


البحث باستعلام sql و طباعة النتيجة - shagrouni - 14-03-2010

الكود بعد التعديل، و قد تم إلغاء قالب التاريخ Mask من تعريف الجدول في قاعدة البيانات.
كذلك به نسخة جملة SQL باستخدام BETWEEN

PHP كود :
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  
sSql: string;
begin
  ADODataSet1
.Active := False;
  
sSql := 'SELECT * FROM BON WHERE [DAT-JOUR] >= ' + #39 + maskEdit1.Text + #39+
                          
'AND' +' [dat-jour] <= ' +  #39+ maskEdit2.Text + #39;

 // sSql := 'SELECT * FROM BON WHERE [DAT-JOUR] BETWEEN ' + '#' + maskEdit1.Text + '#' +
 //                         'AND' +  '#' + maskEdit2.Text + '#';

  
ADODataSet1.CommandText:= sSql;
  
ADODataSet1.Active:=True;
end; 

أخي: التواريخ من أكثر الأمور إرباكا عند البرمجة، يجب أن تنتبه لأمور بعضها التالي:
- أن تكون قيمة التاريخ بين متلازمتين : من العلامة "’ ' " كما هو الحال عند التعبير عن الصيغ النصية وقيمتها في الأسكي 39 و تستطيع أن تعبر عنها في دلفي بالطرق التالية:
PHP كود :
''''xxxxxx''''
#39+ xxxxx + #39
Char(39) + xxxxx + Char(39)
أو استخدام الدالة
 QuotedStr
(xxxxx) 
حيث xxxxxx قيمة المتغير الذي يحوي القيمة النصية 
- قاعدة بيانات اكسيس قد لا تقبل وضع قيمة التاريخ بين علامتي اسكي 39، وتقبل بدلا عنه الحرف #
مثل:
‘SELECT * FROM MyTable WHERE MyDate = #1/15/2010# ’

- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة

- عند قراءة التاريخ من مدخلات المستخدم، وبسبب اختلاف توصيف صيغة التاريخ من حاسوب لآخر، حاول دائما تحويل التاريخ إلى صيغة شهر يوم سنة. قبل إمراره في جمل SQL


البحث باستعلام sql و طباعة النتيجة - kachwahed - 14-03-2010

أهلا بالأستاذ خالد الشقروني
إقتباس :- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة
أعتقد كذلك، في الأصل...
لكن يبدولي أن Delphi يتبع إعدادات النظام بخصوص نمط التأريخ
والله أعلم.



البحث باستعلام sql و طباعة النتيجة - shagrouni - 14-03-2010

إقتباس :لكن يبدولي أن delphi يتبع إعدادات النظام بخصوص نمط التأريخ
نعم سيدي.

إقتباس :- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة
يمكن اعتباها عنوان للفثرة التي تليها. ما عنيته هو أن يتم التحويل صيغة التاريخ عند إعداد جمل sql


البحث باستعلام sql و طباعة النتيجة - tempuser - 21-03-2010

بالنسبة للتعمل مع التواريخ يفضل أولا تحويلها من نص الى تاريخ ثم استخدامها حتى تضمن دائما أن التاريخ المدخل والمراد البحث عنه بنفس اعدادات النظام المستضيف

قبل كل شيء أنا لا أتذكر الأكواد والأوامر بشكل صحيح فأنا لم أعمل على الدلفي لفترة كبيرة لذلك سأكتب على شكل خوارزمية
كود :
a, b :string; d1 ='3/1/2009'; // string d2 ='3/30/2009'; // string a = convert date to string (convert d1 to date) b = convert date to string (convert d2 to date) select * ........ From ....... Where bon between #a# and #b#

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


البحث باستعلام sql و طباعة النتيجة - yahia1921 - 21-03-2010

حلول كثيرة وكلها ممتعة ومفيدة افكار غاية في الروعة

هل لا نستطيع الطباعة اذا كان الناتج من استعلام اي عدم وجود جدول


البحث باستعلام sql و طباعة النتيجة - amar_del2007 - 22-03-2010

السلام عليكم:
بالنسبة للتاريخ لماذا يا اخي لا تستخدم المكون Datetimepaker فهو يحتوي على اليوم والشهر والسنة فهو مريح في الاستعلامات جداً وبالنسبة للطباعة فهي تجوز من استعلام او جدول لا خلاف في ذلك .


البحث باستعلام sql و طباعة النتيجة - imad_soft - 12-05-2010

السلام عليكم
حسب مافهمت اليك الحل
تاخظ adoquery داخل وتكتب
PHP كود :
select * from bon 
   where 
[num-mag=:m 
2/تذهب الى params
params: string
3/1 datasource
datasat : adoquery
4/dbgrid1
datasource : datasource1
5/اضغط مرتين على maskedit1 واكتب
كود :
adoquery1.Close; adoquery1.Params[0].value:=maskedit1.Text; adoquery1.Open;

اما في ما يخص الطباعة
اضغط مرتين على الزر واكتب
كود :
form2.adoquery1.Close; form2.adoQuery1.Params[0].value:=maskedit1.Text; form2.adoQuery1.Open;; form2.quickrep1.preview;
حيث ان form2 الطابعة
اضف adoquery1 الى form2