البحث باستعلام sql و طباعة النتيجة
#11
إقتباس :مشكلتي اخي متواجدة في المرفق تستطيع ان تحمله لتراها
اذا انه عند استعمال البحث بين تاريخين لا تخرج اي نتيجة في حين اذا استبدلنا القيم برقم الوصل على سبيل المثال تتم دون اي مشكل
مشكلتك أنك لم تحاول 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
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#12
وعليك السلام اخي ارفع لك القبعة كشفتني:laugh:
لكن لدي محاولات ب between وايضا بنفس طريقتك لكن المشكل هوا في ان النتائج لا تظهر
لقد جربت كل مااتيح الي من سبل لكن بدون اظهار اي نتيجة والله على ما اقول شهيد
:oops:
الرد
#13
الكود بعد التعديل، و قد تم إلغاء قالب التاريخ 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
الرد
#14
أهلا بالأستاذ خالد الشقروني
إقتباس :- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة
أعتقد كذلك، في الأصل...
لكن يبدولي أن Delphi يتبع إعدادات النظام بخصوص نمط التأريخ
والله أعلم.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#15
إقتباس :لكن يبدولي أن delphi يتبع إعدادات النظام بخصوص نمط التأريخ
نعم سيدي.

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

قبل كل شيء أنا لا أتذكر الأكواد والأوامر بشكل صحيح فأنا لم أعمل على الدلفي لفترة كبيرة لذلك سأكتب على شكل خوارزمية
كود :
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#

واذا ما كان في نتيجة ياحلو
فانه لا يوجد سجلات مطابقة
الرد
#17
حلول كثيرة وكلها ممتعة ومفيدة افكار غاية في الروعة

هل لا نستطيع الطباعة اذا كان الناتج من استعلام اي عدم وجود جدول
الرد
#18
السلام عليكم:
بالنسبة للتاريخ لماذا يا اخي لا تستخدم المكون Datetimepaker فهو يحتوي على اليوم والشهر والسنة فهو مريح في الاستعلامات جداً وبالنسبة للطباعة فهي تجوز من استعلام او جدول لا خلاف في ذلك .
الرد
#19
السلام عليكم
حسب مافهمت اليك الحل
تاخظ 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
الرد


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


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