![]() |
|
كيف التحكم في عناصر جملة 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=10693) |
كيف التحكم في عناصر جملة SQL؟ - ALG2009 - 03-03-2020 السلام عليكم أريد التحكم في عناصر جملة الـ SQL يدويا بمعنى عندي جملة Select Name,BirthDay,Mark from Table order by Name,BirthDay,Mark أريد مثلا وضع في الفورم عدة CheckBox بهم عناصر الـ (order( Name,BirthDay,Mark أنا الذي يتحكم على أي أساس يتم الترتيب على حساب الإسم أولا أو على حساب تاريخ الميلاد ثانيا وعند إزالة التحديد وإعادة التحديد يصبح العنصر المختار هو الأخير في قائمة الـ order RE: كيف التحكم في عناصر جملة SQL؟ - ghostdz - 04-03-2020 وعليكم السلام ورحمة الله وبركاته إليك الكود التالي قم بتجريبه ملاحظة : عليك إعطاء كل checkbox.tag قيمة حسب الجدول aFieldName كود : unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.StdCtrls, Vcl.Grids,
Vcl.DBGrids, Vcl.ExtCtrls, Data.Win.ADODB, Vcl.Mask, Vcl.DBCtrls;
type
TForm2 = class(TForm)
Query: TADOQuery;
NameCheckBox: TCheckBox;
BirthDayCheckBox: TCheckBox;
MarkCheckBox: TCheckBox;
procedure NameCheckBoxClick(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
aOrder: array of string;
function GenerateSQL: string;
procedure AddFieldToOrder(FieldName: string);
procedure RemoveFieldFromOrder(FieldName: string);
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.NameCheckBoxClick(Sender: TObject);
const
aFieldName: array[1..3] of string = ('Name', 'BirthDay', 'Mark');
var
Order: string;
begin
Query.Active:= False;
if TCheckBox(Sender).Checked then
AddFieldToOrder(aFieldName[TCheckBox(Sender).Tag])
else RemoveFieldFromOrder(aFieldName[TCheckBox(Sender).Tag]);
Query.SQL.Text:= GenerateSQL;
Query.Active:= True;
end;
function TForm2.GenerateSQL: string;
var
Order: string;
I: Integer;
begin
Result:= 'SELECT * FROM Table ';
if Length(aOrder) > 0 then
begin
Result:= Result + 'ORDER BY ' + aOrder[0];
for I:= 1 to High(aOrder) do
Result:= Result + ', ' + aOrder[I];
end;
end;
procedure TForm2.AddFieldToOrder(FieldName: string);
var
I: Integer;
begin
I:= 0;
begin
while (I <= High(aOrder)) and (UpperCase(aOrder[I]) <> UpperCase(FieldName)) do
I:= I + 1;
end;
if I >= Length(aOrder) then
begin
SetLength(aOrder, I + 1);
aOrder[I]:= FieldName;
end;
end;
procedure TForm2.RemoveFieldFromOrder(FieldName: string);
var
I: Integer;
begin
I:= 0;
while (I <= High(aOrder)) and (UpperCase(aOrder[I]) <> UpperCase(FieldName)) do
I:= I + 1;
if I <= High(aOrder) then
Delete(aOrder, I, 1);
end;
end.RE: كيف التحكم في عناصر جملة SQL؟ - ALG2009 - 04-03-2020 (04-03-2020, 12:38 PM)ghostdz كتب : وعليكم السلام ورحمة الله وبركاته جزاك الله خير ولكن عمل معي في الترتيب بالإسم فقط ولم يعمل مع تاريخ الميلاد و العلامه لا أدري أين الخلل وهل ممكن معرفة الترتيب على أي checkbox أولا ؟هل يمكن إضافة Label على الفورم بجانب كل checkbox ليبين ترتيبه ،هل تم الترتيب به في المرتبة الأولى أو المرتبة الثانية أو الثالثة؟ هل لك قناة تعليمية أخي الكريم؟ RE: كيف التحكم في عناصر جملة SQL؟ - ALG2009 - 05-03-2020 أعذرني البرنامج يعمل بكل كفاءة جزاك الله خيرا هل ممكن معرفة الترتيب على أي checkbox أولا ؟هل يمكن إضافة Label على الفورم بجانب كل checkbox ليبين ترتيبه ،هل تم الترتيب به في المرتبة الأولى أو المرتبة الثانية أو الثالثة؟ هل لك قناة تعليمية أخي الكريم؟ RE: كيف التحكم في عناصر جملة SQL؟ - ghostdz - 05-03-2020 (05-03-2020, 12:42 AM)ALG2009 كتب : أعذرني البرنامج يعمل بكل كفاءة جزاك الله خيرا هل ممكن معرفة الترتيب على أي checkbox أولا ؟هل يمكن إضافة Label على الفورم بجانب كل checkbox ليبين ترتيبه ،هل تم الترتيب به في المرتبة الأولى أو المرتبة الثانية أو الثالثة؟ إليك الكود التالي حيث قمت ببعض التغييرات على الكود السابق وأضفت فيه عرض الترتيب لا أملك قناة تعليمية كود : unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.StdCtrls, Vcl.Grids,
Vcl.DBGrids, Vcl.ExtCtrls, Data.Win.ADODB, Vcl.Mask, Vcl.DBCtrls;
const
aFieldName: array[1..3] of string = ('Name', 'BirthDay', 'Mark');
type
TForm2 = class(TForm)
Query: TADOQuery;
NameCheckBox: TCheckBox;
BirthDayCheckBox: TCheckBox;
MarkCheckBox: TCheckBox;
NameLabel: TLabel;
BirthdayLabel: TLabel;
MarkLabel: TLabel;
procedure NameCheckBoxClick(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
aOrder: array of string;
function GenerateSQL: string;
procedure AddFieldToOrder(FieldName: string);
procedure RemoveFieldFromOrder(FieldName: string);
function GetFieldOrderPos(FieldName: string): Integer;
procedure ShowFieldOrder;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.NameCheckBoxClick(Sender: TObject);
var
Order: string;
begin
Query.Active:= False;
if TCheckBox(Sender).Checked then
AddFieldToOrder(aFieldName[TCheckBox(Sender).Tag])
else RemoveFieldFromOrder(aFieldName[TCheckBox(Sender).Tag]);
Query.SQL.Text:= GenerateSQL;
Query.Active:= True;
ShowFieldOrder;
end;
function TForm2.GenerateSQL: string;
var
Order: string;
I: Integer;
begin
Result:= 'SELECT * FROM Table ';
if Length(aOrder) > 0 then
begin
Result:= Result + 'ORDER BY ' + aOrder[0];
for I:= 1 to High(aOrder) do
Result:= Result + ', ' + aOrder[I];
end;
end;
procedure TForm2.AddFieldToOrder(FieldName: string);
var
I: Integer;
begin
I:= 0;
begin
while (I <= High(aOrder)) and (UpperCase(aOrder[I]) <> UpperCase(FieldName)) do
I:= I + 1;
end;
if I >= Length(aOrder) then
begin
SetLength(aOrder, I + 1);
aOrder[I]:= FieldName;
end;
end;
procedure TForm2.RemoveFieldFromOrder(FieldName: string);
var
I: Integer;
begin
I:= 0;
while (I <= High(aOrder)) and (UpperCase(aOrder[I]) <> UpperCase(FieldName)) do
I:= I + 1;
if I <= High(aOrder) then
Delete(aOrder, I, 1);
end;
function TForm2.GetFieldOrderPos(FieldName: string): Integer;
var
I: Integer;
begin
Result:= 0;
for I := 0 to High(aOrder) do
if UpperCase(aOrder[I]) = UpperCase(FieldName) then
Result:= I + 1;
end;
procedure TForm2.ShowFieldOrder;
begin
NameLabel.Caption:= IntToStr(GetFieldOrderPos(aFieldName[1]));
BirthdayLabel.Caption:= IntToStr(GetFieldOrderPos(aFieldName[2]));
MarkLabel.Caption:= IntToStr(GetFieldOrderPos(aFieldName[3]));
end;
end.RE: كيف التحكم في عناصر جملة SQL؟ - ALG2009 - 05-03-2020 الله يرضى عليك ويزيدك من علمه (05-03-2020, 11:01 AM)ghostdz كتب : لا أملك قناة تعليمية عليك بوضع بعض الدروس كأفكار برمجية أو البدء في دورة على كتابة برنامج من الصفر حتى النهاية لنستفيد من علمك أخي الكريم طبعا إن كان لديك الوقت بالمناسبة PHP كود : (aFieldName[TCheckBox(Sender).Tag ماذا يقصد بالسندر Sender يمرر كباراميتر دائما في الاجراءات هل من أمثله لفهمه RE: كيف التحكم في عناصر جملة SQL؟ - S.FATEH - 05-03-2020 السلام عليكم بالنسبة للـ Sender Parent, Sender,Owner, ControlCount, ComponentCount هذا حل اخر باستخدام TStringList لم اجرب كثيرا عليه يمكنك تعديله بما يناسبك PHP كود : unit Unit1;RE: كيف التحكم في عناصر جملة SQL؟ - ALG2009 - 05-03-2020 (05-03-2020, 06:18 PM)S.FATEH كتب : السلام عليكم جزاك الله خير جاري التجربه |