6000$ בערך לקרופיה של מייקרוסופט :evil: :evil: :evil: :evil: :evil: :evil: :twisted: :twisted: :twisted: :twisted: :twisted:
פורסם במקור בפורום CODE613 ב09/02/2014 15:41 (+02:00)
6000$ בערך לקרופיה של מייקרוסופט :evil: :evil: :evil: :evil: :evil: :evil: :twisted: :twisted: :twisted: :twisted: :twisted:
פורסם במקור בפורום CODE613 ב09/02/2014 15:41 (+02:00)
@דוד ל.ט.
ארכיטקט, אתה אובססי עם הקטע של מיקרוסופט.
יש בזה משהו, אבל כנראה זה טבע האדם, ואולי זה אחד מהדברים שבו אנחנו שונים בהם מהמחשב גם אם  IBM יצליחו עם פרוייקט הבינה המלאכותית שלהם :lol:  :lol:  :lol: .
@דוד ל.ט.
בגלל שהם נתנו לך אקספרס בחינם אתה רוצה הכל? אין שום סיבה שיפתחו בחינם.
לא את זה אמרתי, כשאתה אומר שהם נותנים דטה בייס עד 10 ג'יגה, זה בסדר גמור, כי זאת מגבלת גודל, שהיא לגיטימית. אבל לקחת כלי שאמור להיות חלק מהבנייה שלך, וקצת קשה להסתדר בלעדיו, למי שרוצה באמת דטה בייס חכם, תאר לעצמך שהם היו אומרים שמשפט Merge הם לא נותנים בגירסה החינמית, אז בן אדם בונה פרוייקט ופתאום אחרי שנה של בנייה הוא מגלה שהם הסתירו פונקציות מסויימות, ודורשים על זה כסף, זה סוג של טעם רע לדעתי. כי לא מדובר כאן במשהו שהוא באמת נדרש רק לעסקים גדולים כמו גודל הדטה בייס וכדומה, או שימוש מסחרי לעומת שימוש אישי, אלא סתם להציק לך כמפתח שכשתגיע לשלב מספיק מתוחכם בדטה בייס שלך, אז יתפסו אותך בגרון, כשאתה כבר שקוע עמוק בפרוייקט ואין לך דרך חזרה.
אם אתה רוצה לעשות עסק טוב, תן ללקוח הרגשה טובה שהוא שילם לא מאילוץ אלא מבחירה ומרצון, וכשאתה מחדיר מוצר חינמי אתה צריך לעשות חשבון שהלקוח כשיגדל הוא ישלם לך ברצון רב. זה ענין של טעם בעסקים, אני שונא עסקים כמו מד"א שמוציאים כסף מאנשים כשהם תופסים אותם במצוקה, ואם אתה חושב אחרת, אני לא מתווכח  
  
@דוד ל.ט.
למה נראה לך שאתה עובד עם אקסס מחובר לMSSQL ולא עם פיתרון מבית IBM דומה
פשוט כי השיווק של מייקרוסופט היה מכוון תמיד לאזרח הקטן, דרך כלים כמו windows word וכדומה, ולכן הם הצליחו כמו שעלית מצליחה למכור ממתקים למרות שיש הרבה יותר טובים מהם.... לא בגלל שהפתרונות שלהם הכי טובים.....
פורסם במקור בפורום CODE613 ב09/02/2014 20:09 (+02:00)
עדיין לא נכנסתי לעומק של CLR, אבל:
האם ניתן לעשות גם לופים ולפתוח טבלאות בCLR? או שזה מיועד לפונקציות פשוטות יחסית כמו חיבור של מספרים או שליחת SMS דרך WS ?
למעשה הם חסמו כמעט את כל הספריות של דוט נט למעט פירורים קטנים מאוד, מסיבות של אמינות קוד שעשוי לפגוע בדטה בייס (כשיש באג בקוד זה עלול כנראה לתקוע/להשחית את כל המסד נתונים ולכן יש בזה סיכון גבוה אלא אם כן לא הבנתי נכון...) מה שהשאירו למעשה זה את הקרנל של דוט נט בלבד.
ראה כאן את רשימת הספריות המיוחסות המותרות (אגב גם "אורקל" המתחרה נמצאת שם :lol:  :lol:  :lol:  :lol:  :lol:  כשאין ברירה אתה מחזר אחרי האוייב שלך... כרגיל בעולם העסקים)
פורסם במקור בפורום CODE613 ב09/02/2014 02:14 (+02:00)
חד משמעית ב SQL וכבר נימקתי את עצמי כאן עיין עד סוף האשכול.
פורסם במקור בפורום CODE613 ב29/01/2014 23:02 (+02:00)
במסד נתונים רוב המידע נמצא בטבלאות, כלומר מידע מערכת, הטבלאות עצמן השמות שלהן, השדות וכולי, נמצאות בטבלאות מערכת. עדיין לא ברור אם זה באמת האיחסון של המידע הזה, או שזה רק אינטרפייס לתצוגה. בכל אופן כגישה וודאי שאתה צודק, הכל צריך להיות בטבלאות, אין דבר טוב יותר מ SQL כדי לשלוט במידע נקודה.
פורסם במקור בפורום CODE613 ב29/01/2014 08:02 (+02:00)
באשכול הזה היה דיון אודות פונקציה שמייקרוסופט כנראה לא סיפקו במזיד או שלא במזיד. בכל אופן נאלצנו לעשות קוד שיוצר מחרוזת sql כטקסט, ואז מממש אותה.
כמו כל דבר טוב אני עורך את זה כמה פעמים עד להשלמה. כעת ערכתי את הפונקציה (27/01/14 22:13) על מנת לאפשר גם בטריגר של מחיקה, לשמור את כל השדות של הרשומה הנמחקת למי שירצה.
ראשית יש ליצור טבלת לוג כזאת:
CREATE TABLE [dbo].[LogTable](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Content] [nvarchar](max) NULL,
	[TableName] [nvarchar](40) NULL,
	[ColumnName] [nvarchar](50) NULL,
	[RowID] [int] NULL,
	[OldValue] [nvarchar](max) NULL,
	[NewValue] [nvarchar](max) NULL,
	[UserModified] [nvarchar](100) NULL,
	[date] [datetime] NULL,
 CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[LogTable] ADD  CONSTRAINT [DF_Log_date]  DEFAULT (getdate()) FOR [date]
GO
ALTER TABLE [dbo].[LogTable]  WITH CHECK ADD  CONSTRAINT [CK_LogTable] CHECK  (([OldValue]<>[NewValue]))
GO
ALTER TABLE [dbo].[LogTable] CHECK CONSTRAINT [CK_LogTable]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'מאמת שלא נכנסים ערכים שווים לטבלה' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'LogTable', @level2type=N'CONSTRAINT',@level2name=N'CK_LogTable'
GO
לאחר מכן ליצור פונקציה זאת:
CREATE FUNCTION [dbo].[GetSqlStatementToInsertLogTable]
(
	@PROCID int -- משתנה זה מכיל את האידי של הטריגר הוא מוכנס על ידי משתנה מקומי שיש בכל טריגר
)
RETURNS nvarchar(max)
AS
BEGIN
	DECLARE  @TableName sysname ,@Sql nvarchar(max) = ''  , @CurrentRow int = 0 , @CurrentFieldName nvarchar(100)
	-- מאתר את שם הטבלה שמאחוריה עומד הטריגר שביקש את הפונקציה
	select @tablename = object_name(parent_id) 
    from sys.triggers where object_id = @PROCID
	
	-- טבלה המכילה את כל השדות של טבלה נוכחית
	declare @FieldsTable table (ColID int, ColumnName nvarchar(50), TableName nvarchar(50))
	insert into @FieldsTable 
	select  c.column_id as ColID, c.name as ColumnName, t.name as TableName
	from sys.all_columns c
		inner join sys.tables t on t.object_id = c.object_id 
		where c.is_identity = 0  and user_type_id <> 189 and t.name = @tablename -- אין טעם להכניס אידנטיטי כי הוא לא משתנה אף פעם כמו כן סוג חותמת זמן לא שייך לתעד
 
 declare @maxRecords int = (select max (colid) from @FieldsTable)
	declare @str nvarchar(max)
	while  @CurrentRow < @maxRecords 
	BEGIN
    SET @CurrentRow = @CurrentRow + 1
    set @CurrentFieldName = (select ColumnName from @FieldsTable WHERE ColID=@CurrentRow) -- השדה הנוכחי בטיפול
	-- יוצר את האסקיואל שאמור לטפל בכל שדה ושדה והרוצה יעיין בקוד הדק היטב
	set @str = N'select ''' +  @TableName + ''',''' + @CurrentFieldName + ''', d.ID, CONVERT(VARCHAR(max), d.' + @CurrentFieldName + '),  CONVERT(VARCHAR(max), i.' + @CurrentFieldName + '), ''' + SYSTEM_USER + ''' from #deleted d  left join #inserted i on i.ID = d.ID where  i.' + @CurrentFieldName + ' <> d.' + @CurrentFieldName + ' or i.ID is null' + iif(@CurrentRow < @maxRecords , ' union all ', '' )
	set @Sql = CONCAT (@Sql, @str);
	END	
	-- זהו זה
	RETURN @Sql
END
אחרי שיצרנו את הפונקציה יש להכניס את הקוד הבא בכל טריגר (אין צורך לעשות שום שינוי בקוד הוא נכנס כמות שהוא לכל טריגר שבעולם):
SELECT * INTO #inserted
FROM inserted
SELECT * INTO #deleted
FROM deleted 
declare @Sql nvarchar(max)  = dbo.GetSqlStatementToInsertLogTable (@@PROCID)
	insert into LogTable (TableName , ColumnName , RowID , OldValue, NewValue ,UserModified)
	EXECUTE sp_executesql @Sql
שימוש בקוד זה מחייב את המשתמש על סך מיליון שקלים פלוס מע"מ לכל פעולת טריגר... :lol: :lol: :lol: :lol:
פורסם במקור בפורום CODE613 ב27/01/2014 19:45 (+02:00)
Null זה כמו חור שחור בפיזיקה.... :lol:  :lol:  :lol:  :lol:  :lol:  :lol:
Empty , Nothing' Missing כל הדברים האלו לא נראה לי שיש הבדל בעולם הווב.....
פורסם במקור בפורום CODE613 ב29/01/2014 15:57 (+02:00)
הפתרון הסופי הוא שימוש בפוקנצייה CONCAT, תסתכל בקוד של תיעוד שינויים בדטה בייס שהעלתי לכאן.
אין באמת שירשור בSQL.
פורסם במקור בפורום CODE613 ב27/01/2014 21:42 (+02:00)
טוב התשובה היא שצריך להגדיר אותו קודם כמחרוזת אפס.
פורסם במקור בפורום CODE613 ב27/01/2014 16:55 (+02:00)
הנה היום יצא לי להשתמש בזה שוב, והפעם כשאני צריך לקבל רשימה של ערכים שנמצאים בין שני שדות, כלומר יש לי טבלה שמכילה שדה משנה, ושדה עד שנה, כשאני צריך לקבל רשימה של כל השנים אני משתמש בקוד הנפלא הזה:
with cte as
(select c.FromYear  i,ID, ToYear from CaseHandlingDates c
 union all
 select * from (select i+1 i,ID,ToYear from cte ) as c  where  c.i  <= c.ToYear)
 select i , ID , ToYear  from cte order by ID
פורסם במקור בפורום CODE613 ב22/10/2014 12:33 (+03:00)
זה נקרא CTE רקורסיבי, תחביר די מופשט וקצת קשה להבנה אבל שימושי מאוד ורב עוצמה. יש דומים לו בהרבה שפות תיכנות מבחינת עצם הביצוע, אבל ב SQL זה יחסית חדש ונועד לחסוך שימוש גס בלולאה. אני עוד לא הבנתי אותו עד הסוף, מקוה שדוד ל.ט. יכתוב איזה מדריך טוב בנושא...
כאן יש תיעוד רשמי MSDN
כאן יש מדריך בקוד פרוייקט
כל היתר תשאלו את רבי שרגא יהושע העשיל מגוגל :lol:
פורסם במקור בפורום CODE613 ב26/01/2014 09:43 (+02:00)
תוכנה לניהול בית כנסת? :roll:  עושה רושם ש"לנהל" בית כנסת, זה יותר דברים פיזיים מאשר תוכנה, להבדיל מארגונים שרוב העבודה שלהם משרדית, לעולם לא תמצא בית כנסת שיש לו "משרד".
מה שכן יש בבתי כנסת קלאסיים זה מקלט שהומר למחסן שבו יש שש מאות חבילות של נייר טואלט, 2 מגבים, מטאטא אחד שהמקל שלו מתנדנד בתוך החור, ועוד אחד חדש יותר, מדף של סמרטוטים וחומרי ניקוי, ועוד דלי שחור בפינה מלוכלך בחתיכות מלט ונטיפי צבע, שבתוכו שורצים מברג פיליפס, פטיש, ועוד כל מיני ברזלים כגון תומכי מדף שהתעקמו, ובתחתית הדלי פזורים כמה ברגים חלודים (חלקם מילימטריים שאין להם אומים ולא פרפרים...). לשכנע את הגבאי להחזיק שם מחשב??? יכול להיות, בתנאי שיש מקום בדלי... אז אפשר להניח שם שבב שיכול להריץ לינוקס (ואז בכל מקרה אתה לא יכול לעשות את זה עם wpf :lol: )
אז בואו נחשוב על רעיון אחר, אני הייתי הולך על תוכנה חינמית לניהול כלכלת בית (ובשלב הבא גם ניהול שלום בית שנגזר מזה... :lol: ) אגב עם התאמות לציבור החרדי, כגון מעשרות חומש וכדומה, זה דבר שאם הוא יהיה בנוי נכון, הוא יהפוך ללהיט עולמי!!!! באחריות, (ולרחמים, זה יהיה סטרט אפ שלא מבוסס על בטלה...) את זה לעשות אם כבר ב web, כדי ש"באמת" כל העולם יוכל להשתמש, נפתח חשבון גיט האב לפרוייקט (בכלל טוב שיהיה חשבון גיט האב לפורום) ואנשים יתחילו להפגין יכולות. זאת תוכנית שיש לי כבר שנים בראש, עוד לא מצינו תוכנה אמיתית לניהול כלכלת בית, יש כל מיני אקסלים למיניהם וסוגיהם, דברים שלא מחזיקים מים.
אני תורם בלי נדר את כל הארכיטקטורה, אבל בתנאי שיש כאן לפחות עוד 3 אנשים רציניים שמוכנים להשקיע זמן.... מקווה שדברי ייתקבלו בברכה.
פורסם במקור בפורום CODE613 ב21/01/2014 00:18 (+02:00)
ראה כאן עבור על כל המדריך לסידור פקדים, זה יפתח לך את הראש להבין איך הדברים עובדים. ייאמר לשבח wpf שהם חלוצים בעניין הזה של "נזילות פקדים" כפי שהגדיר את זה מתכנת אחד. (הפקדים של wpf הם כמו מים בתוך הפקד האב שלהם, והם נוזליים ומשנים את המיקום/גודל לפי השינויים בגודל הפקד האב.
פורסם במקור בפורום CODE613 ב16/01/2014 13:27 (+02:00)
אשמח לקבל פירוט יותר מלא.
לא הבנתי מה שם הפקד.
כתוב לי את שם הפקד שלך (טופס המשנה)
שם אובייקט המקור (הטופס שיוצג)
שם השדה האב המקשר
שם השדה הצאצא המקשר
ואשנה את הקוד לפי השמות שלך.
פורסם במקור בפורום CODE613 ב16/01/2014 11:13 (+02:00)
בתוך הטופס האב אתה כותב:
with subform
        .SourceObject = "בנקים אנשי קשר"
        .LinkChildFields = "קוד איש קשר"
        .LinkMasterFields = "קוד איש קשר"
        .Visible = True
end with
כאשר בתצוגת עיצוב רגילה אתה יכול לעשות את טופס המשנה ללא אובייקט מקור כלל, ולהפעיל את הקוד בהתקיים אירוע.
פורסם במקור בפורום CODE613 ב15/01/2014 19:20 (+02:00)
רציתי לפתוח בדיון דווקא מסחרי, לגבי המושג סטרט אפ יש בו המון היבטים, אבל בואו נרים את הכפפה, כל אחד מרגיש בסתר ליבו שהשוק הזה סגור בפני חרדים. הסיבה, יש הרבה נימוקים אפשריים, אני אמנה כמה מהם, ואשמח לשמוע דעתם.
אז יש 2 אפשרויות להסביר למה אין חברות סטרטאפ של יזמים חרדים:
א. סיבה ערכית, החרדים מחפשים ברובם פרנסה, ולא מעריצים כסף גדול.
ב. סיבה טכנית/תרבותית, לחרדים יש הרבה פחות חשיפה לעולם שבו יש את התנאים להצמחת סטרט אפ.
הפרטים של סיבה ב' יכולים להיות מגוונים עד אין קץ, החל מחוסר ידע מספיק באנגלית/אין חברים מהצבא שישתתפו בפרוייקט/אין בטחון עצמי מספיק/אין מספיק הזדמנויות להתקשר עם משקיעים/מתחתנים בגיל צעיר וכשמחפשים פרנסה צריך את המטרנה של מחר בבוקר, ואין מספיק זמן פנוי לחלומות גדולים. וכן הלאה כל אחד יכול להעלות סיבות.
יש שיאמרו שזה פשוט ענין של סטטיסטיקה, הואיל ומתכנתים חרדים הם מיעוט באוכלוסיית המתכנתים.
גילוי נאות: לי יש המון סטרטאפים, אבל הם בשלב הרעיון והמחשבה :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :roll: :roll: :roll: :roll: :roll: :roll:
אם תשאלו מנין לי שאין חברות סטרטאפ כאלו, ועוד מעט יקומו כמה מהפורום ויגידו שלהם יש דווקא חברת סטרטאפ שאוטוטו עומדת להימכר לגוגל אלא שעדיין גוגל לא שמעה עליהם, אבל ברור שביום שהם ישמעו על הרעיון, הם פשוט ימתינו בשבע בבוקר ליד הדלת של הבית. התשובה היא מאוד פשוטה, יש בדרך כלל חשיפה עיתונאית לכל סטרט אפ בשלב כלשהו של חייו, למעט אלו שנכשלו כשלון חרוץ עוד באיבם. כחובבן כלכלה, אני קורא הרבה עיתונות כלכלית, ועוד לא יצא לי לקרוא על חרדי שהקים סטרטאפ לחישוב קיצין......
פורסם במקור בפורום CODE613 ב14/01/2014 23:40 (+02:00)
תסתכל בדיפולט ברמת הדטה סט לפעמים הוא לא בדיוק מתואם עם המסד, אגב נראה לי שבמסד הברירת מחדל עובדת קצת שונה ממה שזה נראה, שים לב שמתווסף שם אובייקט לכל הגדרת ברירת מחדל, שזה קצת נראה כמו טריגר. בכל אופן ברור שאחרי עדכון המסד ומשיכת החומר חזרה אתה תראה 0.
פורסם במקור בפורום CODE613 ב14/01/2014 15:02 (+02:00)
דוד למה אתה לא ממליץ על הטאב קונטרול של כרום, שם יש אפשרות לעשות הכל בכל מכל כל, זה ממש מתנהג כמו כרום כולל גרירה אחורה וקדימה, לחצן איקס לסגירה, ואפשר להוסיף שם מה שרוצים.
כבר דובר על זה בפוסט אחר.
פורסם במקור בפורום CODE613 ב09/01/2014 12:49 (+02:00)
ר' קליק, לא תאמין מה קרה, זרח מפרחוני כל האשכול הזה (כנראה שהלקוח שכח מזה, אחרת איך אפשר לשכוח כשמקבלים טלפון בהול כל בוקר "יש לי ג'יבריש בכרטיסי אשראי!!!!"). כיום נתקלתי שוב בשאלה, כדרכי תישאלתי את גוגל באנגלית (כי מי מצפה שמישהו יכתוב תשובות בעברית) וגוגל הפנה אותי לא פחות ולא יותר, לכאן!!
אז התשובה שלך אכן פתרה את הבעיה ויישר כוח.
פורסם במקור בפורום CODE613 ב04/11/2014 13:47 (+02:00)
טעות חמורה!
מע"מ מחושב "מלמטה" או "מלגו" כאחוזים מתוך הסכום לפני המעמ. חישוב של מעמ לפי סכום לפני מעמ בהנחה שהמע"מ הוא 18 אחוז נעשה כך: 100 * 1.18 = 118
והקוד לפי הדרך שלך צריך להיות כך:
double  יחידת_חישוב = סכום_כולל / (1 + שיעור_מעמ );
            return יחידת_חישוב * (שיעור_מעמ * 100);
פורסם במקור בפורום CODE613 ב07/01/2014 16:20 (+02:00)