אקסס מבוסס SQL
-
לפני שבוע מישהו מתקשר אלי ומבקש שאני יעשה לו איזו עבודת תחזוקה בתוכנה שעובדת על אקסס. אקסס אני יודע ולכן הגעתי אליו אבל אז אני רואה שבאמת זה אקסס אבל הוא מקושר ל-SQL SERVER. פה נתקעתי כי מעולם לא עבדתי עם זה. אמרתי לו שאני אבדוק את זה. במהלך השבוע ניסיתי ללמוד SQL SERVER וראיתי שזה לא כ"כ מסובך ואפילו קישרתי אותו לאקסס.
השאלה שלי:
א. יש לו מסד נתונים פעיל כבר ב-SQL SERVER. איך אני עושה שינויים קטנים של הוספה בטבלאות ומצד שני אני לא משבית לו את המסד נתונים.
ב. אם אני רוצה לעבוד על זה בבית שלי האם כדאי לי להתחבר ל- SERVER שלו או לקחת גיבוי של המסד נתונים, לערוך בו שינויים ואז להחזיר לו (ואז איך הנתונים שהשתנו אצלו במהלך העבודה שלי לא מעודכנים) או שיש אפשרות להעתיק רק את המבנה של המסד.אני אשמח מאוד לשמוע הדרכה בסיסית איך עושים את זה
בתודה מראש -
א. עריכת מסד נתונים יכולה להתבצע ב"חי", ע"י פקודות של DML כמו ALTER DROP וכולי.
אם רוצים לערוך ויזואלית כמו אקסס, יש כלי של Microsoft ששמו SSMS = SqlServer Management Studio, זו תכונה גדולה וכבדה (אין לי מושג למה) והיא מאפשרת עריכה ויצירה של טבלאות ויזואלית.
ב. תתחבר מהבית, SQL SERVER זה שירות! זה לא אקסס וזה לא איזה קובץ שהולך בדיסק און קי. להעתיק מסד ולהחזיר יכול להפוך לכאב ראש מלבד ההשבתה שזה עלול לחייב. -
@dovid קודם כל תודה על ההתייחסות והתשובה.
התקנתי אצלי את SSMS ואני באמת עשיתי איתו תרגולים, אבל אני קצת מפחד לעשות שינויים על חי במסד פעיל. אין אפשרות להעתיק מבנה, לשנות אותו ואז להחזיר את המבנה לנתונים (אני לא משנה עמודות של נתונים קיימים בטבלה אלא רק מוסיף עמודות וטבלאות).
ב. הוא עובד ישירות באקסס ולא ב-SQL SERVR. השאלה אם יש לי דרך לדעת את פרטי הכניסה שלו. -
@dovid כתב באקסס מבוסס SQL:
א. תאמין לי יותר מפחיד הרעיון שלך. באקסס זה פשוט, בSQL SERVER זה ממש לא.
בלי נסיון בשטח, אני לא מבין מה כל כך מפחיד? יש גיבוי ושיחזור מגיבוי ככה אמור להיות קל להעתיק את המבנה (+התוכן, אבל זה לכאורה לא חשוב לך) של מסד הנתונים למחשב הלוקלי, לעשות עליו ניסויים ואז אחרי שיש לך ביטחון מלא שה-SQL שלך טוב ונכון אפשר להריץ אותו על השרת החי
-
@דוד-החדש כתב באקסס מבוסס SQL:
אבל אני קצת מפחד לעשות שינויים על חי במסד פעיל
הפחד שלך מוצדק לחלוטין. יש לי כמה סיפורים מסמרי שיער בנושא...
א. הנוהל הנכון הוא להקים סביבת טסט, כלומר לשכפל את מסד הנתונים הקיים ל-db נוסף (אפשרי על אותו השרת), וכן ליצור עותק של ה-frontend של אקסס ולקשר אותו ל-db של הטסט. זה יוצר סביבת טסט מלאה ואוטונומית מהייצור לחלוטין, ומאפשר לך לבצע שינויים כרצונך שם, הן ב-backend והן ב-frontend, ורק לאחר בדיקת שפיות - אתה מעביר את השינויים לסביבה שבייצור.
למעשה אתה הצעת משהו דומה, ליצור סביבת פיתוח לוקאלית אצלך, ולא אצל הלקוח. וכך באמת נוהגים בעולם האמיתי: מקימים (לפחות) 3 סביבות: פיתוח, טסט וייצור.ב. לעולם אין להעביר את הדאטא מהטסט לייצור, וכ"ש מסביבת הפיתוח, רק את השינויים בסכמה (מבנה הטבלאות, stored procedures וכו') או מטא-דאטא כגון טבלאות ערכים (ValueSets) שמתארות את הנתונים. למשל סוג לקוח:
Id Description 1 Admin 2 User -
@OdedDvir כתב באקסס מבוסס SQL:
ב. לעולם אין להעביר את הדאטא מהטסט לייצור, וכ"ש מסביבת הפיתוח, רק את השינויים בסכמה (מבנה הטבלאות, stored procedures וכו')
זה באמת מה שאני חשבתי ליצור למסד המקורי קובץ גיבוי ואז לשחזר אותו אצלי ולעבוד עליו ואז להחזיר אותו.
השאלה איך אני מעתיק את המבנה שלו למסד המקורי בלי לפגוע בנתונים הקיימים. (השינויים במבנה הם רק הוספות של עמודות וטבלאות, לא מחיקה ושינוי עמודות קיימות).אגב, לדעתי הבעלים של זה לא יודע את פרטי הכניסה של ה-SERVER שלו כי הוא עובד ישירות על אקסס, יש דרך לדעת את זה או דרך להעתיק את המסד בצורה אחרת?
-
@דוד-החדש כתב באקסס מבוסס SQL:
השאלה איך אני מעתיק את המבנה שלו למסד המקורי בלי לפגוע בנתונים הקיימים. (השינויים במבנה הם רק הוספות של עמודות וטבלאות, לא מחיקה ושינוי עמודות קיימות).
במקרים פשוטים, אתה פשוט חוזר על הצעדים בדיוק.
@OdedDvir וכנראה גם @yossiz כנראה תיארו לעצמם שתכתוב משפטי SQL ותשנה צעד אחד צעד בDB של הפיתוח, אח"כ אתה מריץ את כל משפטי הSQL הללו בDB של היייצור.
אני כפי ששמתי לב אמרתי אחרת שתעבוד ישירות על המסד, אבל אני לא יודע מה יהיה יותר קל לך כי כל אפשרות פה כרוכה באתגרים.בקשר לסיסמה, דבר ראשון אם תפעל לפי ההנחיות של חברי לא תצטרך שום סיסמה.
SQL SERVER בד"כ יש בברירת מחדל אימות Windows, שזה אומר שכשאתה מתחבר מהמשתמש המנהל במחשב אתה מנהל בלי שום סיסמה. בשביל להתחבר מרחוק צריך לאפשר חיבור מרוחק וגם ליצור משתמש SQL מסוג רגיל, ולתת לו סיסמה חדשה. -
@dovid כתב באקסס מבוסס SQL:
במקרים פשוטים, אתה פשוט חוזר על הצעדים בדיוק.
@OdedDvir וכנראה גם @yossiz כנראה תיארו לעצמם שתכתוב משפטי SQL ותשנה צעד אחד צעד בDB של הפיתוח, אח"כ אתה מריץ את כל משפטי הSQL הללו בDB של היייצור.אתה מתכוין פשוט לרשום לי את כל השינויים שאני עושה ואז להעתיק אותם אחד אחד למקורי (לא נראה לי שאני אעשה מידי הרבה שינויים אבל עדיין תמיד יש אפשרות לשכוח פרטים מסויימים).
@dovid כתב באקסס מבוסס SQL:
SQL SERVER בד"כ יש בברירת מחדל אימות Windows, שזה אומר שכשאתה מתחבר מהמשתמש המנהל במחשב אתה מנהל בלי שום סיסמה. בשביל להתחבר מרחוק צריך לאפשר חיבור מרוחק וגם ליצור משתמש SQL מסוג רגיל, ולתת לו סיסמה חדשה.
זאת אומרת שכשאני הולך להעתיק מהמקום ההוא את הקובץ אקסס ואת המסד העורפי אני צריך להיכנס למחשב שם ולהוסיף עוד משתמש שלי עם סיסמה. ואז זה פשוט להיכנס מרחוק?
-
@דוד-החדש כתב באקסס מבוסס SQL:
אתה מתכוין פשוט לרשום לי את כל השינויים שאני עושה ואז להעתיק אותם אחד אחד למקורי (לא נראה לי שאני אעשה מידי הרבה שינויים אבל עדיין תמיד יש אפשרות לשכוח פרטים מסויימים).
אכן התכוונתי לכך.
אתה צריך לזכור שלמרות שלפעמים יש צורך אמיתי בכך, לשנות סכמה של מסד נתונים קיים זה תמיד תהליך יותר מורכב ומסוכן מאשר לעצב אותו נכון מהתחלה.
עם הניסיון שתצבור, הצורך הזה אמור להיות יותר ויותר נדיר.אגב, אם יש לך אפשרות להתחבר ישירות לשרת ה-SQL של הלקוח מהמחשב שלך, ולא רק דרך RDP, ל-VS יש כלים שיכולים לעזור לך לנהל גרסאות של SQL, להשוות סכמות של שני db, ליצור script של כל השינויים הנדרשים, ולהריץ אותו על ה-db הרצוי.
לגבי הסיסמה ל-SQL, ניתן בקלות לשלוף אותה מתוך האקסס, וזהו, אגב, אחד מהחסרונות של האריכטקטורה הזו. פשוט תריץ את השאילתא הבאה:
SELECT Connect FROM MSysObjects WHERE Type=4
-
@OdedDvir כתב באקסס מבוסס SQL:
SELECTConnectFROM MSysObjects WHERE Type=6
אני לא מצליח להריץ את הקוד. כותבים אותו בשאילתה רגילה באקסס?
@OdedDvir כתב באקסס מבוסס SQL:
אגב, אם יש לך אפשרות להתחבר ישירות לשרת ה-SQL של הלקוח מהמחשב שלך, ולא רק דרך RDP, ל-VS יש כלים שיכולים לעזור לך לנהל גרסאות של SQL, להשוות סכמות של שני db, ליצור script של כל השינויים הנדרשים, ולהריץ אותו על ה-db הרצוי.
איך אני יכול לדעת את זה מראש לפני שאני מגיע אליו להעתיק את הכל?
אני כרגע משתמש ב-SSMS ומחובר לSERVER שנמצא על המחשב שלי ולא ברשת. בשביל להתחבר לשרת מרוחק צריך יותר מאשר להזין בפרטי הכניסה את שם ה-SERVER והסיסמה? -
@דוד-החדש כתב באקסס מבוסס SQL:
אני לא מצליח להריץ את הקוד. כותבים אותו בשאילתה רגילה באקסס?
כן.
איך אני יכול לדעת את זה מראש לפני שאני מגיע אליו להעתיק את הכל?
הלקוח שלך אמור לדעת את זה, זה חלק מהגדרות שרת ה-SQL שלו. תוכל גם לבדוק האם אתה יכול להריץ את האקסס מתוך המחשב שלך ולהתחבר לנתונים שלו.
-
@mekev כתב באקסס מבוסס SQL:
השאילתא כולל התנאי לא מחזירה תוצאה
אתה צודק, זו היתה טעות שלי. הערך 6 בשדה Type מציין טבלה מקושרת בבסיס נתונים אקסס או אקסל (והשדה יציג את הסיסמה אליו...).
עבור טבלאות מקושרות השוכנות בבסיס של SQL הערך של Type שווה ל-4.
כך:SELECT Connect FROM MSysObjects WHERE Type=4
שיניתי גם במקור.
ולעצם העניין, אם יש לך Connection-String - היא אמורה להכיל כל פרטי ההתחברות כולל את הסיסמה.