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