דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. איפה כדאי לשמור את המסד

איפה כדאי לשמור את המסד

מתוזמן נעוץ נעול הועבר ארכיון code613m
18 פוסטים 5 כותבים 1.0k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • clickoneC מנותק
    clickoneC מנותק
    clickone
    כתב ב נערך לאחרונה על ידי
    #9

    הנה הדוגמא... (לקח קצת זמן להגיע לזה, אבל זה מגיע בסוף.)

    ' קבוע השומר את גירסת המסד האחרונה
    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 ולכן זה לא עולה.
    אז לחצו כאן כדי להוריד את זה מדרופבוקס

    משתמשי אקסס:

    1. אני ממליץ לעשות טבלה מקומית ולא לשים את הנתונים בקובץ חיצוני.

    2. קוד ה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)

    אין טסט כמו פרודקשן.

    המייל שלי urivpn@gmail.com

    תגובה 1 תגובה אחרונה
    2
    • רחמיםר מנותק
      רחמיםר מנותק
      רחמים מורחק
      כתב ב נערך לאחרונה על ידי
      #10

      זה נראה ממש מצויין!
      יישר כח גדול!

      מאיפה אני לוקח את נוסח הסקיפט שיוצר את כל הטבלאות והשאילתות במסד?
      ב VS 2013 ראיתי שיש T-SQL ושם יש את הסקריפט של כל טבלה, אבל ב VS 2010 איפה זה נמצא?
      כמו כן מי שמשתמש באקסס איפה נמצא הסקריפט?

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

      תגובה 1 תגובה אחרונה
      0
      • clickoneC מנותק
        clickoneC מנותק
        clickone
        כתב ב נערך לאחרונה על ידי
        #11

        @רחמים

        זה נראה ממש מצויין!
        יישר כח גדול!

        מאיפה אני לוקח את נוסח הסקיפט שיוצר את כל הטבלאות והשאילתות במסד?
        ב VS 2013 ראיתי שיש T-SQL ושם יש את הסקריפט של כל טבלה, אבל ב VS 2010 איפה זה נמצא?
        כמו כן מי שמשתמש באקסס איפה נמצא הסקריפט?

        אני משתמש בVS2012 ושם יש באמת גם עידכון עפ"י השלבים הבאים:
        שלב 1:

        UpdateSQLStep1.png
        ואח"כ שלב 2:

        UpdateSQLStep2.png
        אח"כ ייפתח חלון עם קוד 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)

        אין טסט כמו פרודקשן.

        המייל שלי urivpn@gmail.com

        תגובה 1 תגובה אחרונה
        1
        • clickoneC מנותק
          clickoneC מנותק
          clickone
          כתב ב נערך לאחרונה על ידי
          #12

          למי ששם לב בשורה 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)

          אין טסט כמו פרודקשן.

          המייל שלי urivpn@gmail.com

          תגובה 1 תגובה אחרונה
          1
          • רחמיםר מנותק
            רחמיםר מנותק
            רחמים מורחק
            כתב ב נערך לאחרונה על ידי
            #13

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

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

            תגובה 1 תגובה אחרונה
            1
            • clickoneC מנותק
              clickoneC מנותק
              clickone
              כתב ב נערך לאחרונה על ידי
              #14

              אתה יכול להעלות תוכן של הPUBLISH?

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

              אין טסט כמו פרודקשן.

              המייל שלי urivpn@gmail.com

              תגובה 1 תגובה אחרונה
              0
              • רחמיםר מנותק
                רחמיםר מנותק
                רחמים מורחק
                כתב ב נערך לאחרונה על ידי
                #15

                הנה מסד עם שתי טבלאות בלא תוכן ויש קשרי גומלין בינהם:

                /****** Object:  ForeignKey [FK_contacts_catgores]    Script Date: 01/15/2014 00:40:30 ******/
                IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_contacts_catgores]') AND parent_object_id = OBJECT_ID(N'[dbo].[contacts]'))
                ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [FK_contacts_catgores]
                GO
                /****** Object:  Table [dbo].[contacts]    Script Date: 01/15/2014 00:40:30 ******/
                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[contacts]') AND type in (N'U'))
                DROP TABLE [dbo].[contacts]
                GO
                /****** Object:  Table [dbo].[catgores]    Script Date: 01/15/2014 00:40:30 ******/
                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[catgores]') AND type in (N'U'))
                DROP TABLE [dbo].[catgores]
                GO
                /****** Object:  Table [dbo].[catgores]    Script Date: 01/15/2014 00:40:30 ******/
                SET ANSI_NULLS ON
                GO
                SET QUOTED_IDENTIFIER ON
                GO
                IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[catgores]') AND type in (N'U'))
                BEGIN
                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 
                (
                	[ID] ASC
                )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
                )
                END
                GO
                /****** Object:  Table [dbo].[contacts]    Script Date: 01/15/2014 00:40:30 ******/
                SET ANSI_NULLS ON
                GO
                SET QUOTED_IDENTIFIER ON
                GO
                IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[contacts]') AND type in (N'U'))
                BEGIN
                CREATE TABLE [dbo].[contacts](
                	[ID] [int] IDENTITY(1,1) NOT NULL,
                	[name] [nchar](10) COLLATE Hebrew_CI_AS NULL,
                	[Lname] [nchar](10) COLLATE Hebrew_CI_AS NULL,
                	[catgory] [int] NULL,
                 CONSTRAINT [PK_contacts] PRIMARY KEY CLUSTERED 
                (
                	[ID] ASC
                )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
                )
                END
                GO
                /****** Object:  ForeignKey [FK_contacts_catgores]    Script Date: 01/15/2014 00:40:30 ******/
                IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_contacts_catgores]') AND parent_object_id = OBJECT_ID(N'[dbo].[contacts]'))
                ALTER TABLE [dbo].[contacts]  WITH CHECK ADD  CONSTRAINT [FK_contacts_catgores] FOREIGN KEY([catgory])
                REFERENCES [dbo].[catgores] ([ID])
                GO
                IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_contacts_catgores]') AND parent_object_id = OBJECT_ID(N'[dbo].[contacts]'))
                ALTER TABLE [dbo].[contacts] CHECK CONSTRAINT [FK_contacts_catgores]
                GO
                

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

                תגובה 1 תגובה אחרונה
                0
                • clickoneC מנותק
                  clickoneC מנותק
                  clickone
                  כתב ב נערך לאחרונה על ידי
                  #16

                  תבדוק רק שהוא לא מוחק לך את התוכן של הטבלאות אם הלקוח כבר מילא נתונים

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

                  אין טסט כמו פרודקשן.

                  המייל שלי urivpn@gmail.com

                  תגובה 1 תגובה אחרונה
                  2
                  • רחמיםר מנותק
                    רחמיםר מנותק
                    רחמים מורחק
                    כתב ב נערך לאחרונה על ידי
                    #17

                    בדקתי ובאמת הנתונים נמחקים, מעיון בקובץ ה SQL עולה שקודם כל הוא עושה DROP לכל הטבלאות והקשרי גומלין ורק אחר כך יוצר טבלה אחר טבלה בתנאי שהיא לא קיימת כבר, כך שגם אם נדלג על פקודות ה DROP לא יתעדכנו הטבלאות הקיימות.
                    באפשריות של הפאבליש יש הגדרה שלא יעשה DROP לכל האובייקטים הישנים כך שאפשר מלכתחילה ליצור קובץ סקריפט ללא DROP אבל עדיין כל הפקודות בסקריפט הם של יצירת טבלה חדשה אם היא לא קיימת, אבל אם היא קיימת הוא לא יגע בה אף שחסר לה עמודות.
                    יש דרך להמיר את פקודות ה CREATE TABLE ל ALTER TABLE ?

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

                    תגובה 1 תגובה אחרונה
                    0
                    • clickoneC מנותק
                      clickoneC מנותק
                      clickone
                      כתב ב נערך לאחרונה על ידי
                      #18

                      תחליף את 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)

                      אין טסט כמו פרודקשן.

                      המייל שלי urivpn@gmail.com

                      תגובה 1 תגובה אחרונה
                      1

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

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום