Delphi, יש פה תותחים?

zorik23

New member
Delphi, יש פה תותחים?

שלום לכולם, אני בונה תוכנה ב Delphi, חלקה קשור לDatabases , אני משתמש בTADOQuery כשאני רושם פקודה ב SQL נתקלתי בבעיה, איך אני מגדיר מצב שמשתמש קובע לאיזה טבלה בDB נכנסים? כלומר : מה רושמים ב FROM ? אני לא יודע איך הולך הסינתקס.. ניסיתי כבר נראה לי ה כ ל ושום דבר לא עובד.. אם יש שאלות אני אוכל לפרט. עזרה בבקשה...
 

voguemaster

New member
תגדיר מה אתה רוצה לעשות

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

zorik23

New member
מה שרשמתי ב SQL

SELECT * FROM x WHERE Thick = th and Diam =t ORDER BY R t ו- th הם פרמטרים שהמשתמש מכניס וזה עובד בלי בעיה הבעיה היא ב-x, כאשר אני רושם במקומו שם של הטבלה זה עובד. אם אני רושם x ומנסה להתייחס לזה כמו לפרמטרים th ו-t, ככה שאת שם הטבלה יכניס משתמש זה לא עובד והקומפיילר נותן לי שגייה שהמשפט SQL לא נכון
 

voguemaster

New member
שאלה מפגרת יש לי

ניסית להדפיס את השאילתא לפני שאתה מעביר אותה ל-DB ? אולי תופתע לגלות ששם הטבלה לא נכון מסיבה כזו או אחרת.
 
מה נוסח השגיאה שאתה מקבל?

אתה בטוח שדווקא הקומפיילר מחזיר לך את השגיאה הזאת? היא לא באה מה- DB?
 

zorik23

New member
אני לא יודע מה מקור השגיאה

צירפתי אותה פה, הוא אומר ש sh זה לא טבלה, אבל זאת המטרה שזה יהיה משתנה שהמשתמש יכניס את השם של הטבלה. (כשרמתי את השאלה פה אז קראתי לזה X, אצלי זה נקרא sh). ל voguemaster : לא הבנתי מה זאת אומרת להדפיס שאילתה לפני שמעבירים אותה לDB, אבל שם הטבלה הוא לא זה! זה המטרה שיהיה לי משתנה שם ולא השם..
 

vinney

Well-known member
זאת שגיאת מסד נתונים

ואתה צריך לבדוק אותם, כל תוכנה שמתעסקת עם בסיסי נתונים צריכה לטפל בזה, ולא לתת לדרייבר להקפיץ כאלה שגיאות מכוערות. מה פשר השגיאה - כתוב : אין כזאת טבלה. לשאלתך, אתה יכול להרכיב שאילתת SQL בזמן ריצה להשתמש באובייקט COMMAND כדי להריץ אותו (COMMAND זה שם אבסטרקטי, אבל הכוונה לאיזו מחלקה שכוללת אותו, SQLCOMMAND או OLEDBCOMMAND או משהו בסגנון). עוד אפשרות זה להשתמש בשדה SQLTEXT של האובייקט בו אתה משתמש כדי להשפיע על הSQL שמורץ כל פעם מחדש. אפשרות שלישית היא SQL קבוע עם שם טבלה כפרמטר שקורא לSTORED PROCEDURE על השרת, אבל זה טיפה יותר מסובך, ומיותר פה.
 

voguemaster

New member
אתה יכול להעלות פה קטע קוד ?

שבו אתה בונה את השאילתה ? כשאני כותב SQL לא משנה באיזו שפה, אני בד"כ מדפיס את השאילתות לפני שאני מריץ אותן מול ה-DB, לפחות בזמן פיתוח. כך אני מוודא שהשאילתות שאני מעביר לבסיס הנתונים אכן עובדות.
 

zorik23

New member
מעלה את הקוד

צירפתי את הקוד פה, מה שבתוך התיבה זה השאילתה של הSQL, הוא פותח טבלת נתונים של ACCESS, במצב הזה זה כן עובד, כי "צינור" זה השם של הטבלה. עם אני מחליף את זה ב SH שזה פרמטר, הוא נותן לי שגיאה. כמו שציינתי לפני, גם t,th,pv,min,max הם פרמטרים וזה עובד בלי בעיה!
 

vinney

Well-known member
שאלה קטנה

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

zorik23

New member
זאת השאלה שלי :)

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

vinney

Well-known member
בטח שאפשר

פשוט אתה לא יכול להשתמש בפרמטרים בכזאת צורה. תרכיב SQL בתוך התוכנה שלך, ותריץ אותו על השרת, זה לא מסובך.
 
אפשר לשרשר משפט SQL

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

zorik23

New member
תסביר, לא הבנתי...../images/Emo4.gif

התוכנה שאתה מדבר זה סביבת פיתוח, כמו Visual Studio, SQL כבר מותקן שם...
 

vinney

Well-known member
לא הבנת

תסתכל על התגובה מעלייך, לזה התכוונתי
 

zorik23

New member
מקפיץ....

רשמתי למטה הודעה אבל לא יודע למה זה לא קפץ למעלה....
 

zorik23

New member
חבר'ה אני עדיין לא מסתדר לי..../images/Emo4.gif

טוב , תשמעו.. ניסיתי פה כל מני דברים, שום דבר לא עוזר לי.. יש למישהו דרך יותר מפורטת לעזור לי? אני די תקוע...
תודה
 
למעלה