![]() |
|
كيف يمكنني إدخال المعلومات بإستعلام واحد؟ - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : كيف يمكنني إدخال المعلومات بإستعلام واحد؟ (/showthread.php?tid=10995) |
كيف يمكنني إدخال المعلومات بإستعلام واحد؟ - ALG2009 - 04-08-2020 السلام عليكم كيف أقوم بإدخال المعلومات بإستعلام واحد دون اللجوء إلى الإجراءات المخزنه داخل قاعدة البيانات؟ جربت هذا الكود لم يعمل مع العلم أني أضفت ExecSQL ولكن يعطيني خطأ لو أضفتها ما المشكلة كود : procedure TfrmAdd.btnAddClick(Sender: TObject);
var studentId,STUDENTNumber : integer;
lessonName :string;
begin
STUDENTNumber := ('Select STUDENTNumber from student where STUDENTNumber = StrToInt(:edit1.text)');
if ((STUDENTNumber =null )then
Begin
Dmdata.qryadd.SQL.Text:='INSERT INTO Student (FName,LName,BDay,PBirth)'+
'VALUES (:fname,:LName,:Bday,:PBirth)' ;
Dmdata.qryadd.Params.ParamByName('FNAME').AsString:= edtFName.Text;
Dmdata.qryadd.Params.ParamByName('LNAME').AsString:= edtLName.Text;
Dmdata.qryadd.params.ParamByName('BDay').AsDate:= StrToDate(edtBDay.Text);
Dmdata.qryadd.Params.ParamByName('PBirth').AsString:= edtPBirth.Text;
studentId := (SELECT GEN_ID( GEN_studentID, 0 ) FROM RDB$DATABASE);
End ;
lessonName := ('Select lessonName from lessons where lessonName = :combox.text');
if ((lessonName =null )then
Begin
Dmdata.qryadd.SQL.Text:='Insert into lessons (lessonName) values (:lessonName)';
Dmdata.qryadd.Params.ParamByName('lessonName').AsString:= ComboBox1.Text;
LessonId := (SELECT GEN_ID( GEN_LESSONSID, 0 ) FROM RDB$DATABASE);
end;
Dmdata.qryadd.SQL.Text:='Insert into Studlessons (studentId,lessonId) values (:studentId,:lessonId)';
end;وكذلك عندما أريد إختصار الكود بإضافة with Dmdata.qryadd Do يعطيني خطأ في سطر البارميتر ؟ أريد أن أكتب الكود كمحترف هل هذه الطريقة صحيحة أعرف أنه يمكن كتابة الكود بأكثر من طريقة هل هذه الطريقة جيدة ؟ RE: كيف يمكنني إدخال المعلومات بإستعلام واحد؟ - S.FATEH - 05-08-2020 السلام عليكم اذا كان الاستعلام يعيد نتائج مثلا كـ select استخدم Open بدل من ExecSQL RE: كيف يمكنني إدخال المعلومات بإستعلام واحد؟ - ghostdz - 05-08-2020 وعليكم السلام ورحمة الله تعالى وبركاته ما هو نص الخطأ الذي تحصلت عليه ، حسب علمي ExecSql تعمل عادي كود : STUDENTNumber := ('Select STUDENTNumber from student where STUDENTNumber = StrToInt(:edit1.text)');
studentId := (SELECT GEN_ID( GEN_studentID, 0 ) FROM RDB$DATABASE);
lessonName := ('Select lessonName from lessons where lessonName = :combox.text');
LessonId := (SELECT GEN_ID( GEN_LESSONSID, 0 ) FROM RDB$DATABASE);لكن هناك ملاحظة بالنسبة للكود الذي وضعته ، حيث حسب الكود فإنك لا تقوم بتنفيذ الإستعلام بل تحاول وضع الإستعلام في المتغير من نوع integer و string وهذا خطأ حيث بإمكانك كتابة function تعطيك القيم التي تريدها مثلا GetStudentNumber, GetStudentId, GetLessonName, GetLessonId RE: كيف يمكنني إدخال المعلومات بإستعلام واحد؟ - ALG2009 - 05-08-2020 (05-08-2020, 08:02 AM)S.FATEH كتب : السلام عليكم و لكن نحن بصدد الكتابة في الجدول قلت دعني أجرب Open نفس الشيء لا يتعرف عليها فإنتبهت أنها تكون بعد Qryadd.ExecSQL بارك الله فيك أحيانا نقع في أخطأ ما كانت لتحصل ![]() (05-08-2020, 09:44 AM)ghostdz كتب : وعليكم السلام ورحمة الله تعالى وبركاته بالفعل هذا المشكل الذي وقت فيه فالدلفي لم يقبل وضعه في متغير .هل تقصد Function داخل قاعدة البيانات ؟ هذا ما لا أرغب فيه وإن كانت هي الطريقة الإحترافية سأقوم بذلك لا أبحث على كود يعمل فقط لأني أريد أن أتعلم كتابة كود جيد وبارك الله فيكم والأسطر التي أشرت إليها هي المسببة في الخطأ عدلت الكود ولكن لا يقوم بالإدخال ويعطيني 0 في StudentId كما هو موضح في الصورة ![]() ولم أعرف أن أجلب رقم التلميذ أول سطر في الكود لأقارنه إن كان موجود من قبل أم لا RE: كيف يمكنني إدخال المعلومات بإستعلام واحد؟ - ghostdz - 13-08-2020 لم أقصد function في قاعدة البيانات بل في الدلفي حيث يمكنك وضع أربعة TQuery في الوحدة التي تحوي DmData و قم بوضع الإستعلام في Sql الخاص بها حسب التالي StudentNumberQuery : Select STUDENTNumber from student where STUDENTNumber = :StudentNumber StudentIdQuery : SELECT GEN_ID( GEN_studentID, 0 ) FROM RDB$DATABASE LessonNameQuery : Select lessonName from lessons where lessonName = :LessonName LessonIdQuery : SELECT GEN_ID( GEN_LESSONSID, 0 ) FROM RDB$DATABASE ثم قم بإنشاء الدوال كما الكود التالي في DmData كود : Function GetStudentNumber(StudentNumber: Integer): Integer;
Begin
StudentNumberQuery.Active:= False;
StudentNumberQuery.Params.ParamByName('StudentNumber').AsInteger:= StudentNumber;
StudentNumberQuery.Active:= True;
Result:= StudentNumberQuery.FieldByName(‘StudentNumber’).AsInteger;
End;
Function GetStudentId: Integer;
Begin
StudentIdQuery.Active:= False;
StudentIdQuery.Active:= True;
Result:= StudentIdQuery.Fields[0].AsInteger;
End;
Function GetLessonName(LessonName: string): string;
Begin
LessonNameQuery.Active:= False;
LessonNameQuery.Params.ParamByName('LessonName').AsString:= LessonName;
LessonNameQuery.Active:= True;
Result:= LessonNameQuery.FieldByName(‘LessonName’).AsString;
End;
Function GetLessonId: Integer;
Begin
LessonIdQuery.Active:= False;
LessonIdQuery.Active:= True;
Result:= LessonIdQuery.Fields[0].AsInteger;
End;وفي حالة إستدعاء الدالة هو إستخدام الكود التالي كود : STUDENTNumber := GetStudentNumber(StrToInt(edit1.text));
studentId := GetStudentId;
lessonName := GetLessonName(combox.text);
LessonId := GetLessonId;RE: كيف يمكنني إدخال المعلومات بإستعلام واحد؟ - ALG2009 - 13-08-2020 بارك الله فيك أخي ghostdz من مدة وأنا أحاول مع هذا الكود حيث قررت أن أضيف إجراء في قاعدة البيانات ليتأكد من تكرار الإسم واللقب وتاريخ الميلاد في قاعدة البيانات ولكن لا أدري لماذا هناك خطأ إستعملت Case و Exist ولكن دون فائدة من بعض المحاولات كود : create procedure aa(
v1 varchar(20),
V2 varchar(20),
d date)
returns(vv integer)
AS
BEGIN
case when SELECT 1 FROM table1 where FName=:v1 and LName=:v2 and BDay=:d )) THEN
result = 1 -- or true
END
endالطريقة الثانية كود : create procedure aa(
v1 varchar(20)
V2 varchar(20),
d
date)
returns(vv integer)
begin
if (exists(select fname,lfname,bday from STUDENT where fname=:v1 and lfname=:v2 and bday=:d) )then
result = 1 -- or true
end
endالطريقة الثالثة كود : select fname,lfname,bday from STUDENT
where not exists (select fname,lfname,bday from STUDENT where fname=:v and lfname=:g and bday=:H)endكل الإجراءات لا تعمل لا أدري أين الخطأ |