לא.
תחליף את ctl לשם הפקד.
הלוואי שבדוטנט היה את זה

פורסם במקור בפורום CODE613 ב19/01/2014 11:51 (+02:00)
הפורום כעת לקריאה בלבד, לקריאה נוספת.
לא.
תחליף את ctl לשם הפקד.
הלוואי שבדוטנט היה את זה

פורסם במקור בפורום CODE613 ב19/01/2014 11:51 (+02:00)
אתה יכול לדעת כמה עמודים יש רק כשתסיים להדפיס את ירושלים ולא לפני בגלל שיש פקדים (כמו דוחות משנה וטקסט) שיכולים "לגדול" ככה שא"א לנחש מראש כמה תתפוס ירושלים.
ולכן תצטרך לשמור במשתנה זמני בדוח כמה עמודים עברת ע"י שימוש ב2 אירועים:
באירוע הראשון של מעבר עמוד לספור עמודים, ובאירוע השני של כותרת תחתונה עיר לאפס שוב את המשתנה ל1.
מה שגורם שתוכל לכתוב ירושלים עמוד 1 וכו' וזה יאפס לכל איזור מחדש, אבל לא מתוך כמה.
אם יש כאן מישהו שיודע איך אפשר לדעת מתוך כמה או דרך אחרת (ארכיטקט?) אשמח גם לשמוע....
פורסם במקור בפורום CODE613 ב16/01/2014 12:50 (+02:00)
לא MDE? (זה כמו לקמפל, אם כי יודעי דבר מספרים שמייקרוספט עצמם כן יכולים לראות את הקוד).
אם אתה רוצה, אתה יכול לבחור לנעול את הקוד VBA ע"י סיסמא. (זה אומר שעדיין יוכלולשחק עם העיצוב של הטפסים - אם גם את זה אתה לא רוצה, תבחר בMDE)
תיגש בעורך הקוד למעלה לTools, אח"כ תבחר בתפריט ב"שם הפרוייקט" Properties, ושם אתה צריך לסמן בV ולתת סיסמא.
מצ"ב תמונה

בהצלחה!
פורסם במקור בפורום CODE613 ב09/01/2014 15:08 (+02:00)
תחליף את CREATE
CREATE TABLE [dbo].[catgores](
[ID] [int] IDENTITY(1,1) NOT NULL,
[catrory] [nchar](10) COLLATE Hebrew_CI_AS NULL,
CONSTRAINT [PK_catgores] PRIMARY KEY CLUSTERED
ב ALTER,
תמחק את הסוגריים ותוסיף ADD, ואל תשכח להוציא את כל השדות שכבר קיימים....
בדוגמא להלן אני מניח שהיה רק שדה ID ולכן אני מסיר אותו ומשאיר את השאר
ALTER TABLE [dbo].[catgores]
ADD [catrory] [nchar](10) COLLATE Hebrew_CI_AS NULL
פורסם במקור בפורום CODE613 ב19/01/2014 00:38 (+02:00)
למי ששם לב בשורה 22 יש את הקוד הבא:
:on error exit
:on error exit
נהפך ל:
<img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="מופתע">n error exit
מצחיק שהוא מפרש את נקודותיים O לסמיילי מופתע.
פשוט לא הבנתי מתי זה נדחף לקוד. לתשומת לב מנהלי האתר. (או המפתחים בPHP שמסתובבים כאן) - כשעושים הדגשות וצבעים בקוד זה לא נתפס, אז אם אפשר לפחות שלא יהרוס לנו את הקוד......
פורסם במקור בפורום CODE613 ב14/01/2014 21:48 (+02:00)
זה נראה ממש מצויין!
יישר כח גדול!מאיפה אני לוקח את נוסח הסקיפט שיוצר את כל הטבלאות והשאילתות במסד?
ב VS 2013 ראיתי שיש T-SQL ושם יש את הסקריפט של כל טבלה, אבל ב VS 2010 איפה זה נמצא?
כמו כן מי שמשתמש באקסס איפה נמצא הסקריפט?
אני משתמש בVS2012 ושם יש באמת גם עידכון עפ"י השלבים הבאים:
שלב 1:

ואח"כ שלב 2:

אח"כ ייפתח חלון עם קוד SQL כזה:
/*
Deployment script for C:\USERS\CLICKONE\DOCUMENTS\VISUAL STUDIO 2012\PROJECTS\WPFSYNAGOGUE\WPFSYNAGOGUE\DB.MDF
This code was generated by a tool.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
*/
GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
SET NUMERIC_ROUNDABORT OFF;
GO
:setvar DatabaseName "C:\USERS\CLICKONE\DOCUMENTS\VISUAL STUDIO 2012\PROJECTS\WPFSYNAGOGUE\WPFSYNAGOGUE\DB.MDF"
:setvar DefaultFilePrefix "C_\USERS\CLICKONE\DOCUMENTS\VISUAL STUDIO 2012\PROJECTS\WPFSYNAGOGUE\WPFSYNAGOGUE\DB.MDF_"
:setvar DefaultDataPath "C:\Users\ClickOne\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\v11.0\ "
:setvar DefaultLogPath "C:\Users\ClickOne\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\v11.0\ "
GO
: on error exit
GO
/*
Detect SQLCMD mode and disable script execution if SQLCMD mode is not supported.
To re-enable the script after enabling SQLCMD mode, execute the following:
SET NOEXEC OFF;
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
BEGIN
PRINT N'SQLCMD mode must be enabled to successfully execute this script.';
SET NOEXEC ON;
END
GO
USE [$(DatabaseName)];
GO
IF (SELECT OBJECT_ID('tempdb..#tmpErrors')) IS NOT NULL DROP TABLE #tmpErrors
GO
CREATE TABLE #tmpErrors (Error int)
GO
SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
BEGIN TRANSACTION
GO
PRINT N'Altering [dbo].[TblDonation]...';
GO
ALTER TABLE [dbo].[TblDonation]
ADD [cNow] DATETIME NULL;
GO
IF @@ERROR <> 0
AND @@TRANCOUNT > 0
BEGIN
ROLLBACK;
END
IF @@TRANCOUNT = 0
BEGIN
INSERT INTO #tmpErrors (Error)
VALUES (1);
BEGIN TRANSACTION;
END
GO
IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
PRINT N'The transacted portion of the database update succeeded.'
COMMIT TRANSACTION
END
ELSE PRINT N'The transacted portion of the database update failed.'
GO
DROP TABLE #tmpErrors
GO
PRINT N'Update complete.'
GO
שם תחפש את הקוד שמשנה את הטבלה. (בד"כ בשינוי מתחיל בALTER ובטבלה חדשה מתחיל בCREATE).
לגבי אקסס לא ידוע לי מקום מסויים שבו נמצא הקוד, אם כי הקוד מאד דומה, בשינוי קל (וכמו שכתבתי בהודעה המקורית). - אם תהיה דרישה אני ישתדל להעלות קוד שלוקח טבלה והופך אותה לקוד SQL DDL באקסס.
פורסם במקור בפורום CODE613 ב14/01/2014 21:41 (+02:00)
מה ההבדל בין פונקיציית ()IsNothing לבין השוואה עם שני אופרטורים Is Nothing
אם תפתח ברפלקטור תראה שאכן אין הבדל. אם כי יש שמספרים שיותר נוח Is Nothing בגלל השלילה Not.
התשובה מתייחסת לדוטנט (אם כי יכול להיות שגם בVBA זה נכון, אבל שם באמת יש פונקצייה מאחורה, ולא סתם בדיקה של Is Nothing)
מקור התשובה כאן
פורסם במקור בפורום CODE613 ב07/01/2014 00:18 (+02:00)
If value1 > value2 Or IsNull(value1) Or IsMissing(value1) Or value1 = Empty Then
יש אגב פונקצייה מאד נפוצה שתפקידה להחזיר ערך בוליאני אם הערך ריק או NULL. היא מתמודדת יפה עם כל טיפוסי המשתנים הרגילים.
קוראים לה IsNothing, ואני מצרף אותה לתועלת מי שלא מכיר.
בדוטנט באחת הגירסאות הם הכניסו אותה פנימה (לפחות בVB)
Public Function IsNothing(varToTest As Variant) As Integer
' Tests for a "logical" nothing based on data type
' Empty and Null = Nothing
' Number = 0 is Nothing
' Zero length string is Nothing
' Date/Time is never Nothing
IsNothing = True
Select Case VarType(varToTest)
Case vbEmpty
Exit Function
Case vbNull
Exit Function
Case vbBoolean
If varToTest Then IsNothing = False
Case vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency
If varToTest <> 0 Then IsNothing = False
Case vbDate
IsNothing = False
Case vbString
If (Len(varToTest) <> 0 And varToTest <> " ") Then IsNothing = False
End Select
End Function
פורסם במקור בפורום CODE613 ב07/01/2014 00:06 (+02:00)
דבר שבאמת הייתי משנה בגלל הטענה שלך זה:
במקום:
If value1 > value2
הייתי כותב:
If value1 >= value2
אבל זה באמת תלוי בארכיטקט.
האם ידוע למישהו אם יש פונקציה מובנית ב vb6 שמחזירה ערך נמוך מבין שניים??? כמו Math.Min בדוט נט....
הפיתרון הגאוני שלי הוא בינתים ככה:Function GetMinValue(value1, value2) If value1 > value2 Or IsNull(value1) Or IsMissing(value1) Or value1 = Empty Then GetMinValue = value2 Else GetMinValue = value1 End If End Function
הייתי משנה את:
Or IsNull(value1) Or IsMissing(value1) Or value1 = Empty
ב:
Not IsNumeric(value1)
הפונקצייה IsNumeric מחזירה לך בוליאני אם הערך הוא מספר (מכל סוג), וגם אם לא הגדרת סוג בvalue1 ובטעות נכנס טקסט, זה יחזיר false משא"כ הפונקצייה שלך.
פורסם במקור בפורום CODE613 ב06/01/2014 23:55 (+02:00)
תלוי מה המטרה של הפנקציה.
אם המטרה שלך לדעת אם זה שווה או גדול או קטן, ובכל מקרה אתה מבצע משהו אחר, אז באמת אתה צודק.
כאן, אתה רואה לפי הטיפוס שהפונקצייה שארכיטקט כתב שזה המספר, ובהמשך הפונקצייה אתה רואה שהוא מחזיר את הערך הקטן הממשי,ולא 0 או 1 או -1.
משמע, שהוא רוצה לדעת מי יותר קטן ופשוט לעבוד עם המספר הזה "מהקופסא". בכזה מקרה לא רלוונטי אם זה שווה, כי המטרה של הפונקצייה זו התוצאה ללא קשר לדרך.
פורסם במקור בפורום CODE613 ב06/01/2014 23:50 (+02:00)
נתחיל לאט.
קודם כל הקוד הזה: כדי להפוך את השם של המשלם מהסוף להתחלה. (בגלל בDOS הופך את העברית, אני שולח אותה הפוך ואז מקבל את זה ישר.)
public string InverseText(ref string sText)
{
int i = 0;
string S2 = null;
for (i = Strings.Len(sText); i >= 1; i += -1) {
S2 = S2 + Strings.Mid(sText, i, 1);
}
return S2;
}
או בVB:
Public Function InverseText(ByRef sText As String) As String
Dim i As Integer
Dim S2 As String
For i = Len(sText) To 1 Step -1
S2 = S2 & Mid(sText, i, 1)
Next
InverseText = S2
End Function
אני מקווה להספיק בעז"ה להעלות הערב גם את הפונקצייה המרכזית של השירשור קובץ מסב.
תהנו!
פורסם במקור בפורום CODE613 ב07/01/2014 00:23 (+02:00)
יצא לי לכתוב בסוף שבוע שעבר תוכנית קטנה ללקוח בWINFORM.
התוכנית ממירה קובץ אקסל לתבנית מיוחדת שהלקוח צריך להכניס לאיזו מערכת שלו.
(דרך אגב, את הקריאה של האקסל ביצעתי עם ExcelDataReader, מומלץ לקריאה מקבצי אקסל ללא תלות באופיס)
במהלך כתיבת לולאת הFOR, הייתי צריך לבדוק כמה דברים, ואם משהו לא התקיים, פשוט לא לבצע, אלא להמשיך לאיבר הבא במערך.
דא עקא, שהסירבול עם הIFים המקוננים פשוט שיגע אותי, וחיפשתי דרך יותר קצרה.
ואז, מצאתי. אפשר להשתמש בContinue For, זה פשוט ממשיך לאיבר הבא.
דוגמא:
If tmp.Length = 0 Then Continue For
מישהו יודע איך ממשים את זה בVB6 או VBA?
פורסם במקור בפורום CODE613 ב05/01/2014 23:05 (+02:00)
אם אתה צריך את זה לתצוגה בלבד (ועדיף שכך, כי זה יותר חסכוני לרשום שורה אחת לכל הכנסה שהיא בתשלומים.
מנסיון, זה תלוי מאד איזה תשלומים. אם זה שיקים,אז אפילו שזה לתצוגה בלבד אני מעדיף לעשות ממש ולא בשאילתא, מהסיבה שלפעמים שיקים חוזרים, ואז צריך להוציא אותם מהסכום הכללי. בעיקרון, גם באשראי זה קורה לפעמים, (שחברת האשראי מבטלת תשלום בודד מתוך סט של תשלומים, ועדיין לא דיברנו שם על ריטיינר).
דבר נוסף הוא החלוקה של האגורות, לדוגמא: אם יש 100 ש"ח ב3 תשלומים, התשלום הראשון יהיה 33.34 והשאר 33.33, וצריך לזכור לחשבן את זה בשאילתא, דבר נוסף,לפעמים בשיקים יש שיק חריג מבחינת מספר השיק או מבחינת הסכום,לדוגמא: ה33.34 נמצא דווקא בשיק האחרון ולא הראשון.
אבל האמת היא ש:
@ארכיטקט
אם אתה צריך את זה לתצוגה בלבד (ועדיף שכך, כי זה יותר חסכוני לרשום שורה אחת לכל הכנסה שהיא בתשלומים.
ולכן במקרה של תצוגה בלבד, ארכיטקט צודק לחלוטין. (מלבד שבטבלה השנייה [ללא הקשרי גומלין]) הייתי שם מאה רשומות כדי לא להיות מוגבל עם ה24 תשלומים.
אם כי ברוב המקרים הלקוח איזה שלב ירצה לעשות עם הנתון הזה משהו אמיתי. - לדוגמא מעקב על ההפקדה של השיקים....
@ארכיטקט
recordset עובד יותר מהר משאילתה, אבל מבחינת תחזוקת קוד לפעמים כדאי לעשות sql.
נראה לי, (אבל אני לא בטוח לגמרי) שrecordset יוצר בסופו של תהליך שאילתת יצירה או עידכון לפי העניין, אבל באמת זה רץ יותר מהר משאילתא... (לפחות זוהי התחושה)
פורסם במקור בפורום CODE613 ב05/01/2014 18:01 (+02:00)
מדובר בטבלה קיימת כך שאין לי את האופציה כבר ביצירת השורה ליצור אירוע שיצור שורות כמספר התשלומים
לא הבנתי, מדובר בטבלה שמכילה תשלומים, ועכשיו אתה משנה את המבנה במקום שתהיה שורה אחת אתה רוצה לפצל לX שורות? (באותה טבלה או טבלת משנה)
תצטרך ליצור שגרת אירוע חיצונית (חד פעמית כנראה), שפותחת את הטבלה הראשונה, ומוסיפה את הנתונים בטבלה השנייה
אתה יכול להשתמש בקוד הבא:
dim rs as recordset
dim subrs as recordset
set rs=currentdb.openrecordset("select * from tbl1")
set subrs=currentdb.openrecordset("select * from tbl2")
dim i as integer
do until rs.eof
for i=1 to rs!PayCount
subrs.addnew
' כאן תוסיף את הנתונים לטבלת המשנה - או לטבלה הראשית. אל תשכח להוסיף את ה ID של הטבלה הראשית
subrs!bla=1 ' לדוגמא:
subrs!id=rs!id ' וזה דוגמא של משתנה שנלקח מהטבלה השנייה
subrs.update
next i
rs.movenext
loop
ההערה בקוד יצאה קצת משובשת בגלל האנגלית, אבל אני משוכנע שתבין.
פורסם במקור בפורום CODE613 ב05/01/2014 08:52 (+02:00)
@דוד ל.ט.
המעלות של דוט נט:
- שפות: הכי טובות בעולם, כל הזמן משתפרות (כן, יש שיפור בשפה בכל עדכון של הפרימוורק).
- פרימוורק: מטורף ללא תחרות.
- פקרטיקות תכנות, וצורת עבודה מאוד ברורה, עם כללים מנחים. מאוד קל לנחש "איך כדאי לעשות" (לאפוקי PHP למשל).
- הIDE הטוב ביותר.
- אינטגרציה הכי חלקה עם כל קומפוננטה אחרת בפלפורמות הייעודיות.
אני באמת שלא רוצה להתחיל לעשות השוואות (עלויות שרת, עלויות פרוייקט, עלויות תוספות נוספות של קודים בדוטנט), אבל רק על קצה המזלג:
- ראית את הסינטקס של PHP5.5?
- יצא לראות לך פריימורקים שכתובים ב-PHP?
- אתה מדבר על "שפת הסקריפט" של PHP. אבל אתה שוכח שאף אחד לא מתכנת אתרים ככה. כולם (אולי לא כולם.. :?: ) מתכנתים עם פלטפורמה מסויימת (אם זה WordPress א Yii, Zend וכו'). ככה שיש לך שמה בסיס כתיבה מסויים וגם צורת כתיבה עם סטנדרטים מוגדרים מראש. ככה שכל דבר שכתוב, הוא יהיה חייב להיות כתוב שמה או שמה. אין פה משחקים.
- שמעת על PhpStorm? ה-IDE המשוכלל ביותר שיצא לי להתקל בו. כל מה שרק מתכנת Web צריך, יש לו שמה ב-built-in. (טרמינל, REST API, LESS, SASS, ועוד המון המון המון פיצ'רים שעושים את החיים ממש קל, ולאו דווקא לשפת השרת, אלא גם לפיתוח Front).
- לא מבין מה הסעיף הזה אומר, אבל אל תשכח שהסביבה הנכונה והבריאה (והזולה !) של PHP זה לינוקס.. וזה היתרון מאוד משמעותי על שרתי הווינדוז.
יקיר.
דוד ל.ט. מדבר על נושא מאד פשוט.
אנחנו לא מדברים על אתר תדמית, אלא על אפליקצייה עסקית שרצה בWEB.
אני אתן דוגמא לפרוייקט שכתבתי ללקוח שלי, מערכת בקרה ותיעוד מכירות למשווקים של 012.
בכזה מקרה אתה צריך לעצב בעצמך את הDB, את הטבלאות וסוגי הנתונים, את קשרי הגומלין והטריגרים וכו' -- לא מדובר על משהו גנרי שאתה יכול למשוך ולשחק עם תבניות.
מערכת משתמשים: ישר מהקופסא, הלקוח רוצה להוסיף אובייקט סילברלייט, רמת האבטחה כבר בפנים מתוך האתר, עם אינטגרציה מעולה.
הגישה לחלקים באתר: אתה לא צריך לכתוב שורת קוד אחת, פשוט להכנס לניהול, (או לערוך את web.config), להגדיר מי או איזה קבוצות יכולות או לא לגשת לתיקייה מסויימת, וזהו. זה עובד מהקופסא. (אני מצפה ממך עכשיו לכתוב לי בתגובה שיש לך כבר קלאס מוכן עם כל הניהול הזה, אבל תבין שכאן יש מערכת כללים מאד ברורה, שעובדת תמיד, גם אם אני לוקח פרוייקט שהיה אצל מתכנת אחר אני לא צריך לשאול אותו מה הוא עשה [במידה והוא אכן נצמד לצורת העבודה והכתיבה התקנית], ואילו אצלך מי שיחליף אותך בפרוייט מסויים, יצטרך לנבור בקלאס כדי להבין מה היה שם. אין תקןמסויים או דרך חיים שבה רוב המתכנתים עובדים.
עלויות שרת: כאחד שמחזיק כיום יותר משרת אחד אני יודע בבירור שההבדל לא כזה משמעותי, גם עסק קטן, שצריך לבחור לעסק שלו אפליקציה עסקית שרצה וצריך להחליט האם הוא הולך על PHP או ASPX ההפרש הוא בסביבות 200-300 ש"ח לשנה. לא פושטים את הרגל מזה. באחריות גמורה אני אומר לך שעסקים גדולים שצריכים להחזיק VPS, גם אם ההבדל שם הוא 300 ש"ח לחודש (והוא לא!), זה לא נורא, כי הוא עסק גדול, זה נבלע בהוצאות שלו (בד"כ עסק בסדר גודל כזה הוצאות התקשורת שלו בכללי מגיעות לאלפי ש"ח בחודש).
עלויות פרוייקט: אתה מתכוון ברצינות? בד"כ מי שכותב לעסק שלו אפליקציה עסקית לא יוכל להשתמש בכל החינמיים, וגם לא בWordPress עם שינויים. תקן אותי אם אני טועה. הוא יצטרך המון קאסטמיזציה, שזה עולה המון! (אתה יודע בעצמך כמה עולה שעת מתכנת PHP מוכשר כמוך
)
קודים נוספים של דוטנט: אתה מוזמן לספר על תכונה מסויימת שלאמצאת לה פיתרון חינמי בדוטנט, וכן מצאת לה פיתרון חינמי בPHP, אני משוכנע שאין הרבה. - ואתה יודע מה, גם זה סוג של פיתרון. אם אני יצטרך מחלקה מסויימת וזה יהיה קיים רק בPHP בחינם, אז אני יקח אותה, ישים על השרת שלי, (כי IIS יודע להריץ PHP אם מגדירים אותו נכון, משא"כ אתה, בחיים (למעט אם תשתמש במונו, שזה לא רץ ממש מהקופסא) לא תוכל להריץ קוד של דוטנט מתוך apache אם הוא רץ על לינוקס, ואם הPHP רץ על Windows, מה מקום יש לטיעונך הראשון על עלויות השרת? ואכמ"ל.) ואח"כ יפנה לקוד הPHP כדי להריץ אותו מהASPX. אתה בעיקרון לא יכול לעשות זה זה בלינוקס מהסיבה שכתבתי.
דבר נוסף, כשאתה מדבר על קודים שעולים כסף, אני מניח שאתה מדבר על טלריק, devexpress ודומיהם, אם לזה כוונתך, נראה לי שכדאי שתוריד אותה, בגלל שאני לא מאמין שקיימים פרוייקטים חינמיים בסדר גודל כזה בPHP. (אני מתכוון לחבילות מסודרות ולא שתביא לי עכשיו 300 חבילות שאם נרכיב אותם ביחד תהיה לנו חבילה מקסימה כמו הנ"ל, כי את זה יש גם בASPX.) מה גם שחלק מהפתרונות שהבאת (ZEND לדוגמא) גם עולים כסף.
בסוף, אני בטוח שתביא לי דוגמא מYII, למען האמת זה פריימוורק שמעניין אותי לבדוק, ועליו נכון לרגע זה אין לי תשובה, וגם יכול להיות שלא תהיה לי תשובה בעתיד.
ככה שכל דבר שכתוב, הוא יהיה חייב להיות כתוב שמה או שמה. אין פה משחקים.
זהו שבASPX אין שמה או שמה... ואתה לא צריך להכיר כמה מערכות כדי לבחור את הטובה ביותר.
מתנצל על התגובה המאד ארוכה, תם אך כנראה עדיין לא נשלם, והנלע"ד כתבתי.
פורסם במקור בפורום CODE613 ב08/01/2014 22:52 (+02:00)
@דוד ל.ט.
מה שהתנסית (אני ממש לא חושב שהיה לך מספיק זמן וכח לנסות. אחרת לא היית יודע היום איך עושים טבלה באקסס :))
מבטיח שניסיתי המון. בא לא נשכח שגם כיום אני עדיין עובד עם דוטנט במקביל לאקסס, וזמן? אוהו... היו לילות ללא שינה

@דוד ל.ט.
לא מצאתי איננה ראיה, בפרט אם אני פה ליד ואומר לך שהתנסיתי להיפך.
אין שום הבדל בדוט נט אם אתה כעת בWEB או בWINFORMS לעניין הנתונים.
לא אמרתי שלא מצאתי, אמרתי שמצאתי, וזה קשה ולא נוח.
אני יודע שגם אתה יודע שיש הבדל מהותי בין WEB לWINFORM בנושא הנתונים אם אתה גורר אובייקטים. אם אתה כותב בשני המקרים קוד כדי להתחבר לנתונים, באמת אין הבדל, אלא שאז לדעתי אתה מפספס את הקלות והפשטות שבה ניתן להתחבר לנתונים (לפחות בASPX), למעט מקרי קיצון שבהם אתה צריך לכתוב קוד בשביל שאילתא מעט מורכבת. (למרות שגם בזה הצלחתי די יפה עם LinqToSql)
@דוד ל.ט.
בא נגיד ככה, בדוט נט, חייבים להשקיע בלימוד הרבה הרבה. וזה משתלם ומהר.
מסכים עם כל מילה!
פורסם במקור בפורום CODE613 ב08/01/2014 23:18 (+02:00)
נניח שביקשו ממכם לכתוב תוכנה לניהול (של מה? כל מה שתרצו... מצידי אפילו כמה בלטות יש בבית וכמה בכל חדר, העיקר שיהיה עם יותר מטבלת נתונים אחת)...
באיזה פלטפורמה תעדיפו להשתמש? ולמה?
שימו לב! לא שאלתי מה הלקוח רוצה, לא שאלתי מה באופנה, ולא .... ולא.... רק במה אתם תעידפו להשתמש (אפילו בסתר ליבכם כדי שלא יהיו פדיחות :lol: )
אפשר לענות יותר מתשובה אחת עם יתרונות וחסרונות לכל תשובה.
אני יתחיל.
הכי כיף לכתוב תוכנית מונחית נתונים באקסס. למה? בניגוד לכל התשובות ששמעתם, או שסיפרתם לחברים שלכם (וצחקתם עליהם) , אני אוהב את אקסס בגלל כמה דברים.
1.כל הטופס מונחה לנתונים, ונכון שהוא מגביל אותי לטבלה אחת שמקושרת, אבל זה מה שיש ברוב המקרים (למעט טפסי משנה, שגם את זה פתרנו עם הטפסי משנה). מאד מעיק שמייקרוסופט לא חשבו לעשות טופס בסיס לWINFORM או לWPF עם היכולת לשאוב את כל הנתונים ממשתנה קונקשיין סטרינג אחד מרכזי בתוכנית, ואז לבחור במאפיינים של טופס איזה טבלה, או בונה SQL, ויאלה, להתחיל לגרור שדות לטופס. למה למען ה' כל פעם אני צריך לגרור 8 אובייקטים אם אני עם DATASET, או להשתמש בקוד, או באובייקט של LINQ אם אני בWEB? ולמה לכל COMBOBOX אני צריך עוד פעם עוד אדפטר, ועד ביינדיג, ועוד... ועוד... למה????
נו, אז תגידו, מה אתה לא מבין שכדי לנצל את היכולות המדהימות של הדוטנט אתה צריך לעבוד קשה????
וכאן אני שואל, בואו תספרו לי איזה יכולות מיוחדות אנחנו מנצלים כשאנחנו כותבים עם הדוטנט? וח"ו אני לא מזלזל, אבל באפליקציית נתונים אתה יותר עובד מאשר מנצל את היכולות. (סוד קטן: כשאני באקסס וצריך יכולת מסויימת בדוטנט, אני כותב DLL עם INTEROP ומתחבר אליו מהאקסס.)
המסקנה שלי מהדוטנט היא שמישהו (אולי אני? התחלתי עם משהו, אבל צריך זמן... [תסכימו שמוזר שאין עדיין אף אחד שהרים את הכפפה הזו. לפחות לא משהו שאני ראיתי.]) צריך לקום וליצור טמפלט בדוטנט שפחות או יותר מממש את היכולות של אקסס מבחינת הטפסים, ואז פשוט לרשת ממנו בכל הטפסים. - אגב מייקרוסופט ניסתה לממש את זה ב lightswitch, לא ברור לי מה עלה בגורלו של הכלי. אבל שם באמת השמירה והמחיקה היו מאוד פשוטים וקשורים זה לזה. המעצבן בlightswitch היה שזה היה סיוט לכתוב לו מסכים לפרוייקט DB קיים, וברוב היית צריך "לבנות" מחדש את הDB. אם יש למישהו מושג מה עלה בגורל הכלי הזה, אשמח לשמוע.... :?:
2. בעייה נוספת זה השדות המחושבים. (חסיד WPF: עכשיו לחשוב בראש שלך: "מה הוא מקשקש, ברור שבWPF אפשר לעשות שדה מחושב עם ביינדיג נכון" - אתה צודק) שבאקסס פשוט תענוג, ובדוטנט? טוב, אני לא רוצה לעשות לכם רע, בואו נדלג.
3. פונקציות בתוך שאילתא: זה פשוט מעצבן: חוץ מאקסס א"א לעשות פונקציה בתוך שאילתא. לדוגמא: אם אני רוצה עמודה מחושבת בשאילתא שתחזיר TRUE אם יש קובץ תמונה בתיקייה מסויימת שהשם של הקובץ הוא הID בסיומת JPG, ולסנן רק את מי שיש לו קובץ מקביל, אני לא יכול. באקסס כן. -- טוב, גם בLINQ אפשר לעשות את זה... אבל לך תכנס לקוד כדי לכתוב שאילתא בלינק, ואח"כ תשלוט על השמירה, ומתי היא נעשית וכו' וכו' וכו.
4. ו... הדוחות. אחרי כל המערכות דוחות שראיתי, עדיין לא מצאתי משהו פשוט טוב, ונותן תחושה יפה ומקצועית כמו האקסס. יש דומה, יש כמעט, וכבר שנינו: "לא דומה, לא כמעט, אקסס"
כל זה נכון לקובץ אקסס מקומי, בהתחברות לSQL SERVER מאד קשה לעבוד עם ODBC אם כי אם רוצים זה אפשרי (יש לי פרוייקט די גדול באקסס + SQL SERVER + ODBC ) יש שם 110 טבלאות וכ120 טפסים.
פרוייקטים שכתבתי:
2 תוכנות מדף, באחת 450 מסכים ולמעלה מ180 טבלאות. מכילה כ30000 (שלושים אלף) שורות קוד. - באקסס עם DLL'S שכתובים בדוטנט ומחוברים, וכן עם גישה דרך SOAP לWebService, והשנייה כנ"ל רק קצת יותר קטנה (כ70 טפסים).
התוכנה שלעיל עם הSQL SERVER.
כמה תוכנות בWINFORM ביניהם קטלוג תמונות עם הזמנות. = עם DB.
כמה בWEB, ביניהם מערכת למשווקים של 012.
עדיין, ולמרות כל החסרונות (ויש הרבה כאלו) הכלי המועדף עלי זה אקסס, ולמרות (אולי בגלל) שאני יושב גם על הדוטנט מספיק זמן...
אז מה איתכם?
פורסם במקור בפורום CODE613 ב01/01/2014 02:07 (+02:00)
שכבת הפלדה של הנתונים יכולה לכלול את הדטה ביס שיכיל נתונים בלבד ועוד כמה מחלקות קוד שיטפלו בנתונים, כך שזה יחסוך לזה המון זמן לנסות לעשות כל דבר בתוך ה SQL, תעשה בקוד ונגמר הסיפור. וכך גם לא תאבד את ההפרדה בין הממשק לשכבת הנתונים.
לא. - שים לב למה שארכיטקט הסביר - בצדק:
@ארכיטקט
שכבת לוגיקת הנתונים צריכה להיות עצמאית לגמרי, זה לא משנה מה הקליינט, להיפך בארגון שרוב הליבה שלו היא לוקיגת נתונים, הכל צריך להיות סגור בתוך הדטה בייס, בשביל מה יש דטה בייס???? הרי הכל אפשר לעבוד בעצם עם קובצי טקסט או XML ולעשות את כל הניתוח בקוד... :lol: כמו שהיה לפני 40 וחמישים שנה. הרעיון של דטה בייס זה ליצור שכבת פלדה יצוקה של נתונים, שתהווה את היסוד של הבינה העיסקית, ועליה אתה יכול לבנות כמה UI שרק תרצה ובאיזו טכנולוגיה שתבחר. אז קליק וואן באמת צודק כשאמר שאני צודק... :lol: :lol: :lol:
אם כבר, יש אפשרות להפעיל פונקציות CLR שכתובות בC# או VB, אבל זה כבר עניין אחר.
בכל מקרה השאיפה היא לעשות כמה שיותר בDB. זה נקרא שכבת פלדה.
פורסם במקור בפורום CODE613 ב27/01/2014 08:19 (+02:00)
לא.
ארכיטקט צודק.
תמיד מה שאפשר בDB עדיף שייעשה שם ולא בקוד.
בחברות הגדולות יש DBA, שזו בדיוק העבודה שלו.
הכי הגיוני לעשות טבלאות הסטורייה וכו כטריגר. (אני בעוונות עדיין עושה בקוד - בגלל אקסס)
פורסם במקור בפורום CODE613 ב26/01/2014 19:54 (+02:00)