المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
13-03-2010, 09:50 PM
(آخر تعديل لهذه المشاركة: 13-03-2010, 10:32 PM بواسطة kachwahed.)
إقتباس :مشكلتي اخي متواجدة في المرفق تستطيع ان تحمله لتراها
اذا انه عند استعمال البحث بين تاريخين لا تخرج اي نتيجة في حين اذا استبدلنا القيم برقم الوصل على سبيل المثال تتم دون اي مشكل
مشكلتك أنك لم تحاول 
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
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
المشاركات : 116
المواضيع 28
:
: 0
الإنتساب : Jan 2009
وعليك السلام اخي ارفع لك القبعة كشفتني:laugh:
لكن لدي محاولات ب between وايضا بنفس طريقتك لكن المشكل هوا في ان النتائج لا تظهر
لقد جربت كل مااتيح الي من سبل لكن بدون اظهار اي نتيجة والله على ما اقول شهيد
:oops:
المشاركات : 219
المواضيع 24
:
: 16
الإنتساب : May 2009
14-03-2010, 09:18 PM
(آخر تعديل لهذه المشاركة: 16-03-2010, 09:09 PM بواسطة kachwahed.)
الكود بعد التعديل، و قد تم إلغاء قالب التاريخ 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
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
أهلا بالأستاذ خالد الشقروني
إقتباس :- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة
أعتقد كذلك، في الأصل...
لكن يبدولي أن Delphi يتبع إعدادات النظام بخصوص نمط التأريخ
والله أعلم.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
المشاركات : 219
المواضيع 24
:
: 16
الإنتساب : May 2009
إقتباس :لكن يبدولي أن delphi يتبع إعدادات النظام بخصوص نمط التأريخ
نعم سيدي.
إقتباس :- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة
يمكن اعتباها عنوان للفثرة التي تليها. ما عنيته هو أن يتم التحويل صيغة التاريخ عند إعداد جمل sql
المشاركات : 27
المواضيع 0
:
: 0
الإنتساب : Mar 2009
21-03-2010, 02:20 PM
(آخر تعديل لهذه المشاركة: 22-03-2010, 06:34 AM بواسطة kachwahed.)
بالنسبة للتعمل مع التواريخ يفضل أولا تحويلها من نص الى تاريخ ثم استخدامها حتى تضمن دائما أن التاريخ المدخل والمراد البحث عنه بنفس اعدادات النظام المستضيف
قبل كل شيء أنا لا أتذكر الأكواد والأوامر بشكل صحيح فأنا لم أعمل على الدلفي لفترة كبيرة لذلك سأكتب على شكل خوارزمية
كود :
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#
واذا ما كان في نتيجة ياحلو
فانه لا يوجد سجلات مطابقة
المشاركات : 116
المواضيع 28
:
: 0
الإنتساب : Jan 2009
حلول كثيرة وكلها ممتعة ومفيدة افكار غاية في الروعة
هل لا نستطيع الطباعة اذا كان الناتج من استعلام اي عدم وجود جدول
المشاركات : 101
المواضيع 20
:
: 0
الإنتساب : Dec 2009
السلام عليكم:
بالنسبة للتاريخ لماذا يا اخي لا تستخدم المكون Datetimepaker فهو يحتوي على اليوم والشهر والسنة فهو مريح في الاستعلامات جداً وبالنسبة للطباعة فهي تجوز من استعلام او جدول لا خلاف في ذلك .
المشاركات : 13
المواضيع 1
:
: 0
الإنتساب : Apr 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