השתמשתי ב Common Table Expressions (CTE)
דוגמא:
with cte as (
select id as 'מזהה' ,price as 'סכום עסקה' ,paid as 'שולם' , 'יתרת תשלום' = price-paid , 'יתרה כולל מעמ' = (price-paid)*1.17
from Sales)
select *
from cte
where [יתרה כולל מעמ] >50
השתמשתי ב Common Table Expressions (CTE)
דוגמא:
with cte as (
select id as 'מזהה' ,price as 'סכום עסקה' ,paid as 'שולם' , 'יתרת תשלום' = price-paid , 'יתרה כולל מעמ' = (price-paid)*1.17
from Sales)
select *
from cte
where [יתרה כולל מעמ] >50
@OdedDvir אמר בהכנסת פונקציה (private void) לX וגישה אליה בהמשך (לחצן לביצוע חוזר):
באיזה פריימוורק אתה משתמש, Core או Standard?
Core
@OdedDvir
זה היה השאלה....
איך כותבים דבר כזה....
זה מה שניסיתי ולא הצלחתי (להכניס/לגשת למשהו כזה)
הגדרת הצורך:
ביצוע לחצן 'ריענון' למסך דוחות
(תיאור: סביבת פיתוח C# - WINFORM
יש menuStrip של דוחות שונים, לפי טווח תאריכים שבוחר המשתמש
ואני מעוניין שכאשר נבחר טווח תאריכים חדש
המשתמש יכול ללחוץ על ה'רענון' והדוח יופק מחדש (במקום כיום שיש לבצע שוב בחירה בלשונית>תת לשונית)
)
הגדרת (חוסר) ידע נוכחי:
לעבוד ארוך ועקום בצורה if>else וכו' לא מומלץ במקרה דנן
(חשבתי לחפש את הפונקציה האחרונה שרצה, אבל זה אינו נכון
כי עלול להתבצע בינתיים פונקציות אחרות באותו namespace במקום אחר)
היות וC# זה שפה מונחת עצמים
הגיוני שאמור להיות דרך
להוסיף בכל Click הכנסה של שם הפונקציה הנוכחית (ToolStripMenuItem9_Click) ל'משתנה'/פונקציה
ובכל לחיצה על הלחצן ריענון, הוא יבצע את הפונקציה השמורה
אשמח לעזרתכם
@יושב-אוהלים
תעשה חיפוש בגוגל על תכונה לאימפוזיציה להדפסה
(תוכנה שקיימת בכל מכון לוחות של דפוס אופסט)
זה מאפשר לך שליטה מלאה על סדר וצורת ההדפסה בכל תרחיש אפשרי
@dovid
יסוד השאלה הינו לא 'איך למנוע כתיבה כפולה'
אלא איך להימנע מתוצאה שגויה בשאילתות מורכבות על 'ביג דאטה'
ולכתוב אותם בצורה נקייה
שבעתיד כשמישהו יצטרך לערוך ולתקן אותם
ה'מופע' יהיה ברור ובמקום אחד
(מספיק שבשגגה אכתוב/אעתיק במקום אחד 2+3/5, ובמקום השני 5/(2+3))
ואשרוף זמן להבין מדוע התוצאה לא נכונה
נזכרתי כעת שראיתי פעם בהדרכה של שחר גבירץ
אפשרות להכניס למשתנים בראש השאילתה, ובהמשך לגשת אליהם
אעבור על זה שוב לעומק
ואעדכן
היות וקיי"ל שתנאי ה- WHERE רץ לפני השאילתה
האם בכ"ז ישנה אפשרות לגשת לבצע פעולות על שדה מחושב באמצעות קריאה ישירה לשדה
ללא קינון נוסף
לדוגמא:
select id as 'מזהה' ,price as 'סכום עסקה' ,paid as 'שולם' , 'יתרת תשלום' = price-paid
from Sales
where (price-paid) <>0
ע"מ לסנן שורות בעלות יתרה לתשלום
אני נאלץ להכניס לwhere שאילתה מקוננת
במקום לגשת ישירות לנתון בעמודה
דוגמא נוספת:
במידה וארצה להוסיף עמודה של סכום כולל מע"מ
על העמודה 'יתרה לתשלום' (עמודה מחושבת)
select id as 'מזהה' ,price as 'סכום עסקה' ,paid as 'שולם' , 'יתרת תשלום' = price-paid , 'יתרה כולל מעמ' = (price-paid)*1.17
from Sales
האם ישנה דרך לגשת ישירות לעמודה המחושבת
או ששוב אצטרך לבצע את הדרך הארוכה
@רפאל
במידה ואכתוב כך
התוצאה תהיה זהה?
SqlConnection con = new SqlConnection(@"Data Source=185.2.2.25\dbt;Initial Catalog=dbn;User ID=dbus;Password=pass;Encrypt = true")
@חגי באמת כיף להכיר את הכלי 'Wireshark' בעקבות התשובות המפורטות (תודה מיוחדת ל: @dovid @aaron )
אחדד
שניתן לפרוץ בצורות כאלו ואחרות לSQL - ידוע ואכמ"ל
נקודת השאלה היא
בהנחה שההגנה הקיימת בשרת וSQL תקינה ומעולה בפני עצמה
ובהנחה שכתבתי את השאילתה עם שימוש ב'פרמטרים' וטיפול בשגיאות
איך הויזואל סטודיו שולח את המידע
האם הוא מצפין אותם ברמה כלשהיא (מקביל ל https) או שלא...
בשביל שאני לא ייתן 'דלת אחורית' לשליפת הנתונים
בניתי תוכנה בc# winform ובסיס הנתונים בSQL
התוכנה מתוקנת על מספר מחשבים, ומסד הנתונים יושב על שרת מקומי באותה רשת מחשבים פנימית,
אני מעוניין לאפשר את השימוש בתוכנה למחשבים שנמצאים במשרד שנמצא בעיר אחרת
וחושש מבחינת אבטחת מידע
כי התוכנה בשביל להתחבר ל SQL שולחת כמובן את כתובת השרת + שם משתמש + סיסמא
דוגמא: (SqlConnection con = new SqlConnection(@"Data Source=185.2.2.25\dbt;Initial Catalog=dbn;User ID=dbus;Password=pass"))
כעת שזה ברשת הפנימית, שגם מאובטחת בפני עצמה + הכתובת החיצונית לא מופיעה במחרוזת , אני די רגוע
אבל מה קורה כאשר מתקינים את התוכנה במיקום מנותק
שאז יש לשלוח בכתובת את כל הפרטים ש'הדייגים' מחפשים
האם וכיצד צריך להצפין בצורה כלשהיא את התקשורת
(נקודה חשובה: השרת עם כתובת IP קבועה, וכמובן סגור לכניסה מכל העולם, ופתוח רק לכתובות IP שהוחרגו לאישור)
נ.ב.
אשמח להרחיב את ה(חוסר) ידע הכללי
(המתבסס על קליטת תדרים משידורי תחנת מוניות ב'ווקי-טוקי'...)
כאשר מחברים את המחשב לאינטרנט, וינדוס שואל האם זה רשת פרטית או ציבורית
אני מניח שברשת ציבורית, משתמשים אחרים באותה רשת יכולים לזהות את תעבורת הרשת שאני שולח מהמחשב ו...
כאשר בוחרים ברשת פרטית
מתישהו המחשב שולח מידע החוצה לרשת הציבורית
לדוגמא: נכנסתי לאתר הבנק, והזנתי שם משתמש וסיסמא
כאשר לחצתי כניסה - פרטי ההקלדה נשלחו לאתר הבנק>נבדקו>והדפדפן אצלי קיבל תשובה
האם בין הראוטר שלי - לשרת של הבנק - המידע מוצפן?
נניח שמאחורי הקלעים של האתר המאובטח של הבנק יש הצפנה
שבכל פעם שאני מקליד את האות א האתר שולח את האות ג
ורק השרת של הבנק מפצח את התשדורת בחזרה
אזי גם ההאקר שמאזין לתשדורת שלי, יקבל שהדפדפן שלח את האות ג - וישלח את אותו שדר ישירות ללא המערבל של הבנק ויכול להכנס לחשבון
מה שאני מנסה להבין
זה איך עובד/נראה תעבורת רשת
ומה בעצם נשלח / מתקבל
ואיך עובד הצפנת תעבורה
(שמפעיל מזל"ט שולח פקודה מהג'ויסטיק למזל"ט לבצע המראה,
עצם פקודת התשדורת אמורה להיות גלויה היכןשהו
במידה ואיירט את הפקודה המוצפנת, ואשדר באותו תדר את הקלט שיירטתי, המזל"ט יבצע את אותה פעולה?)
בניתי תוכנה שמשתמשת בכ-380 מ"ב מהזיכרון דיסק
כאשר בתחילת הדרך השימוש בזיכרון עמד על כ170 מ"ב
האם ואיך יש אפשרות לנתח ב'ויז'ואל' מה התהליכים שמבצעים שימוש בזיכרון
(אינני מחפש נתן סטטי של מספר, כמה זכרון התוכנית כעת צורכת, כפי שמופיע במנהל המשימות,
אלא האם יש תהליך כמו 'דיאבג' שניתן לדגום תוך כדי ריצה את השימוש, ולפי זה אוכל לנתח ולמיטב ביצועים)
אתה מעמיד אותי בדילמה
לולי הערתך לגבי ה'פגע וברח'
הייתי כעת לא מגיב
והולך לעשות שיעורי בית (איך לבנות את התוכנה הקטנה שתאזין לפרוטוקול HTTP)
כי ברשותי ידע דל בתכנות (ובאנגלית...)
ולוקח לי זמן לבדוק ולהבין את התשובות
כך שאני עובד על הפרויקט הזה מכמה כיוונים
ושאני מתקשה - מחפש בstack בעזרת גוגל טרנסלייט
ובמידה ולא מוצא - שואל בפורום הנכבד הזה
כך שלהגיב רק "תודה רבה"
נראה לי שישבש את פעילות הפורום
(תתאר לעצמך נושא שיש בו שלושים תגובות והשואל מגיב 'תודה' אחרי כל תגובה)
וכשאני מצליח ליישם את התשובה
אין לי מה לחדש בתגובה שזה עובד כי זה בעצם המשיב כתב
לגופו של עניין
ברמה האישית - באמת תודה ענקית על עזרתך (אני נעזר רבות בתשובות קיימות בפורום)
ובפרט בתשובה זו
המפורטת מאוד
ובעיקר על העדכון שהוספת בתשובה לאחר הפרסום
אני ינסה לבנות את התוכנה שתאזין + האפשרות א שהצעת
(עזר לי מאוד התוספת שעדיף להוסיף שורות ולבדוק את השורה האחרונה במקום לעדכן שורה קיימת)
שבוע טוב ומבורך
התוכנה ומסד הנתונים זה באותו מחשב
(מדובר על שרת מקומי, שאליו מתחברים המשתמשים בRDP או שיתוף כונן רשת,
כך שבעצם יש קובץ יחיד של התוכנה וכל אחד שפותח נכנס על המשתמש שלו)
למחשב שמריץ את הSQL - אכן יש אייפי קבוע
בניתי תוכנה לניהול עסק בc# winform המתממשקת לSQL
אני מעוניין לחבר אותה למרכזייה ע"מ להקפיץ למשתמש חלון של שיחה נכנסת
ומעבר לכרטיס לקוח
הבעיה שלי היא בשיחות נכנסות
להיכן לשלוח את המידע מהמרכזייה ואיך אוכל לשלוף אותו לשימוש
המרכזייה יכולה בכל קבלת שיחה לשלוח לי התרעה (XML/GET/POST) המכילה את מספר המתקשר / ולאיזה מספר חייג
איך אני מתקדם מכאן?
איך ואיפה אני אמור לקבל את נתוני הAPI ולהשתמש בו
האם התהליך אמור להיות שההתרעה מעדכנת/מוסיפה שורה בטבלה במסד נתונים כלשהו
ובמקביל להריץ טיימר בתוכנה המקומית שיבדוק כל שניה מה המספר שמופיע שם
ובהתאם לכך לעשות פעולה
או שיש דרך קלה ונכונה יותר לביצוע
@dovid
תראה אם זה עוזר לך
עזרת לי מאוד!!
היות הפורום הינו פומבי
ע"מ להעניק עזרה וסיוע לא רק ברמה הפרטנית
אלא בעיקר שמנ-דהו בעתיד שיתקל בבעיה דומה יוכל לחפש ולמצוא בקלות
אעדכן ש:
התחביר dataGridView1.DataBindingComplete += (s, e) =>
יצר שגיאה (Error CS0136)
ולכן פשוט שמתי את הקוד המצ"ב במאפיין RowPrePaint
וזה עובד מעולה
foreach (DataGridViewRow item in dataGridView1.Rows)
if (item.Cells["פעיל"].Value is false)
{
item.DefaultCellStyle.BackColor = Color.Yellow;
}
else
{
item.DefaultCellStyle.BackColor = Color.White;
}
זה הקוד שממלא את הטבלה
SqlConnection con = new SqlConnection('SQL login information')
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT ID as 'מזהה', CustomerName as 'שם לקוח',PhoneNumber as 'טלפון',active as 'פעיל' from Customertable";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
יש לי טבלה (dataGridView) השולפת מידע מSQL
עמודות בטבלה: שם לקוח, מספר טלפון, פעיל (כן/לא)
אני מעוניין שהשורות של הלקוחות הלא פעילים יצבעו באפור
ניסיתי
הסתבכתי
אשמח לעזרתכם
סביבת פיתוח: c# from
רקע:
אני מריץ את התוכנה בשרת מקומי
שמספר משתמשים מתחברים אליו במקביל (באמצעות RDP)
כך שכל משתמש פותח ומשתמש בתוכנה עצמונית
הקושי:
ע"מ לבצע עדכוני תוכנה אני צריך שכל המשתמשים יסגרו את התוכנה הפתוחה אצלם
היות וכידוע לא ניתן למחוק/להחליף קובץ פתוח שרץ ברקע
שאלה:
איך אני יכול לבצע פקודת סגירה לכל ההפעלות הפתוחות במחשב זה - לכל המשתמשים
(Application.Exit סוגר את החיבור הנוכחי למשתמש פרטני בלבד)
איך אני מבצע סגירה אוטומטית של התוכנית כל יום בשעה מסוימת
(אני משער שמדובר בלולאת FOR הבודקת מה השעה, ולפי זה מפעילה IF, אשמח לעזרה בתחביר, ולהיכן להצמיד אותה)
שפת תכנות: C# FORM
בניתי תוכנה שמציגה ומבצעת פעולות על מסד נתונים של SQL
בכל FORM אני מבצע חיבור באמצעות SqlConnection
מה שמקשה עלי בכל פעם שיש שינוי גישה למסד נתונים/סיסמא
לעבור בכל המקומות ולשנות את הפרטים
שאלה:
איך אני מייצר חיבור אחד לכל הFORM
(קובץ App.config יחיד לכל התוכנה)
אשמח להסבר / קישור רלוונטי
איך אני מבצע בטופס winform שיהיה ניתן לעבור בטופס בין textbox באמצעות מקש אנטר
(כמובן אחרי שסדרתי את המעברים לפי ה'טאב')