מדובר בשורה חדשה? אם ככה הID אמור להיות "לא ידוע". כי הDataBase בבו העת יקצה לו מספר.
למה צריך להציג ID לפני שישנו?
פורסם במקור בפורום CODE613 ב14/07/2015 19:30 (+03:00)
מדובר בשורה חדשה? אם ככה הID אמור להיות "לא ידוע". כי הDataBase בבו העת יקצה לו מספר.
למה צריך להציג ID לפני שישנו?
פורסם במקור בפורום CODE613 ב14/07/2015 19:30 (+03:00)
מעניין! לא יודע להסביר אצלי זה לא עובד גם בזמן עיצוב (VS 2015).
אני רואה על זה דיבורים באינטרנט.
מה שבינתיים נשאר לך לעשות זה key והפניה בכל חלון לסטטיק ריסורס.
פורסם במקור בפורום CODE613 ב15/07/2015 14:43 (+03:00)
יש לך כמה טעיות.
א. הכלי של הData Source לא עושה Data Set אלא עשרות מחלקות שחלקם יורשות חלקם עוטפות מחלקות ADO רבות, שאחת מהן היא DataSet (ראה כל כל מחלקות אלו כאן: http://code.613m.org/viewtopic.php?f=1&t=155#p969). המחלקה DataSet דומה למחלקה DataTable, בעוד DataTable מייצגת טבלה דטה בייסית בזכרון, אז הDatSet מייצג מסד שלם שזה אומר בעיקר הקשרי גומלין. המחלקה DataSet אכן לא נצרכת כ"כ בעבודה מול טבלה בודדת, אבל נוחה בעבודה מול יותר מטבלה אחת, שיש ביניהם קשרים.
ב. המילים "הכל ידני עם ConnectionString" מביעות הנחה כאילו האוטומציה של הTyped Data Set חוסכת הקלדה מפורשת בקוד של ConnectionString. הגם שזה נכון, אבל זה ממש לא מטרתה, אלא העובדה שכל עמודה בטבלה מזוהה, וכל תא מיוצג ע"י מאפיין עם טיפסיות קשוחה (אי אפשר להזין טקסט במספר וכדומה). והTableAdapter ממולאים בשאילתות ובפרמטרים המתאימים. והביצוע כמו Fill מקבלים פרמטרים עם טיפוס וכו'.
הייתי מסיק שעליך להעדיף תמיד את הTyped Data Set שזהו המחלקת Data Set המיוחדת שנוצרת ע"י האשף/דיזיינר של Data Source של הVS. אבל ההמלצה בלל לא תמיד נתנת ליישום. אם אתה רוצה לתשאל שאילתות דינמיות לפי קלט משתמש אתה חייב ליצור Command טקסטואלי לבד. ממילא גם DataTable רגיל בשביל לאכלס את התוצאות. כמו כן אם אתה מתעתד לפתוח DB באופן דינמי אז בכלל אין לך מה לחפש באשף הלז.
הדרך המודרנית ומומלצת של מקרוסופט כיום לגישה לנתונים מוכרים בזמן עיצוב, זה ע"י Entity Framwork.
שים לב שEF לא תומכת במסד אקסס.
פורסם במקור בפורום CODE613 ב14/07/2015 18:45 (+03:00)
ClickOne לא התכוון וירטואלי כמשמעו, אלא מצב בו אתה בוחר לשים את המסד-כקובץ בתוך הפרוייקט, הוא הוא מקבל הגדרה Copy Alaws לתיקיית הBin. מה שקורה שכל הרצה במסגרת הVS מוחקת את הקודם וממילא השינויים עימו.
הNewRow זה מתודה בDataTable. אם תשים לב תראה שאתה לא משתמש בDataTable כי אם בטיפוס שיורש ממנו.
בDataTable אין מאפיינים לכל עמודה, כי הוא מעוצב לעבודה עם כל טבלה שהיא מכל מסד שהוא. המתודה NewRow מחזירה DataRow חדש, שזה אובייקט שמכיל מערך ערכים, שהפניה אליהם נעשית ע"י אינדקסר מיקום או שם עמודה (הוא מכיר את השמות בזמן ריצה ע"י האבא שלו: הDataTable).
משא"כ הטיפוס שהנך משתמש עימו נקרא Typed Data Table כלמור כזה DataTable שכבר יועד ועוצב בזמן עיצוב לטבלה ספציפית, כאשר לכל שדה יש מאפיין מתאים וכו'. אז בעוד המתודה NewRow היא שארית מDataTable הגנרי וחסר הטיפוסיות, אז ישנה מתודה חדשה בשם NewXxxRow שמחזירה טיפוס יורש מDataRow בו יש מאפיין פר עמודה.
פורסם במקור בפורום CODE613 ב14/07/2015 15:18 (+03:00)
תסיר את השורה 25:
avrTrumaDataSet.AcceptChanges();
הערות נוספות:
כיון שהשתמשת עם Typed Data Set, אזז חבל לך להשתמש עם אינדקסרים סטרינגיים (donor["FirstName"]) השתמש במקום זאת במאפיינים (donor.FirstName).
התנאי בשורה 8 לא יתקיים אף פעם, ולכן הוא מיותר.
את התנאי בשורה 18 תוכל לפשט, ולכתוב בשורה אחת ככה:
donor.Gender = MaleRadioButton.IsChecked == true;
פורסם במקור בפורום CODE613 ב14/07/2015 11:39 (+03:00)
לא כ"כ ברור לי מה שתי הדרכים שאתה שואל איזו להעדיף. NewRow והמתודה GetChanges לא מתחרים כלל על אותה המשבצת. בנוסף אני לא יודע איזו בדיקה אתה מבצע.
אבל שתדע לך, מאוד קשה לי לתת לך פרקטיקות טובות בDB, כי פשוט לא היה לי אף פעם. אכלתי המון קש. מזכיר לי משפט של מורה "אתם לא יכולים ללמוד מהטעיות שלי. אתם חייבים לעשות טעויות משלכם כדי ללמוד" :).
פורסם במקור בפורום CODE613 ב14/07/2015 18:27 (+03:00)
אז תכתוב ככה:
TrialSQL1.AvrTrumaDataSet avrTrumaDataSet = ((TrialSQL1.AvrTrumaDataSet)(this.FindResource("avrTrumaDataSet")));
TrialSQL1.AvrTrumaDataSet changes = avrTrumaDataSet.GetChanges();
או קצר:
var changes = ((TrialSQL1.AvrTrumaDataSet)(this.FindResource("avrTrumaDataSet"))).GetChanges();
פורסם במקור בפורום CODE613 ב14/07/2015 15:19 (+03:00)
לא מובן לי. איפה הצהרת על הDS שמופיע בתצוגות? בתוך מתודה? תוכל להראות או להסביר?
הצלחה!
פורסם במקור בפורום CODE613 ב14/07/2015 11:46 (+03:00)
שורה 4 זה לא יצירה אלא אחזור המופע שהוצהר עליו בריסורס בXAML.
שורה 6-7 כפי שאמרת זה מילוי הטבלה Person.
שורה 8 מאחזרת את הCollectionViewSource שאף הוא הוצהר כבר בXAML.
בשורה 9 מגדירים לCollectionViewSOuce מה הרשומה הנוכחית שלו. ומה? השורה הראשונה.
האובייקט הזה - הCollectionViewSource - משמש כעטיפה לאוסף בWPF. במקום להזין לדטה גירד את הטבלה עצמה (שזה אפשרות פשוטה יותר), בדרך זו אתה נותן לדטה גריד את הCollectionViewSource כמקור נתונים, והוא עצמו מקבל במאפיין Source את האוסף - במקרה שלנו טבלה.
הפלוסים של הCollectionViewSource זה פלטור ומיון עצמאיים בלי לשנות את המקור, וגם ניווט. ניווט זה הגדרה על איזו רשומה הפוקוס עכשיו. מה זה משנה? כמה השלכות של UI.
פורסם במקור בפורום CODE613 ב14/07/2015 12:01 (+03:00)
לא התכוונתי שהPHP יחזיר את הפרטי חיבור, אלא שהוא יבצע את השאילתה ויחזיר את הערך מתוך הטבלה.
אכן, זה בדיוק data service ומתנצל שעניתי אחרי קריאה רופפת מידי. זה בדיוק מה שכבת בהתחלה.
פורסם במקור בפורום CODE613 ב13/07/2015 17:45 (+03:00)
באשכול ישן (שלך), KingYes ענה תמציתית וזה נוגע גם לכאן: http://tchumim.com/topic/509
פורסם במקור בפורום CODE613 ב13/07/2015 16:31 (+03:00)
ממש לא... אין שום מתווך התוכנה למסד, התקשורת ישירה. רק בתור שמירת פרטי חיבור בחרת בדף מרוחק וזה שקול לקובץ בדיסק קשיח (עם הסיומות האופייניות XNL/INI).
הדף מחזיר פרטי חיבור, ויאללה התוכנה מחוברת. אתה לא מבין כמה קל למשתמש מנוסה לאחזר את הפרטים הללו, ואיזה שאגות צחוק הוא ירים כשהוא יראה את הדרך המשובשת בה בחרת להחביא ממנו את הפרטים.
תוכנה מתווכת הכוונה שהיא מקבלת שם וסיסמה (שיכולים להיות חשופים למשתמש וכתובים בענק בתוכנה) ונותנת גישה למשאבי המסד לפי מה שהחלטת עבור הם והסיסמה האלו. נניח אתה עושה תוכנה לחנות מוזיקה, שאפשר להזמין דיסקים ע"י התוכנה. אז השם והסיסמה יהיו גלויים למשתמש ואדרבה, הוא אפי' יבחר אותם כמו בהרשמה לאתר. התוכנה המתווכת תיתן לשם וססימה אלו את הקניות האחרונות שהם ביצעו וכדומה. אבל הם לא יכולו לבצע SELECT ללא WHERE ולקבל קניות של אחרים.
בעצם תתייחס לרעיון שלך, ותחשוב שבמקום שPHP יחזיר פרטי חיבור כמו טמבל, הוא פשוט יגיד לתוכנה "יאללה, מה את רוצה לדעת"? אז היא תגיד לו "את הסיסמה של המנהל". אז הדף ישאל אותה "רגע, מי את בכלל?" 
פורסם במקור בפורום CODE613 ב13/07/2015 16:20 (+03:00)
webservice זה שם מושג כללי לכל שרת שמעבד בקשה , לא?
אכן. ואמרתי שאתה חייב לבנות אחת כזאת. ייעודית לתיווך בין התוכנות למסד.
לגבי עצם השאלה, חשבתי שהתשובה הפשוטה היא, לכתוב את פרטי החיבור בצד שרת - PHP לדוגמא, והאפליקציה רק תתחבר לדף הזה עם איזשהו פרמטר שיוכנס בכתובת HTTP, ותקבל בחזרה את הערך המבוקש מתוך הטבלה שעיבד ה PHP.
לא קראת טוב את תשובתי.
יש מאות רעיונות ממש נחמדים, שירחיקו את הסכנה (DROP DATABASE
וכדומה) בעוד כמה סנטימטרים. למשל לשמור את הסיסמה בצורה מוצפנת.
אבל שללתי את כולם.
תקן אותי אם טעיתי.
אני רואה הרבה שמשתמשים עם זה והייתי מאוד רוצה ללמוד את הנושא לעומק, מה לחפש בגוגל?
desktop application mysql password
פורסם במקור בפורום CODE613 ב13/07/2015 15:52 (+03:00)
כלל ברזל: כל מה שיכולה האפליקציה, יכול גם המשתמש.
ממילא האבטחה לא אמורה להיות כלל ברמת האפליקציה.
בצד המסד, וזה די מסובך, צריכה להיות הרשאה רק לפעולות שאתה מרשה לאפליקציה/משתמש לעשות.
כיון שזה מאוד קשה לאכוף אבטחה עדינה במסד נתונים, דרושה תוכנת אמצע שיושבת על השרת ומתווכת ביניהם. היא יכולה להיות חכמלוגית מאוד מבחינת הרשאות וגם גמישה לשינויים.
תוכנה זו שזה בעצם שירות רשת, נקרא בדרך כלל בשמות webservice, data service.
אם אתה מכיר תוכנות לקוח נוספות תוכל לבדוק שחלק צעדו בדרך הזו, והם בטוחות לגמרי, וחלק הלכו בדרך הנלוזה של הסתרת המנגנון מהמשתמש כאבטחה, אם זה שם וסימת מסד, FTP, web service ועוד. כל אלו חשופים לבלגנים נחמדים ממשתמשים משועממים או מעוניינים.
פורסם במקור בפורום CODE613 ב12/07/2015 10:38 (+03:00)
לפי תוכן העניינים זה ספר טוב ומקיף על צד הלקוח: HTML CSS, ומה שקשור לכך גם בJS.
קצת בומבסטי השם שכולל את המילים "ומערכות WEB".
פורסם במקור בפורום CODE613 ב12/07/2015 10:48 (+03:00)
(אני לא אמרתי שDataGrid לא מומלץ אלא שכשלא נדרשות יכולתיו אז הוא מיותר. ועניין המראה שנראה לך בDataGrid יותר טוב זה מהעדר הכרות עם ListBox או בגלל שאכן אתה צריך טבלה עם תאים שאז ודאי שDataGrid הוא האידאלי).
יש בDataGrid מאפיין ששמו AutoGenerationColumn. כיון שבברירת מחדל הוא חיובי אז כשאתה מציין ItemsSource הפקד בודק לבד איזה מאפיינים יש לכל אלמנט באוסף. ולפיהם יוצר עמודות. בשביל לשלוט מה להציג ואיך יש ליצור את העמודות לבד (זה לא מדוייק, כי אפשר לקסטם את היצירה האוטומטית בכמה דרכים אבל הם לא רלוונטיים למקרה של DataTable שכמדומני שזה מקור הנתונים שלך).
בשביל לייצר עמודות לבד פשוט צריך למלא DataGridXXXXColumn במאפיין DataGrid.Columns. הXXXX מציינים סוג, כי יש כמה (טקסט, תיבת סימון ועוד).
פורסם במקור בפורום CODE613 ב09/07/2015 16:37 (+03:00)
אברהם, הDB הוא רכיב לשמירת נתונים. אתה המתכנת צריך להשתמש בו רק למטרה זו.
לבחור בData Type שימנע שגיאת הקלדה זה אומר שחיברת את התצוגה ישירות למסד והתפטרת מתפקידך. אתה אמור לעבוד קשה ולכתוב שכבה שלמה בין התצוגה למסד. לכן כל השאלה לא רולוונטית.
רק שאני מבין שבשימוש עם הכלים האוטומטיים של גירה ושחרור גורמים לך להתפתות לחשוב שאפשר עוד כמה התאמות קטנות וזהו, זה עובד. אז זהו שלא. אתה חייב להתאים כל דבר ולקחת אחריות גם על דברים שמותאמים לבד. בדוק היטב כיצד נטענים ונשמרים הנתונים, וגרום לכך שיופיע 0 לפני המספר בתצוגה. זה האתגר שכרגע אתה עומד לפניו.
פורסם במקור בפורום CODE613 ב09/07/2015 16:30 (+03:00)
אכן חוץ מלא להאמין לך אני לא רואה מוצא 
פורסם במקור בפורום CODE613 ב20/07/2015 12:58 (+03:00)