2 שאלות ב SQLODBC

2 שאלות ב SQLODBC

כיצד כותבים בODBC סטנדרטי את הדברים הבאים:
1. פונקציה אשר מקבלת datetime ומחזירה רק date
2. להריץ יותר משאילתה אחת באותו קוד (אינני מתכוון ל subquery ) אלא לשאילתות שונות לחלוטין כמו שאפשר לעשות ב SQL SERVER ואי אפשר לעשות באקסס
האם זה אפשרי?

אני מחפש בגוגל כבר הרבה זמן ולא מוצא..

תודה
 

pitoach

New member
יש לך בילבול במושגים


1. ODBC הוא בסך הכל PROVIDER שמספק לנו את החיבור והקשר למקור חיצוני של נתונים.
ODBC = Open Database Connectivity
לא כותבים בו שום פונקציות אלא רק נעזרים בו כדי להתחבר למקור הנתונים שלך (למשל למסד הנתונים).
פונקציות כותבים בשפות. אתה יכול לכתוב פונקציה שעושה את מה שאתה רוצה בשפה שבה האפליקציה שלך מפותחת. למשל ב C@ או VB.NET או שאתה כיול להעזרת בפונקציה בשפת SQL שהיא השפה איתה אנחנו מדברים עם מסד הנתונים לאחר שביצענו אליו חיבור בעזרת ODBC או בעזרת PROVIDER אחר

2. שוב... אתה לא כותב שאילתות ב SQL אלא בתוכנה כמו SSMS שהיא תוכנת הניהול של ה SQL SERVER. אבל התוכנה בעצמה מתחברת לשרת בדיוק כמו כל אפליקציה שלך בדוט נט למשל בעזרת PROVIDER ואז היא מריצה את השאילתה בשרת. בדיוק כמו ש SSMS עושה את זה ככה גם אתה יכול לבצע את זה באותה צורה. פשוט מריצים כמה שאילתות שרוצים בזו אחר זו.

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

מה שאני בסה"כ מנסה לעשות זה לבנות convertor ב ויזואל סטודיו (VB.NET) אשר לוקח SQL שמייצר COGNOS IMPORTIUM ולהמיר אותו לSQL שאפשר להריץ בQlikView על ידי ODBC
צירפתי קבצים (המרה שעובדת ורצה!!)
שוב אני חוזר ומדגיש- אין שום חשיבות איזה database עומד מאחוריו .
רק לקחת קבצים מIMPORTIUM ולהמיר אותם ל clickview
הנה דוגמא ל פונקציות ב ODBC שהשתמשתי בהם
http://publib.boulder.ibm.com/infoc...ic=/com.ibm.redbrick.doc6.3/ciacg/ciacg25.htm

יש 2 בעיות שטרם הצלחתי לפתור:
1.איך להמיר את הפונקציה cdate ? (כלומר לקחת datetime ולהפוך אותו ל date בלבד)

2. כאשר יש לי קוד שיש בו יותר משאילתה אחת, ODBC לא מאפשר להריץ אותו...

תודה
 

pitoach

New member
אני אוריד את הקבצים במשך היום לבדוק


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

1. בכל מקרה האתר שהבאת מטעה אותך לחלוטין (לא באשמתו). אם היית עובר על האתר לעומק היית מגלה שהוא מדבר על Red Brick ODBC Driver ולא על ODBC רגיל המותקן עם מערכת ההפעלה WINDOWS
לפעמים לקרוא חצי משפט מביא תוצאה הפוכה ממה שאתה רוצה.
http://en.wikipedia.org/wiki/ODBC
http://www.webopedia.com/TERM/O/ODBC.html

בשימוש במושג פונקציות ODBC. הוא מדבר על פונקציות ODBC של מחלקה שהם כתבו כניראה (גם אני לא עברתי לעומק ולכן אני לא יכול להגיד בוודאות על מה בכלל מדבר האתר), והדוגמאות של שמוש בפונקציות שם הוא רק באמצעות ODBC אבל כמובן אפשר להפעיל אותן גם בצורה ישירה. כמו שמפעילים פונקצייה בשפת SQL על שרת SQL SERVER אליו מתחברים באמצעות ODBC

אתה כותב שלא חשוב לך איזה מסד נתונים אבל כל מסד נתונים עושה שימוש בשפה אחרת, ואפילו שפת SQL הסטנדרתית מעט שונה למשל ב MYSQL וב SQL SERVER וב ORACLE ועוד... למשל SQL SERVER עושה שימוש בהרחבה של שפה שנקראת T-SQL. בשפה זו אתה יכול לבצע המרה מיידית כמו שאתה רוצה. יש פונקצייה CONVERT בעזרתה אפשר להמיר מסוג אחד לסוג אחר. שוה אין לזה קשר ל ODBC אלא לשפת TSQL. הדוגמה הבא מראה כיצד לבצע המרה מתאריך מלא לתאריך פשוט בשרת SQL SERVER
declare @T as datetime = getdate()
select CONVERT(date, @T)
* בשורה הראשונה אני מגדיר משתנה של תאריך מלא datetime ומכניס לו את התאריך והשעה כרגע.
* השורה השנייה מבצעת את ההמרה מתאריך ושעה לפורמט של תאריך בלבד date.
אולי זה יעזור לך

מכיוון שאתה אומר שעובד עם דוט נט אז הפתרון ממש קל כי זה מובנה במחלקה של DATETIME. יש פרמטר בשם DATE. תוכל לראות דוגמה של שימוש בו בקשיור הבא: http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx
בשפת C#
// Get date-only portion of date, without its time.
DateTime dateOnly = date1.Date;
בשפת VB.NET
' Get date-only portion of date, without its time.
Dim dateOnly As Date = date1.Date
 

pitoach

New member
עידן פתחתי את הקבצים והם ארוכים מאוד

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

ז"א קודם תבדוק אם מה שכתבתי מעל עוזר ואם לא אזה אנא נסה להסביר שוב מה אתה מנסה לעשות עם דוגמה פשוטה קצרה.

* אם אתה מנסה לבצע המרה של שפה אחת לשפה אחרת אז מחכה לך עבודה לא קצרה. זה לא משהו פשוט. פעולות PARSING של טקסט יכולות להיות תהליך מורכב מאוד (לא קשה אבל מורכב מאוד לפעמים). זה תהליך שמחייב שליטה מוחלטת בכל האפשרויות של 2 השפות (בעיקר המקור אבל גם בתוצאה). האם זה מה שאתה מנסה?
 
כמה הבהרות

אני עובד עם ODBC של IBM (המוצג באתר זה, ולכן כתבתי את הפונקציות המופיעות שם והם אכן עובדות) דרך cognos ולא דרך ODBC רגיל של windows.

דבר שני- אני משתמש בדוט נט רק ככלי פיתוח להמרת מחרוזת משפת COGNOS SQL IMPORTIUM לשפה של ODBC של IBM.
את הSQL עצמו אני מריץ בCOGNOS ולא בשום מקום אחר לכן זה עובד!
צירפתי printscreen של ההמרה (לצערי משום מה לא הצלחתי לצרף קובץ טקסט)

אני מחפש פונקציית Red Brick ODBC Driver אשר ממירה מdatetime ל date
לצערי לא מצאתי...

האם עכשיו הכל ברור יותר?

תודה
 

pitoach

New member
LOL הכל ברור עכשיו אבל לצערי עכשיו שהכל ברור

אני יכול להגיד רק שאני לא מכיר את COGNOS ולכן לא מכיר את הפונקציות המובנות שיש שם

אולי מישהו אחר יוכל לעזור...

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

כלליים

New member
אולי יעזור

לפרק את הdatetime לגורמים, ולהרכיב מחדש.
עם הפונקציות year,month day, אפשר לחלץ את המרכיבים, ואז לשרשר לסטרינג.
 
למעלה