שימוש בשאילתות דלפי באמצעות ADO

רכיב TADOQuery מספק דלפי למפתחים היכולת להביא נתונים מטבלה אחת או מרובות מטבלה מסד נתונים של ADO באמצעות SQL.

הצהרות SQL אלה יכולות להיות הצהרות DDL (שפת הגדרת נתונים) כגון CREATE TABLE, ALTER INDEX וכן הלאה, או שהם יכולים להיות הצהרות DML (שפת מניפולציה של נתונים), כגון SELECT, UPDATE, ו- מחק. עם זאת ההצהרה הנפוצה ביותר היא הצהרת SELECT, המייצרת תצוגה דומה לזו הקיימת באמצעות רכיב טבלה.

הערה: אף כי ביצוע פקודות באמצעות רכיב ADOQuery אפשרי, ה- פקודת ADOCרכיב מתאים יותר למטרה זו. הוא משמש לרוב לביצוע פקודות DDL או לביצוע נוהל מאוחסן (למרות שאתה צריך להשתמש בTADOStoredProc עבור משימות כאלה) שלא מחזירה קבוצת תוצאות.

SQL המשמש ברכיב ADOQuery חייב להיות מקובל עבור מנהל ההתקן של ADO הנמצא בשימוש. במילים אחרות עליכם להכיר את ההבדלים בכתיבת SQL בין, למשל, MS Access ו- MS SQL.

כמו בעבודה עם רכיב ה- ADOTable, ניתן לגשת לנתונים במסד נתונים באמצעות חיבור לאחסון נתונים שהוקם על ידי רכיב ADOQuery באמצעותמחרוזת חיבור או באמצעות רכיב ADOC Connection נפרד המצוין בסעיף חיבורתכונה.

כדי ליצור טופס דלפי המסוגל לאחזר את הנתונים ממסד נתונים של Access עם רכיב ADOQuery, פשוט שחרר את כל הרכיבים הקשורים לגישה לנתונים ולמודעות לנתונים עליו וליצור קישור כמתואר בפרקים הקודמים של זה כמובן. רכיבי הגישה לנתונים: DataSource, ADOC Connection יחד עם ADOQuery (במקום ה- ADOTable) ורכיב אחד המודע לנתונים כמו DBGrid הוא כל מה שאנחנו צריכים.

instagram viewer

כפי שכבר הוסבר, באמצעות מפקח האובייקטים קבע את הקישור בין אותם רכיבים באופן הבא:

DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// בנה את ה- ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = לא נכון

מבצע שאילתת SQL

למרכיב TADOQuery אין שם שולחןכמו ש- TADOTable עושה. ל- TADOQuery יש נכס (TStrings) הנקרא SQL המשמש לאחסון הצהרת SQL. ניתן לקבוע את ערך נכס ה- SQL באמצעות מפקח האובייקטים בזמן התכנון או באמצעות קוד בזמן ריצה.

בזמן העיצוב, קרא לעורך המאפיינים של נכס SQL על ידי לחיצה על כפתור האליפסיס במפקח האובייקטים. הקלד את הצהרת SQL הבאה: "בחר * מאת מחברים".

ניתן לבצע את הצהרת SQL באחת משתי דרכים, תלוי בסוג ההצהרה. הצהרות שפת הגדרת הנתונים מבוצעות בדרך כלל באמצעות ה- ExecSQL שיטה. לדוגמה כדי למחוק רשומה ספציפית מטבלה ספציפית אתה יכול לכתוב משפט DELETE DDL ולהפעיל את השאילתה בשיטת ExecSQL.
הצהרות ה- SQL (הרגילות) מבוצעות על ידי הגדרת ה- TADOQuery. פעיל רכוש נכון או על ידי קריאה ל-פתוח שיטה (בעיקרון זהה). גישה זו דומה לאחזור נתוני טבלה עם הרכיב TADOTable.

בזמן ריצה, ניתן להשתמש בהצהרת SQL בנכס SQL ככל אובייקט StringList:

עם ADOQuery1 כן מתחילים לסגור; 
SQL.Clear;
SQL.Add: = 'בחר * מאת מחברים' SQL. הוסף: = 'הזמנה מאת autororname DESC' פתוח;
סוף;

הקוד שלמעלה, בזמן ריצה, סוגר את מערך הנתונים, מרוקן את מחרוזת SQL בנכס SQL, מקצה פקודת SQL חדשה ומפעיל את מערך הנתונים על ידי קריאה לשיטת Open.

שים לב שברור שיצירת רשימה מתמשכת של אובייקטים בשדה עבור רכיב ADOQuery אינה הגיונית. בפעם הבאה שתקרא לשיטת הפתיחה SQL יכולה להיות שונה כל כך שכל מערך השמות (והסוגים) שהוגשו עשוי להשתנות. כמובן, זה לא המקרה אם אנו משתמשים ב- ADOQuery כדי להביא את השורות מטבלה אחת בלבד עם מערך השדות הקבוע - והסט שהתקבל תלוי בחלק היכן של הצהרת SQL.

שאילתות דינמיות

אחד המאפיינים הגדולים של רכיבי TADOQuery הוא פרמים תכונה. שאילתת פרמטר היא שאלה המאפשרת בחירה בשורה / עמודה גמישה באמצעות פרמטר בסעיף WHERE של הצהרת SQL. המאפיין Params מאפשר פרמטרים להחלפה בהצהרת SQL שהוגדרה מראש. פרמטר הוא מציין מיקום לערך בסעיף WHERE, שהוגדר רגע לפני פתיחת השאילתה. כדי לציין פרמטר בשאילתה, השתמש במעי הגס (:) לפני שם פרמטר.
בזמן התכנון השתמש במפקח האובייקטים כדי להגדיר את המאפיין SQL באופן הבא:

ADOQuery1.SQL: = 'בחר * מ- יישומים WHERE type =: apptype'

כשאתה סוגר את חלון עורך SQL, פתח את חלון הפרמטרים על ידי לחיצה על כפתור האליפסיס במפקח האובייקטים.

נקרא הפרמטר בהצהרת SQL הקודמתיישום. אנו יכולים לקבוע את ערכי הפרמטרים באוסף הפרמטרים בזמן העיצוב באמצעות תיבת הדו-שיח פרמטרים, אך לרוב נשנה את הפרמטרים בזמן ריצה. ניתן להשתמש בתיבת הדו-שיח פרמטרים כדי לציין את סוגי הנתונים ואת ערכי ברירת המחדל של הפרמטרים המשמשים בשאילתה.

בזמן ריצה ניתן לשנות את הפרמטרים ולבצע את השאילתה מחדש כדי לרענן את הנתונים. על מנת לבצע שאילתת פרמטר, יש צורך לספק ערך לכל פרמטר לפני ביצוע השאילתה. כדי לשנות את ערך הפרמטר, אנו משתמשים במאפיין Params או בשיטת ParamByName. לדוגמא, בהתחשב בהצהרת SQL כנ"ל, בזמן ריצה נוכל להשתמש בקוד הבא:

עם ADOQuery1 אכן מתחילים
סגור;
SQL.Clear;
SQL.Td ('SELECT * FRA יישומים WHERE type =: apptype');
ParamByName ('apptype'). ערך: = 'מולטימדיה';
פתוח;
סוף;

כמו בעבודה עם רכיב ה- ADOTable, ADOQuery מחזירה ערכה או רשומות מטבלה (או שניים או יותר). ניווט במערך נתונים מתבצע באותה קבוצת שיטות שתואר בפרק "מאחורי נתונים במערכות נתונים".

ניווט ועריכה של השאילתה

באופן כללי אין להשתמש ברכיב ADOQuery בעת עריכה. השאילתות מבוססות SQL משמשות לרוב למטרות דיווח. אם השאילתה שלך מחזירה קבוצת תוצאות, לפעמים ניתן לערוך את מערך הנתונים שהוחזר. מערך התוצאות חייב להכיל רשומות מטבלה בודדת ואסור לה להשתמש בפונקציות מצטברות SQL. עריכת מערך נתונים שהוחזר על ידי ADOQuery זהה לעריכת מערך הנתונים של ADOTAble.

דוגמא

כדי לראות כמה פעולות ADOQuery נקוד דוגמה קטנה. בואו נעשה שאילתה שניתן להשתמש בה כדי להביא את השורות מטבלאות שונות במסד נתונים. כדי להציג את רשימת כל הטבלאות במסד נתונים נוכל להשתמש ב GetTableNamesשיטת ה- חיבור ADOC רכיב. שמות GetTableNames באירוע OnCreate של הטופס ממלאים את ה- ComboBox בשמות הטבלאות והכפתור משמש לסגירת השאילתה וכדי ליצור אותה מחדש כדי לאחזר את הרשומות מטבלה שנבחרה. מטפלי האירועים צריכים להיראות כמו:

נוהל TForm1.FormCreate (שולח: TObject);
התחל
ADOConnection1.GetTableNames (ComboBox1.Items);
סוף;
נוהל TForm1.Button1Click (שולח: נושא);
var tblname: מחרוזת;
התחל
אם ComboBox1.ItemIndex אז צא;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
עם ADOQuery1 אכן מתחילים
סגור;
SQL.Text: = 'בחר * מ' + tblname;
פתוח;
סוף;
סוף;

שים לב שניתן לעשות את כל זה על ידי שימוש במאפיין ADOT ובמאפיין TableName שלו.