Delphi กับการทำ Form Search (ค้นหา) แบบเจ๋งๆ
เริ่มกันที่การติดต่อฐานขอมูลอันนี้ผมขอใช้ Component
Zeosdbo และฐานข้อมูล MySQl ในการทำตัวอย่างนี้นะครับ
โดยส่วนต่อฐานข้อมูลผมจะวางเอาไว้ที่ Data Module ตามภาพด้านล่าง
ซึ่งประกอบด้วย Zconnection , ZQuery , DataSetProvider ทั้งหมด 3
ตัว
ซึ่งในส่วนของการเซ็ตค่า Properties การเชื่อต่อฐานข้อมูลผมไม่ขอพูดถึงแล้วกันนะครับเพราะสามารถหาดูได้ทั่วไป
ภาพ Data Module
|
มาต่อกันนะครับ ให้เราสร้าง VCL Form ขึ้นมา 1 อันครับ ซึ่งใน Form เราเราหยิบ Component ดังต่อไปนี้มาวางนะครับ Edit , DBGride , ClientDataSet
, DataSource วางเสร็จก็จะมีตามภาพด้านล่างนี้นะครับ
เมื่อทำการสร้าง Form และวาง Component เสร็จ
เราก็มาเริ่มที่ Edit โดยเราจะใส่ Code การค้นหาใน Event OnKeyUp ของตัว Edit1
โดยผมจะเขียนดังนี้นะครับ
procedure TSearchDataF.Edit1KeyUp(Sender: TObject; var Key:
Word;
Shift: TShiftState);
begin
if (VarToStr(Key)
<> '38') and (VarToStr(Key) <> '40')
and (VarToStr(Key) <> '13') then
begin
DataModule1.ZQuery1.Close;
DataModule1.ZQuery1.SQL.Text := ' select
code, name '+
' from
“????Table????” '+
' where name
like "%'+Edit1.Text+'%" limit 100 ';
DataModule1. ZQuery1.Open;
ClientDataSet1.Close;
ClientDataSet1.SetProvider(ClassDMU.DataSetProvider1);
ClientDataSet1.Open;
end;
end;
ซึ่งจะมีการตรวจเช็คค่าการกดคีย์บอร์ดต้องไม่ใช่ปุ่ม Enter ,
Up , และ Down ก็จะทำในส่วนของการค้นหาขอมูลในฐานข้อมูลแบบ Like เพื่อที่เราจะเอาการกดคีย์บอร์ด
Enter , Up , และ Down ไปใช้อย่างอื่น ซึ่งคีย์ Up และ Down เราจะเอาไปใช้ในการเลื่อนตัวเลือก Row ใน DBGrid
นั้นเองนะครับ
ส่วน Enter เราใช้เมื่อเราเลือกรายการแล้ว
ต่อมาเขียน Event
OnKeyDown ของตัว Edit1 ซึ่งจะเป็นส่วนของการเลื่อน Select Row ของ DBGrid
จากการที่เราเลื่อนค่าของ
ClientDataSet1 ซึ่งจะไม่ทำให้การ Focus ย้ายออกจาก
Edit1 เพื่อให้เราสามารถพิมพ์คำค้นหาเพิ่มต่อได้เลยโดยไม่ต้องใช้เมาส์เลื่อนไปคลิกเลือกสลับไปมาระหว่าง
Edit1 และ
DBgrid
procedure TSearchDataF.Edit1KeyDown(Sender: TObject; var
Key: Word;
Shift: TShiftState);
var Message:
TCMDialogKey;
begin
if
(VarToStr(Key) = '38') or (VarToStr(Key) = '40')
then
begin
if VarToStr(Key) = '38'
then ClientDataSet1.Prior;
if VarToStr(Key) = '40'
then ClientDataSet1.Next;
Key := 0;
end;
end;
เท่านี้คุณก็จะได้ Form สำหรับ Search (ค้นหา) ที่ง่ายๆแต่เจ๋งๆไปใช้กัน สามารถค้นหาจากบางคำในประโยคนั้นได้
และสามารถทำงานด้วยคีย์บอร์ดยางเดียวโดยไม่ต้องใช้เมาส์คลิกไปมาให้เสียอารมณ์ ที่เหลือก็แค่เอาไปดัดแปลงใช้กันนะครับ
ไม่ยากครับติดส่วนไหนก็ถามได้นะครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็น