logo


פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס

שאילתה פשוטה

"בבקשה ציין את שמות כל הלקוחות וכתובת הדואר האלקטרוני שלהם" - זוהי הבקשה הראשונה שאנו רוצים להשיג, בהנחה שבסיס הנתונים לדוגמה clients שיצרנו בעבר במאמר קיים. אנו מתחילים את תוכנית ה Perl שלנו בהכללת מודול ה DBI :

#Windows-based Perl/DBI/MS Access example
	use DBI;

לאחר מכן, נשתמש במתודת ה connect של DBI לפתיחת תקשורת לבסיס הנתונים של אקסס:

#open connection to Access database
	$dbh = DBI->connect('dbi:ODBC:Clients');

המשתנה dbh$ מיצג את מזהה (handle) בסיס הנתונים (כמובן שתוכלו להשתמש בכל שם משתנה שתבחרו). ובקרוב נצטרך להשתמש בו כדי לבקש בקשות מיוחדות יותר על בסיס הנתונים. הפרמטר המועבר ל connect מציין באיזה מודול בסיס נתונים להשתמש (ODBC) וכן את שם בסיס הנתונים שיש לפתוח (clients). והיה ולבסיס הנתונים שלנו יש גם הגנה עם סיסמה, נצטרך לספק גם את הפרמטרים הללו:

$dbh = DBI->connect('dbi:ODBC:Clients',username,password);

בסיס הנתונים כעת מוכן ומחכה לשרת. לאחר מכן אנו בונים את פקודת ה SQL, אומרים ל DBI "להכין" את הפקודה להרצה (מאוד דומה ל compile), ולבסוף להריץ את הפקודה.

#construct SQL statement
$sqlstatement="SELECT ClientName,ClientEmail FROM billing";

#prepare and execute SQL statement
$sth = $dbh->prepare($sqlstatement);
$sth->execute || 
      die "Could not execute SQL statement, maybe invalid?";

מחרוזת פקודת ה SQL מושמת לתוך המשתנה sqlstatement$. משתנה אחר, sth$ או statement handle, קורא למתודה של מזהה בסיס הנתונים, להכין (prepare) את הפקודה. בדיוק אלו הכנות הוא עושה אינו מענינו ידע זה נמצא בתוך המודול DBD::ODBC, או כל מודול בסיס נתונים אחר בו אתה משתמש. לבסוף, אנו מורים למזהה הפקודה לבצע את פקודת ה SQL.

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

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

@row=$sth->fetchrow_array;

בגלל שהשאילתה שלנו ביקשה שני שדות תוצאה ClientName ו ClientEmail המערך row@ אמור להכיל שני אלמנטים, [row[0 $ ו [row[1 $. טריק Perl חמוד שהוא גם דרך יעילה יותר לקבל את השדות יהיה:

($ClientName,$ClientEmail)=$sth->fetchrow_array;

זיכרו שכל קריאה ל etchrow_array תחזיר את השורה הבאה מתוך התוצאות, עד שלא יהיו יותר תוצאות והקריאה תחזיר ערך של undef. לכן, נוכל להשתמש בלולאת while כדי לאחזר, ולדוגמה, להדפיס למסך את כל שורות התוצאה:

#output database results
	while (@row=$sth->fetchrow_array)
	 { print "@row\n" }

אם נסכם את החלקים, יש לנו סקריפטPerl קטן שמריץ פקודת SQL מוגדרת ובודדת ומוציאה את התוצאה:

#Windows-based Perl/DBI/MS Access example
 use DBI;

 #open connection to Access database
 $dbh = DBI->connect('dbi:ODBC:Clients');

 #prepare and execute SQL statement
 $sqlstatement="SELECT ClientName,ClientEmail FROM billing";
 $sth = $dbh->prepare($sqlstatement);
 $sth->execute || 
       die "Could not execute SQL statement ... maybe invalid?";

 #output database results
 while (@row=$sth->fetchrow_array)
  { print "@row\n" }

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

Perl מודולי בסיסי הנתונים של DBI ו DBD
תוכן עניינים
איך לבצע שאילתה

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
פרק 4: HTML בחטף ותבניות (Templates) רשת
פרק 5: עיבוד וניתוח של עמודי רשת
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
מבוא לבסיסי נתונים  
בסיסי נתונים SeQuel :II  
הכנת Microsoft Access  
DBI ו DBD מודולי בסיס הנתונים של Perl  
שאילתה פשוטה  
איך לבצע שאילתה  
היכן אנו עומדים  
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
פרק 10: ניהול רשימות והאשים (Hashs)
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl