ארכיון code613m

ארכיון האתר הקודם והחביב קוד-613

1.3k נושאים 9.6k פוסטים
  • שאילתה אקסס

    10
    0 הצבעות
    10 פוסטים
    555 צפיות

    @ארכיטקט

    אם אתה צריך את זה לתצוגה בלבד (ועדיף שכך, כי זה יותר חסכוני לרשום שורה אחת לכל הכנסה שהיא בתשלומים.

    מנסיון, זה תלוי מאד איזה תשלומים. אם זה שיקים,אז אפילו שזה לתצוגה בלבד אני מעדיף לעשות ממש ולא בשאילתא, מהסיבה שלפעמים שיקים חוזרים, ואז צריך להוציא אותם מהסכום הכללי. בעיקרון, גם באשראי זה קורה לפעמים, (שחברת האשראי מבטלת תשלום בודד מתוך סט של תשלומים, ועדיין לא דיברנו שם על ריטיינר).
    דבר נוסף הוא החלוקה של האגורות, לדוגמא: אם יש 100 ש"ח ב3 תשלומים, התשלום הראשון יהיה 33.34 והשאר 33.33, וצריך לזכור לחשבן את זה בשאילתא, דבר נוסף,לפעמים בשיקים יש שיק חריג מבחינת מספר השיק או מבחינת הסכום,לדוגמא: ה33.34 נמצא דווקא בשיק האחרון ולא הראשון.

    אבל האמת היא ש:
    @ארכיטקט

    אם אתה צריך את זה לתצוגה בלבד (ועדיף שכך, כי זה יותר חסכוני לרשום שורה אחת לכל הכנסה שהיא בתשלומים.

    ולכן במקרה של תצוגה בלבד, ארכיטקט צודק לחלוטין. (מלבד שבטבלה השנייה [ללא הקשרי גומלין]) הייתי שם מאה רשומות כדי לא להיות מוגבל עם ה24 תשלומים.
    אם כי ברוב המקרים הלקוח איזה שלב ירצה לעשות עם הנתון הזה משהו אמיתי. - לדוגמא מעקב על ההפקדה של השיקים....
    @ארכיטקט

    recordset עובד יותר מהר משאילתה, אבל מבחינת תחזוקת קוד לפעמים כדאי לעשות sql.

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

    פורסם במקור בפורום CODE613 ב05/01/2014 18:01 (+02:00)

  • 0 הצבעות
    6 פוסטים
    275 צפיות

    בדיוק כמו שעשית רק תמחוק את הקונוורטר ותוסיף מקטע דטה טמפלט או שתשתמש בDisplayMemberPath.

    פורסם במקור בפורום CODE613 ב05/01/2014 14:42 (+02:00)

  • 0 הצבעות
    1 פוסטים
    203 צפיות
    אין תגובות
  • WPF קומבו עם בחירה מרובה

    2
    0 הצבעות
    2 פוסטים
    170 צפיות

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

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

    הנה מה שעשית בלי לוותר על תכונות הקומבובוקס:

    <ComboBox> <ComboBox.Template> <ControlTemplate TargetType="ComboBox"> <Grid> <ToggleButton Margin="193,41,12,96" HorizontalContentAlignment="Right"> <Path x:Name="Arrow" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 4 4 L 8 0 Z" Fill="#FF3C2B2B" Margin="4"> </Path> </ToggleButton> <Popup Margin="193,71,12,18"></Popup> </Grid> </ControlTemplate> </ComboBox.Template> </ComboBox>

    פורסם במקור בפורום CODE613 ב02/01/2014 16:21 (+02:00)

  • 1 הצבעות
    51 פוסטים
    3k צפיות

    @רחמים

    ואל תשכחו את האשכול הזה .....

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

    פורסם במקור בפורום CODE613 ב06/01/2014 01:20 (+02:00)

  • 0 הצבעות
    4 פוסטים
    523 צפיות

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

    פורסם במקור בפורום CODE613 ב02/01/2014 13:29 (+02:00)

  • cross apply sql server

    2
    0 הצבעות
    2 פוסטים
    204 צפיות

    לא התפניתי כעת לבדוק, אבל האתר בקישור בהחלט עושה טוב למתכנת...
    תודה!

    פורסם במקור בפורום CODE613 ב02/01/2014 13:34 (+02:00)

  • פונקציות ב sql server

    4
    0 הצבעות
    4 פוסטים
    295 צפיות

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

    פורסם במקור בפורום CODE613 ב31/12/2013 23:50 (+02:00)

  • WPF עיצוב TabItem Header

    17
    0 הצבעות
    17 פוסטים
    734 צפיות

    בנתיים עברתי על הקישור שהבאתי למעלה וזה מה שיצא, לא כל כך יפה, אשמח לקבל שיפוצים ורעיונות נוספים:

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" x:Class="WpfApplication2.TabWindow" x:Name="Window" Title="TabWindow" Width="432" Height="152"> <Window.Resources> <ControlTemplate x:Key="ScrollViewerTemplate" TargetType="{x:Type ScrollViewer}"> <Grid x:Name="Grid" Background="{TemplateBinding Background}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Rectangle x:Name="Corner" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Column="1" Grid.Row="1"/> <ScrollBar x:Name="PART_HorizontalScrollBar" Cursor="Arrow" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Grid.Column="0" Grid.Row="0" Orientation="Horizontal" ViewportSize="{TemplateBinding ViewportWidth}" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Height="12" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" AutomationProperties.AutomationId="HorizontalScrollBar"/> <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" Margin="12,2,12,0" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Grid.Column="0" Grid.Row="0" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False"/> </Grid> </ControlTemplate> <Style TargetType="TabControl"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TabControl"> <Grid ClipToBounds="True" SnapsToDevicePixels="True" KeyboardNavigation.TabNavigation="Local"> <Grid.ColumnDefinitions> <ColumnDefinition x:Name="ColumnDefinition0"/> <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition x:Name="RowDefinition0" Height="Auto"/> <RowDefinition x:Name="RowDefinition1" Height="*"/> </Grid.RowDefinitions> <ScrollViewer VerticalScrollBarVisibility="Disabled" Template="{StaticResource ResourceKey=ScrollViewerTemplate }" HorizontalScrollBarVisibility="Auto"> <TabPanel x:Name="HeaderPanel" Margin="2,2,2,0" IsItemsHost="True" Panel.ZIndex="1" Grid.Column="0" Grid.Row="0" KeyboardNavigation.TabIndex="1"/> </ScrollViewer> <Border x:Name="ContentPanel" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Grid.Column="0" Grid.Row="1" KeyboardNavigation.DirectionalNavigation="Contained" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local"> <!--<ContentPresenter x:Name="PART_SelectedContentHost" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Content="{TemplateBinding SelectedContent}" ContentSource="SelectedContent" ContentStringFormat="{TemplateBinding SelectedContentStringFormat}" ContentTemplate="{TemplateBinding SelectedContentTemplate}"/>--> </Border> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <LinearGradientBrush x:Key="LightBrush" StartPoint="0,0" EndPoint="0,1"> <GradientBrush.GradientStops> <GradientStopCollection> <GradientStop Color="#FFFFF9E8" Offset="0" /> <GradientStop Color="#FFFFF9E8" Offset="1" /> <GradientStop Color="#FFFFE8A6" Offset="0.5" /> </GradientStopCollection> </GradientBrush.GradientStops> </LinearGradientBrush> <Style TargetType="TabItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TabItem" > <Border x:Name="brdr" Margin="0" Padding="2,0" BorderThickness="1,1,1,0" CornerRadius="4,4,0,0" BorderBrush="#FF304261"> <Border.Background> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="#FFF" Offset="0.0"/> <GradientStop Color="#EEE" Offset="1.0"/> </LinearGradientBrush> </Border.Background> <StackPanel Orientation="Horizontal" > <Image x:Name="Img" Source="{TemplateBinding Tag}" Margin="3" Width="20" Height="20"></Image> <TextBlock Text="{TemplateBinding Header}" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" Margin="5" /> <Path Data="M 0,0 L 8,8 M 0,8 L 8,0" x:Name="btn" Height="8" Margin="3,3,7,3" Visibility="Hidden" Stroke="Gray" StrokeThickness="2" Width="8" /> </StackPanel> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True" > <Setter TargetName="btn" Property="Visibility" Value="Visible" /> <Setter TargetName="brdr" Property="Background" Value="#FFFFF9E8" /> </Trigger> <Trigger Property="IsSelected" Value="True" > <Setter Property="Panel.ZIndex" Value="100" /> <Setter TargetName="brdr" Property="Background" Value="{StaticResource LightBrush}" /> <Setter TargetName="brdr" Property="Margin" Value="-4,-2,-4,0" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid x:Name="LayoutRoot"> <TabControl SelectedIndex="3"> <TabItem Header="TabItem"> <Grid/> </TabItem> <TabItem Header="TabItem"> <Grid/> </TabItem> <TabItem Header="TabItem"> <Grid/> </TabItem> <TabItem Header="TabItem"> <Grid/> </TabItem> </TabControl> </Grid> </Window>

    פורסם במקור בפורום CODE613 ב02/01/2014 20:16 (+02:00)

  • הצעה: פורום חדש: דוגמאות קוד

    9
    0 הצבעות
    9 פוסטים
    508 צפיות

    סתם טיפ: אם יש לכם קודים כל כך מעניינים, מומלץ לפרסמם כ-Gist ב-Github. זה יותר נוח לקריאה וגם אכסון.

    פורסם במקור בפורום CODE613 ב31/12/2013 23:52 (+02:00)

  • WPF ארוע שינוי גובה שורה בדטה גריד

    11
    0 הצבעות
    11 פוסטים
    485 צפיות

    נכון!
    כעת זה עובד,
    יישר כח!

    פורסם במקור בפורום CODE613 ב31/12/2013 13:06 (+02:00)

  • מזל טוב ל 100 נושאים בפורום!!!

    3
    0 הצבעות
    3 פוסטים
    239 צפיות

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

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

    פורסם במקור בפורום CODE613 ב31/12/2013 17:36 (+02:00)

  • בניית מודאלים גנאריים

    12
    0 הצבעות
    12 פוסטים
    499 צפיות

    תשמע, אני ממשיך לעבוד על פיתוח המסד נתונים והממשקים האלו זה ממש כלי נפלא ביותר, אתה יכול לגשת לכל טיפוס לא משנה מה הוא יהיה ויש לי איתו שפה משותפת בזכות הממשק המשותף שיש לו עם אחרים, אתה יכול להכניס למערך שלל של טיפוס שונים העיקר שכולם תחת אותו ממשק ועם כולם אתה יכול לעבוד בלא אובג'קט ממש תענוג.
    אין כמו OOP :smile:

    פורסם במקור בפורום CODE613 ב01/01/2014 21:09 (+02:00)

  • 0 הצבעות
    13 פוסטים
    537 צפיות

    תודה רבה זה ממש טוב!!

    פורסם במקור בפורום CODE613 ב31/12/2013 22:02 (+02:00)

  • sql server COLUMNS_UPDATED function

    23
    0 הצבעות
    23 פוסטים
    1k צפיות

    @רחמים

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

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

    התחושה האישית שלי, שהנושא של UI הוא הרבה יותר נמצא בתהליכי התפתחות מואצים, מאשר המנועים האמיתיים, כגון דטה בייסים, וקוד ליבה. קח את שפת C ושפת SQL מאז שהמציאו אותן, לא נס ליחן ולא כהתה עינן, הן משרתות להערכתי 90 אחוז מכוח המיחשוב ברחבי העולם!!!! כל הפיתוחים שאנחנו רואים לא מפריעים בכלל למערכות קיימות, אלא רק משפרות ומשכללות. מאידך כמה מהמורות ותמורות עובר תחום ה UI בעשרים שנה האחרונות, כל אחד בא ומחסל את מה שעשה זולתו קודם לכן....

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

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

    @ClickOne

    אם כבר, יש אפשרות להפעיל פונקציות CLR שכתובות בC# או VB, אבל זה כבר עניין אחר.
    בכל מקרה השאיפה היא לעשות כמה שיותר בDB. זה נקרא שכבת פלדה.

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

    פורסם במקור בפורום CODE613 ב27/01/2014 15:59 (+02:00)

  • Triggers ב sql server

    2
    0 הצבעות
    2 פוסטים
    254 צפיות

    לדעתי הדי ענייה בDB:
    בקשר למה ההגבלות של הטריגרים אני חושב שאין, והם בד"כ רצויים אלא אם כן רוצים להעביר עומס חישובים מהשרת ללקוחות.
    בקשר לטריגר גלובלי בMSSQL אין כזה דבר. ייתכן שבאחרים יש.

    שים לב, גם ללא הטריגרים היה פונקציות מאוחסנות שהם תחליף להרבה פעולות קוד של צד לקוח.

    פורסם במקור בפורום CODE613 ב25/12/2013 19:28 (+02:00)

  • WPF קינון פקדים בראש שורה בדטה-גריד

    13
    0 הצבעות
    13 פוסטים
    592 צפיות

    יישר גדול ועצום!!
    סוף סוף הגליונות נראים כמו 'בן אדם' :smile:

    פורסם במקור בפורום CODE613 ב05/01/2014 13:45 (+02:00)

  • WPF עיצוב הדטה-גריד

    11
    0 הצבעות
    11 פוסטים
    479 צפיות

    תשמע דוד, זה ממש מדהים הקודים שאתה מביא,
    תודה רבה! :smile:

    פורסם במקור בפורום CODE613 ב06/01/2014 22:36 (+02:00)

  • בעיה מוזרה ב odbc בקישור ל sql server

    4
    0 הצבעות
    4 פוסטים
    304 צפיות

    תנסה להוסיף שדה מסוג timesmtp לא משנה השם שלו.

    השדה הזה מכיל חתימת זמן של העידכון האחרון, ומאפשר לאקסס (מהשאלה שלך אני מבין שזה אקסס) להחליט האם היה עוד מישהו שעידכן לפני שאתה עידכנת, אבל אחרי שאתה קראת לרשומה. [בעיקרון זה כלי שקיים באקסס - קצת מעצבן שאין בקשה או אפשרות לבטל את זה שם - אבל לפחות נותן לך אפשרות לדרוס את הנתונים.] בODBC + אקסס האפשרות לדרוס את הנתונים לא זמינה.

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

    פורסם במקור בפורום CODE613 ב31/12/2013 00:44 (+02:00)

  • WPF שמירת מצב עמודות בדטה-גריד

    10
    0 הצבעות
    10 פוסטים
    441 צפיות

    בסוף חשבתי לעצמי במקום לשים את האחריות על שמירת העמודות במחלקה של הטבלה הגנארית, אני אשים את זה בפקד גליון הנתונים, שהרי הדטה-גריד מופיע בגליון הזה ושמירת מצב העמודות קשור אליו, ובכל פקד יש ארוע לפני ה Finalize שנקרא Unloaded ושם שמתי את הפקודה לשמירת מצב העמודת.

    פורסם במקור בפורום CODE613 ב25/12/2013 12:52 (+02:00)

בא תתחבר לדף היומי!