אתה יכול להעלות תוכן של הPUBLISH?
פורסם במקור בפורום CODE613 ב15/01/2014 00:28 (+02:00)
אתה יכול להעלות תוכן של הPUBLISH?
פורסם במקור בפורום CODE613 ב15/01/2014 00:28 (+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)
הנה הדוגמא... (לקח קצת זמן להגיע לזה, אבל זה מגיע בסוף.)
' קבוע השומר את גירסת המסד האחרונה
Const CurrentVer As Integer = 3
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' שידרוג הDB
UpDb()
'TODO: This line of code loads data into the 'DBDataSet.Demo1' table. You can move, or remove it, as needed.
Me.Demo1TableAdapter.Fill(Me.DBDataSet.Demo1)
End Sub
Sub UpDb()
' הצהרה על קונקשיין
Dim cnn As New SqlClient.SqlConnection
' משיכת מחרוזת החיבור מהגדרות האפליקציה
cnn.ConnectionString = My.Settings.DBConnectionString
' פתיחת מחרוזת החיבור
cnn.Open()
' בדיקה מהגירסת הדאטאבייס האחרונה
Dim verCmd As New Data.SqlClient.SqlCommand("select DbVer From Setting", cnn)
Dim dr As SqlDataReader = verCmd.ExecuteReader()
dr.Read()
Dim ver As Integer = dr.Item(0)
' סגירת הקורא. (לפעמים הוא עושה בעיות לשדרג כשזה פתוח) לכן אני סוגר אותו
dr.Close()
Try
' פתיחת קובץ טקסט מצורף והמרה לשורות במערך
Dim DbUp As Array = Split(My.Computer.FileSystem.ReadAllText(CurDir() & "\DbUp.txt"), vbNewLine)
Dim Row As Array
For Each Line As String In DbUp
'המרת כל שורה למערך המפריד את גירסת המסד והקוד בשביל השידרוג
Row = Split(Line, "|")
' בדיקה אם הגירסה יותר קטנה מהגירסה הנוכחית
If Row(0) > ver Then UpDbSql(Row(1), cnn)
Next
'עידכון הגירסה הנוכחית במסד הלקוח
verCmd.CommandText = "UPDATE Setting SET DbVer = " & CurrentVer
verCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Sub UpDbSql(cmdSql As String, cnn As SqlClient.SqlConnection)
Try
' הרצת הפקודה לשידרוג
Dim cmd As New Data.SqlClient.SqlCommand(cmdSql, cnn)
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
לצערי א"א להעלות לפורום קבצים מעל 256 KB ולכן זה לא עולה.
אז לחצו כאן כדי להוריד את זה מדרופבוקס
משתמשי אקסס:
אני ממליץ לעשות טבלה מקומית ולא לשים את הנתונים בקובץ חיצוני.
קוד הSQL DLL (של ההגדרת נתונים) מעט שונה.
במקום:
CREATE TABLE [dbo].[Table3] ([Id] INT NOT NULL PRIMARY KEY IDENTITY, [LastName] NVARCHAR(50) NULL, [City] INT NULL)
צריך להיות:
CREATE TABLE [Table3] ([Id] COUNTER PRIMARY KEY , [LastName] TEXT(50), [City] INT)
ובמקום:
ALTER TABLE [dbo].[t1] ADD [f1] INT NULL
תשתמשו ב:
ALTER TABLE [t1] ADD COLUMN [f1] INT
זה הכיוון, ואידך זיל גמור.
פורסם במקור בפורום CODE613 ב13/01/2014 01:12 (+02:00)
@ClickOne
כשאתה בוחר את הקובץ בסייר הפיתרון, יש לך למטה הגדרה Copy To Output - תבחר שם Copy If Never - זה יגרום לIDE לא להעתיק אותו כל פעם אלא רק מתי שהוא לא נמצא בתיקיית הEXE.ומה יהיה כאשר אני אוסיף טבלה למסד, הוא לא יעתיק? א''כ אז התוכנה תרוץ עם המסד הישן בלא הטבלה, ואם הוא כן יעתיק לאחר הוספת טבלה אז שוב אני אאבד את הנתונים שבטבלאות אחרות.
אם תשתמש במבנה שידרוג הDB שהצעתי (או אחרים ), אז את השינוי תעשה בDB שלא יועתק, וברגע שתפעיל את הEXE, הוא יזהה שגירסת הDB עם הנתונים האמיתיים שלך לא מעודכנת, וישדרג לך אוטו' את הDB.
מנסיון, עובד!
אם תרצה שאני יעלה דוגמה, אעשה זאת בשמחה!
פורסם במקור בפורום CODE613 ב09/01/2014 22:54 (+02:00)
- כאשר אני מריץ את התוכנית ומזין נתונים שונים בדטה-גרידים ושומר הכל במסד, סוגר פותח שוב הכל מופיע אבל אם אני עורך אי אלו שינויים ב MDF הרי שבפעם הבאה כאשר פותחים את התוכנה כל הנתונים מתאפסים, וזה קורה כי המסד שבתקיית הפלט הוחלף במסד מתקיית הפרוייקט, אז איך אפשר לשמור בכל זאת על כל הנתונים ? להחליף את הקונקשיין ? זה יסבך אתה כל.
תודה לכולם.
כשאתה בוחר את הקובץ בסייר הפיתרון, יש לך למטה הגדרה Copy To Output - תבחר שם Copy If Never - זה יגרום לIDE לא להעתיק אותו כל פעם אלא רק מתי שהוא לא נמצא בתיקיית הEXE.
@רחמים
- נאמר שכבר הלקוח קיבל את התוכנה וכעת הוא רוצה להוסיף למסד עוד טבלה או או להוסיף לטבלה קיימת עוד עמודה וכדומה, הרי אני לא יכול לעשות את זה אצלי ולשלוח לו אלא אני צריך את המסד שלו שכבר מלא בנתונים ושם לערוך שינויים, אז איך אני אכניס את המסד שלו לפרוייקט השמור אצלי ואוסיף לו שם את ההוספות הנ''ל.
כמובן שאת כל זה אפשר לפתור בדרכי הטריקים אבל אני מחפש דרך ישרה ופשוטה, שה VS תוכנן מלכתחילה ללכת בה.
תודה לכולם.
אכן שאלה רצינית איך לטפל במסד נתונים, בפרט בתוכנת מדף זאת שאלה גדולה מאוד, אם רוצים לחסוך קוד, שמעתי פעם שיש פונקציה מוכנה שמשווה בין 2 מסדי נתונים ב sql server אבל לא יודע באמת אם להמר על זה.
במסדי נתונים לא יחסיים הבעיה הזאת לא מתחילה כמובן...
הפיתרון שלי כרגע, זה להחזיק טבלה מפלצתית שמכילה את כל המבנה של מסד הנתונים, זה אומר טבלה של טבלאות, טבלה של שדות, טבלה של מאפיינים (כל מאפיין שהוא לא ב default של המערכת, מקבל שורה שמכילה את שם המאפיין, ערך המאפיין, וקישור לשדה)
להגיד לך שזה ממלא את כל הציפיות שלי, לא ממש, ועל זה נאמר השם יעזור.
בהחלט יש את הפיתרון של ארכיטקט.
יש איזה פיתרון של VS, אבל זה משהו ביחד עם אשף הפריסה שלהם, - לא ממש התעסקתי עם זה.
הפיתרון שלי לעניין:
עשיתי בטבלת הSetting שדה שמחזיק את גירסת המסד האחרונה, במקביל, אני מחזיק קובץ (ובאקסס - טבלה מקומית ולא מקושרת) שמכילה עמודה של גירסה, וכן קוד SQL של שינוי מבני נתונים (נקרא גם DDL). - אתה יכול למצוא את הקוד של שינוי מבני הנתונים כשאתה עורך טבלה במנג'מנט, יש שם אפשרות לראות את הסקריפט SQL שמבצע את השינוי הזה.
אח"כ לכתוב פונקצייה שבודקת בDB בטבלה Setting מה גירסת הDB. במידה וזה קטן מהגירסה הנוכחית (אותה אתה יכול לשמור בהגדרות של התוכנה שלך, או במשתנה סטטי) אני מריץ שאילתת SQL בלופ, ואח"כ מעדכן בטבלה Setting את גירסת הDB החדשה.
זה עובד בהצלחה מדהימה כבר למעלה מ6 שנים, ואני לא חושש כלל להוסיף/ לשנות שדות - וגם להוסיף טבלאות.
לפני שאני ניגש לDB בפעם הראשונה אני מריץ את הפונצייה, ובא לציון גואל.....
בהצלחה!
פורסם במקור בפורום CODE613 ב09/01/2014 14:43 (+02:00)
פירגון ענק לדוד ל.ט. על פירוט הדרכים.
לצערי יש המון חוסר בהירות (גם מצד מייקרוסופט בעצמה) לגבי הDataSet, ודוד ממש הצליח למצות בכמה משפטים דברים שלקח לי המון זמן להבין לבד בצירף בית ההוראה של הרב גוגל :lol: :lol: .
עדיין לא כ"כ מובן למה מייקרוסופט בחרו לפצל את הDataSet ל 3 אובייקטים שונים, (אני מדבר על המרכזיים, ולא על המימוש מאחורה), ולא להשתמש באובייקט אחד כמו בASPX (אני לא מדבר על LTS, אלא אפילו על אובייקט המקשר ישירות לSQL SERVER ואפילו לאקסס. :lol:
פורסם במקור בפורום CODE613 ב08/01/2014 23:07 (+02:00)
את הקוד של קליק וואן עוד לא ניסתי, יש לי קושי להשתמש ברפרנסים ופוקציות וינדווס. גם בגלל החילוק בין 32 ל 64 ביט.
בנוסף, אם באמת אתה סוגר את האקסס גם ל64 ביט (או לא סוגר אותו בכלל :lol: :lol: :lol: ), יש לך דרך להשתמש בפונקציות API, אתה צריך רק להוסיף
הגדרה בהצהרה שזו פונקצייה בטוחה.
להגדרה קוראים: PtrSafe
ולפיכך ההצהרה תהיה:
Private Declare PtrSafe Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
כדי שלא תצטרך לנהל גירסאות 32 ו64 ביט, תוכל להשתמש בהצהרה בתחביר הבא:
#If VBA7 Then
Private Declare PtrSafe Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
#Else
Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
#End If
כמובן שההצהרה יושבת בראש המודול. הסולמית בהתחלה מאפשרת לIF לרוץ אפילו שהוא לא בתוך פונקצייה.
מידע נוסף לגבי פונקציות API בסביבת אופי 64 ביט תוכל למצוא כאן
פורסם במקור בפורום CODE613 ב07/01/2014 22:32 (+02:00)
את הקוד של קליק וואן עוד לא ניסתי, יש לי קושי להשתמש ברפרנסים ופוקציות וינדווס. גם בגלל החילוק בין 32 ל 64 ביט.
זה עובד גם על 64 ביט ללא רפרנסים.(לא אקסס 64 ביט, אלא ווינדוס 64 ביט - באקסס אם אתה מקמפל ל64 ביט אתה יכול להשתמש בזה רק ב64 ביט, ואפילו סגירה באקסס 32 ביט לא תיפתח כמו שצריך באקסס 64 ביט - לזה אתה מתכוון?).
את הקוד הנ"ל אני כתבתי על ווינדוס 64 ביט.
פורסם במקור בפורום CODE613 ב07/01/2014 22:06 (+02:00)
ספציפית לגבי האשראי אני זוכר שדיברתי איתם בעבר ע"ז, והם נתנו לי רשימה של כל הכרטיסים לפי הID שמתקבל באחת הפוזיציות. (זה היה הפיתרון שלהם)
בכל מקרה:
'API שהופך קידוד ווינדוס לדוס - מתאים להמרה בשביל הקובץ מסב
Private Declare Function CharToOemA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
' API הפוך. ממיר לווינדוס
Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Public Function test()
Dim t As String
t = "ˆ—˜‰‰ƒ ˆ˜‹€˜™‰ "
OemToCharA t, t
'צריך להשתמש בStrReverse כדי להפוך את הסטרינג
MsgBox StrReverse(t)
End Function
פורסם במקור בפורום CODE613 ב07/01/2014 16:43 (+02:00)
מה ההבדל בין פונקיציית ()IsNothing לבין השוואה עם שני אופרטורים Is Nothing
אם תפתח ברפלקטור תראה שאכן אין הבדל. אם כי יש שמספרים שיותר נוח Is Nothing בגלל השלילה Not.
התשובה מתייחסת לדוטנט (אם כי יכול להיות שגם בVBA זה נכון, אבל שם באמת יש פונקצייה מאחורה, ולא סתם בדיקה של Is Nothing)
מקור התשובה כאן
פורסם במקור בפורום CODE613 ב07/01/2014 00:18 (+02:00)
בנוגע לשינויים של קליק וואן, אל תשכח שיש גם ערכי תאריכים אפשריים, וכן ערכי אותיות למה לא? שמת לב שלא הגדרתי טיפוס לערך. אז מה שעלול לעמוד לנו לרועץ זה רק ערכים ריקים, כי הפונקציה הזו נועדה בכל מקרה להחזיר ערך כלשהו ככל הניתן (השירות שהפונקציה הזאת נותנת הוא למקרים בהם יש לך 1 מתוך 2 שדות, ופעמים הרבה שאחד השדות ריקים והלא רוצים אנו בפונקציה)
אתה צודק, בטעות הסתכלתי על הקוד שרחמים העלה ושם הייתה החזרה של ערך: (As Integer)
Public Shared Function Min(ByVal val1 As Integer, ByVal val2 As Integer) As Integer
פורסם במקור בפורום CODE613 ב07/01/2014 00:10 (+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)
לא נראה לי הפונקציה שלך כל כך טובה,
כי היא יכולה להחזיר רק אחת משני אפשריות - אמת או שקר, אבל באמת כאשר משווים בין שני דברים יש שלוש אפשרויות - או שהים שווים או הראשון גדול או השני גדול, ולכן בפונקציית COMPARE בדוטנט יש החזרה של 0 או 1 או -1.
הפונצייה של ארכיטקט מצויינת!
שים לב שהוא לא ניסה בפונקצייה לקבל בוליאני אם הראשון גדול מהשני, אבל לקבל את המספר היותר קטן.
במקרה הגרועששניהם שווים, הוא יחזיר את אחד מהשניים... וזה ממש לא משנה איזה!
פורסם במקור בפורום CODE613 ב06/01/2014 23:33 (+02:00)
אבי אתה יכול להעלות תמונה?
לא ראיתי מסך כזה בדוגמא. (אא"כ אנחנו מדברים על קובץ אחר)
פורסם במקור בפורום CODE613 ב05/03/2017 14:03 (+02:00)
סליחה על ההקפצה.
בדוגמא של אקסס יש "בדיקת קובץ מס"ב" ושם ארבע שדות, סה"כ סכום בקובץ, סה"כ סכם מחושב בקובץ, סה"כ תנועות, סה"כ תנועות מחושב.
מה זה תנועות מחושב? קשור להמרת מט"ח?תודה
זה הסכום המחושב שייכנס לבנק.
לא קשור להמרת מט"ח.
פורסם במקור בפורום CODE613 ב04/03/2017 23:02 (+02:00)
וואי וואי אתה מזכיר נשכחות....
האמת שבינתיים כלום
אבל אולי באמת... (זה יהיה אחרי שאני יסיים עם הפרוייקט של יצירת 30 שעות ביממה במקום ה24 הנוכחיות. נכתב באווירת השבוע הקרוב....)
פורסם במקור בפורום CODE613 ב04/03/2017 22:56 (+02:00)
בעזרת ה' אני מתכנן היום להעלות לפורום את מפת הדרכים לתוכנית (המשמעותית) הראשונה שלי בWPF [בזכות דוד ל.ט, ארכיטקט, רחמים ואחרים כאן בפורום :lol: :lol: :lol: )
שם ככל הנראה תהיה אפשרות גם של יצירת קובץ מס"ב, וגם ריטיינר להו"ק אשראי.
כמובן שהתוכנה תהיה בלמידה כאן בפורום (לא איך עושים מס"ב, אלא איך מממשים את מה שאני יודע לעשות באקסס - בWPF), ולכן אני משער שיהיה מעניין.
מה שמסתמן עכשיו זה שיהיו שם גם שליחת מיילים, SMS וVMS [הודעות קוליות אוטומטיות].....
ClickOne
פורסם במקור בפורום CODE613 ב19/01/2014 21:01 (+02:00)