מידע

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

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

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

הצהרות SQL אלה יכולות להיות הצהרות DDL (שפת הגדרת נתונים) כגון CREATE TABLE, ALTER INDEX וכן הלאה, או שהן יכולות להיות הצהרות DML (Language Manipulation Language), כגון SELECT, UPDATE ו- DELETE. עם זאת ההצהרה הנפוצה ביותר היא הצהרת 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 הוא כל מה שאנחנו צריכים.
כפי שכבר הוסבר, באמצעות מפקח האובייקטים קבע את הקישור בין אותם רכיבים באופן הבא:

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.Active רכושנכון או על ידי קריאה ל-פתוח שיטה (בעיקרון זהה). גישה זו דומה לאחזור נתוני טבלה עם הרכיב TADOTable.

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

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

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

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

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

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

ADOQuery1.SQL: = 'בחר * מתוך יישומים איפה סוג = סוג יישום'

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

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

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

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

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

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

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

דוגמא

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

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

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