Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

VB.NET 2010 Εικόνα απο MS Access

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 11-11-2011, 19:43. Υπάρχουν 29 απαντήσεις.
Σελίδα 2 από 2 (30 εγγραφές)   < 1 2
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-11-2011, 01:26 68046 σε απάντηση της 68045

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Το παρακάτω παράδειγμα θα σου κάνει SELECT από την βάση με κάποιο ID που θέλεις και στο row που θα σου φέρει θα σου κάνει ενημέρωση (UPDATE) της εικόνας. Με αυτόν τον τρόπο θα μπορείς να κάνεις και μαζικά updates στην βάση. Κάθε Data adapter έχει Select, Insert, Delete και Update commands.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Private Sub UpdateImage(ByVal RecordID As Integer)
            Dim ImageColumnName As String = "OLE_OBJ"
            Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Vangelis\Documents\MyDB.accdb")
            Dim da As OleDb.OleDbDataAdapter
            Dim dt As DataTable
            Dim image As Image = image.FromFile("C:\Users\Vangelis\Pictures\Desert.JPG")
            Dim bytes() As Byte = Conversion(Of AClass).Serialize(New AClass("JPG", image))
            con.Open()
    
            da = New OleDb.OleDbDataAdapter("SELECT * FROM IMAGES WHERE ID = " & RecordID, con)
            dt = New DataTable
    
            da.Fill(dt)
            da.Dispose()
            con.Close()
    
            dt.Rows(0).Item(ImageColumnName) = bytes
    
            da.UpdateCommand = New OleDb.OleDbCommand("UPDATE IMAGES SET " & ImageColumnName & " = AByteArray WHERE ID = ID", con)
            da.UpdateCommand.Parameters.Add("AByteArray", OleDb.OleDbType.VarBinary)
            da.UpdateCommand.Parameters("AByteArray").SourceColumn = ImageColumnName
    
            da.UpdateCommand.Parameters.Add("ID", OleDb.OleDbType.Integer)
            da.UpdateCommand.Parameters("ID").SourceColumn = "ID"
            da.UpdateCommand.Parameters("ID").SourceVersion = DataRowVersion.Original
    
            Dim iUpdated As Integer = da.Update(dt)
    
            If iUpdated > 0 Then
                Debug.WriteLine(iUpdated.ToString)
            End If
    
            dt.Dispose()
        End Sub
  •  05-11-2011, 11:00 68048 σε απάντηση της 68046

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Ευχαριστώ πολύ! :)

    Βλέπω ότι έκτος απο τα "Select, Insert, Delete και Update" commands που ανέφερες, υπάρχει και το "Where" στον κώδικα σου.

    Και απότι κατάλαβα το Where καθιστά άχρηστο τον κώδικα για ψάξιμο που έχω γράψει ε?

        Public Sub doSearchDBforOneResult(ByVal AccessDataSet As DataSetByVal dsTable As StringByVal strDatabaseItem As StringByVal MaxDBRows As IntegerByVal ComparingString As StringByRef ResultRow As IntegerOptional ShowMessage As Boolean = TrueOptional SecondComparingStr As String = ""Optional SecondDBitem As String = "")
     
            Dim j As Integer = 0
            Do Until ResultRow > 0
    begin:
                If j <= MaxDBRows Then
                    If AccessDataSet.Tables(dsTable).Rows(j).Item(strDatabaseItem).ToString.ToLower <> ComparingString.ToLower Then
                        j += 1
     
                    Else
                        If ShowMessage = True Then
                            MsgBox("Found 1 possible match!"MsgBoxStyle.Information)
                        End If
     
                        If SecondDBitem <> "" And SecondComparingStr <> "" Then
                            If AccessDataSet.Tables(dsTable).Rows(j).Item(SecondDBitem).ToString.ToLower <> SecondComparingStr.ToLower Then
                                j += 1
                                GoTo begin
                            Else
                                ResultRow = j
                                Exit Do
                            End If
     
                        Else
                            ResultRow = j
                            Exit Do
     
                        End If
     
                    End If
                Else
                    If ShowMessage = True Then
                        MsgBox("Unable to find any results!"MsgBoxStyle.Critical)
                    End If
                    ResultRow = -1
                    Exit Do
                End If
            Loop
     
        End Sub
    )

    και για πολλά results είχα γράψει αυτό:
    (
        Public Sub doSearchDBforAllResults(ByVal AccessDataSet As DataSetByVal dsTable As StringByVal strDatabaseItem As StringByVal MaxDBRows As IntegerByVal ComparingString As StringByRef ResultRows As ListBoxOptional ShowMessage As Boolean = TrueOptional SecondCompStr As String = ""Optional SecondDBitem As String = "")
     
            Dim j As Integer = 0
            Dim Result() As String
     
            Do Until j > MaxDBRows
                If j <= MaxDBRows Then
                    If AccessDataSet.Tables(dsTable).Rows(j).Item(strDatabaseItem).ToString.ToLower <> ComparingString.ToLower Then
                        j += 1
                    Else
                        If ShowMessage = True Then
                            MsgBox("1st Found 1 possible match!"MsgBoxStyle.Information)
                        End If
     
                        If ResultRows.Items.Count > 0 Then
                            ReDim Preserve Result(Result.Length)
                        Else
                            ReDim Result(0)
                        End If
                        ''''entry
                        Result(Result.Length - 1) = j
                        ResultRows.Items.Add(j)
                        j += 1
     
                    End If
                End If
            Loop
     
            If SecondCompStr <> "" And ResultRows.Items.Count > 0 Then
                Dim NewResults() As String
                j = 0
                ResultRows.Items.Clear()
                For n = 0 To Result.Length - 1
                    If AccessDataSet.Tables(dsTable).Rows(Result(n)).Item(SecondDBitem).ToString.ToLower = SecondCompStr.ToLower Then
                        If ShowMessage = True Then
                            MsgBox("2nd Found 1 possible match!"MsgBoxStyle.Information)
                        End If
     
                        If ResultRows.Items.Count > 0 Then
                            ReDim Preserve NewResults(NewResults.Length)
                        Else
                            ReDim NewResults(0)
                        End If
     
                        'MsgBox("n=" & n & vbCrLf & "result(n)=" & Result(n) & vbCrLf & "NewResultsLength=" & NewResults.Length & vbCrLf & "Result.Length=" & Result.Length)
                        NewResults(NewResults.Length - 1) = Result(n)
                        ResultRows.Items.Add(NewResults(NewResults.Length - 1))
                    End If
                Next
            End If
     
        End Sub
    )

    Τώρα που υπάρχει το Where όμως, μπορώ να γράψω απλώς (Where FirstName= "Onoma;" LastName = "Epi8eto") σωστά?


  •  05-11-2011, 12:02 68049 σε απάντηση της 68048

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Ναι, και επίσης: Δεν βάζουμε goto ποτέ και δεν χρειάζεται να κάνεις redim (0) ένα array, Δήλωσε το έτσι: Dim Result(-1) As String και δεν θα είναι ποτέ Nothing απλά θα έχει length 0.

    Όσον αφορά τα Select statements σου λύνουν τα χέρια πχ.

    SELECT [Field1],[Field2] ή * FROM Table1
    WHERE Field1 = kati
    AND field10 = kati1 
    OR field11 = kati2
    AND field12 IN (1,3,4,5,6)

    κλπ κλπ.

     

  •  05-11-2011, 12:30 68051 σε απάντηση της 68049

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Ευχαριστώ για τις πληροφορίες :)

    ένα πράγμα μόνο, τo goto δεν το χρησιμοποιώ πολύ, αλλά μερικές φορές είναι απαραίτητο. Δεν βλέπω τον λόγο να μην το χρησιμοποιήσω ποτέ..


    Τώρα, έχω γράψει τον εξής κώδικα για ψαχτίρι:

        Private Sub tmrSearch_Tick(sender As System.Object, e As System.EventArgsHandles tmrSearch.Tick
            Try
     
                If pbLoading.Value < pbLoading.Maximum Then
                    pbLoading.Value += 1
                Else
                    tmrSearch.Enabled = False
                    Dim LastName As String = ""
                    Dim FirstName As String = ""
                    Dim ResultRow As Integer = -1
     
                    If SearchType.ToLower = "criminals" Then
     
                        If txtSearchName.Text.Contains(","Then
                            LastName = txtSearchName.Text.Substring(0, txtSearchName.Text.IndexOf(","))
                            FirstName = txtSearchName.Text.Substring(txtSearchName.Text.IndexOf(",") + 2)
                        Else
                            LastName = txtSearchName.Text
                        End If
     
                        lstResultRows.Items.Clear()
                        Call doSearchDBforAllResults(AccessDataSet, "FBICriminalsTable""Last Name", MaxDBRows, LastName, lstResultRows, False, FirstName, "First Name")
     
                        If lstResultRows.Items.Count = 0 Then
                            MsgBox("Unable to find any results!"MsgBoxStyle.Critical)
                        End If
     
                        If lstResultRows.Items.Count = 0 Then
                            txtSearchName.Text = ""
                            txtSearchAlias.Text = ""
                            txtSearchAdress.Text = ""
                            txtSearchPostalCode.Text = ""
                            dtpBirthDateFrom.Text = Today
                            dtpBirthDateTo.Text = Today
                            cbSearchSkinTone.Text = ""
                            txtSearchHairColour.Text = ""
                            cbSearchHasCriminalRecord.Text = ""
     
                            btnSearch.Enabled = True
                            btnSearch.Text = "&Search"
                            pbLoading.Value = 0
                            pbLoading.Visible = False
                            Exit Sub
                        End If
     
                        If lstResultRows.Items.Count = 1 Then
                            gbProfile.Visible = True
                            pic.Image = Image.FromFile(My.Application.Info.DirectoryPath & "\Data\Criminal Database\" & AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("ID") & " " & AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("First Name") & " " & AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Last Name") & "\pic.jpg")
                            rtbName.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Last Name") & ", " & AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("First Name")
                            rtbAliases.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Aliases")
                            rtbBirthday.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Birthday")
                            rtbSkinTone.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Skin Tone")
                            rtbHairColour.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Hair Colour")
     
                            ViewedClearance = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("ViewedClearance")
                            If SecurityClearanceLevel >= ViewedClearance Then
                                rtbAdresses.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Known Adresses")
                                rtbCriminalRecord.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Criminal Record")
                                rtbKnownAssociates.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Known Associates")
                                rtbGeneralInfo.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("General Information")
                                rtbFamilyTree.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Family Tree")
                                rtbMaritalStatus.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Merital Status")
                                rtbEducation.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Education")
                                rtbBloodType.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Blood Type")
                                rtbRhesus.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Rhesus")
                                rtbHeight.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Height")
                                rtbNationality.Text = AccessDataSet.Tables("FBICriminalsTable").Rows(lstResultRows.Items(0)).Item("Nationality")
                            Else
                                rtbAdresses.Text = "Classified"
                                rtbCriminalRecord.Text = "Classified"
                                rtbKnownAssociates.Text = "Classified"
                                rtbGeneralInfo.Text = "Classified"
                                rtbFamilyTree.Text = "Classified"
                                rtbMaritalStatus.Text = "Classified"
                                rtbEducation.Text = "Classified"
                                rtbBloodType.Text = "Classified"
                                rtbRhesus.Text = "Classified"
                                rtbHeight.Text = "Classified"
                                rtbNationality.Text = "Classified"
     
                            End If
                        Else
                            lstResultNames.Visible = True
                            For m = 0 To lstResultRows.Items.Count - 1
                                Dim NeededRow As Integer = 0
                                Dim result As String = ""
                                Dim Name As String = ""
                                Dim Birthday As String = ""
                                Dim SkinTone As String = ""
                                Dim Nationality
                                Name = doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBICriminalsTable""First Name", lstResultRows.Items(m)) & " " & doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBICriminalsTable""Last Name", lstResultRows.Items(m))
                                Nationality = doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBICriminalsTable""Nationality", lstResultRows.Items(m))
                                Birthday = doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBICriminalsTable""Birthday", lstResultRows.Items(m))
                                SkinTone = doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBICriminalsTable""Skin Tone", lstResultRows.Items(m))
                                lstResultNames.Items.Add(Name & ", Nationality: " & Nationality & ", Birthday: " & Birthday & ", Skin Tone: " & SkinTone)
                            Next
                        End If
     
                    ElseIf SearchType.ToLower = "agents" Then
     
                        If txtSearchName.Text.Contains(","Then
                            LastName = txtSearchName.Text.Substring(0, txtSearchName.Text.IndexOf(","))
                            FirstName = txtSearchName.Text.Substring(txtSearchName.Text.IndexOf(",") + 2)
                        Else
                            LastName = txtSearchName.Text
                        End If
     
                        lstResultRows.Items.Clear()
                        Call doSearchDBforAllResults(AccessDataSet, "FBIAgentsTable""Last Name", MaxDBRows, LastName, lstResultRows, False, FirstName, "First Name")
     
                        If lstResultRows.Items.Count = 0 Then
                            MsgBox("Unable to find any results!"MsgBoxStyle.Critical)
                        End If
     
                        If lstResultRows.Items.Count = 0 Then
                            txtSearchName.Text = ""
                            txtSearchAlias.Text = ""
                            txtSearchAdress.Text = ""
                            txtSearchPostalCode.Text = ""
                            dtpBirthDateFrom.Text = Today
                            dtpBirthDateTo.Text = Today
                            cbSearchSkinTone.Text = ""
                            txtSearchHairColour.Text = ""
                            cbSearchHasCriminalRecord.Text = ""
     
                            btnSearch.Enabled = True
                            btnSearch.Text = "&Search"
                            pbLoading.Value = 0
                            pbLoading.Visible = False
                            Exit Sub
                        End If
     
                        If lstResultRows.Items.Count = 1 Then
                            gbProfile.Visible = True
                            pic.Image = Image.FromFile(My.Application.Info.DirectoryPath & "\Data\Agent Database\" & AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("ID") & " " & AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("First Name") & " " & AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Last Name") & "\pic.jpg")
                            rtbName.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Last Name") & ", " & AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("First Name")
                            rtbAliases.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Aliases")
                            rtbBirthday.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Birthday")
                            rtbSkinTone.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Skin Tone")
                            rtbHairColour.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Hair Colour")
     
                            ViewedClearance = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("ViewedClearance")
                            If SecurityClearanceLevel >= ViewedClearance Then
                                rtbAdresses.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Known Adresses")
                                rtbCriminalRecord.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Criminal Record")
                                rtbKnownAssociates.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Known Associates")
                                rtbGeneralInfo.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("General Information")
                                rtbFamilyTree.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Family Tree")
                                txtSecurityClearance.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Security Clearance")
                                rtbDivision.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Division")
                                rtbSupervisor.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Supervisor")
                                rtbMaritalStatus.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Merital Status")
                                rtbEducation.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Education")
                                rtbNationality.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Nationality")
     
                                'Current Missions
                                If AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Current Missions") <> "0" Then
                                    rtbCurrentMissionsID.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Current Missions")
                                Else
                                    rtbCurrentMissionsID.Text = ""
                                End If
                                Dim MissionName As String = ""
                                Dim MissionRow As Integer
                                lstCurrentMissionsNames.Items.Clear()
                                If rtbCurrentMissionsID.Text <> "" Then
                                    For j = 0 To rtbCurrentMissionsID.Lines.Count - 1
                                        Call doSearchDBforOneResult(MissionAccessDataSet, "FBIMissionsTable""Mission ID", MissionMaxDBRows, rtbCurrentMissionsID.Lines(j), MissionRow, False)
                                        Call doReturnStrFromDB(MissionMaxDBRows, MissionAccessDataSet, "FBIMissionsTable""Mission Name", rtbCurrentMissionsID.Lines(j), MissionRow, MissionName)
                                        lstCurrentMissionsNames.Items.Add(MissionName)
                                    Next
                                End If
     
                                'Past Missions
                                If AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Past Missions") <> "0" Then
                                    rtbPastMissionsID.Text = AccessDataSet.Tables("FBIAgentsTable").Rows(lstResultRows.Items(0)).Item("Past Missions")
                                Else
                                    rtbPastMissionsID.Text = ""
                                End If
                                Dim PastMissionName As String = ""
                                Dim PastMissionRow As Integer
                                lstPastMissionsNames.Items.Clear()
                                If rtbPastMissionsID.Text <> "" Then
                                    For j = 0 To rtbPastMissionsID.Lines.Count - 1
                                        Call doSearchDBforOneResult(MissionAccessDataSet, "FBIMissionsTable""Mission ID", MissionMaxDBRows, rtbPastMissionsID.Lines(j), PastMissionRow, False)
                                        Call doReturnStrFromDB(MissionMaxDBRows, MissionAccessDataSet, "FBIMissionsTable""Mission Name", rtbPastMissionsID.Lines(j), PastMissionRow, PastMissionName)
                                        lstPastMissionsNames.Items.Add(PastMissionName)
                                    Next
                                End If
                            Else
     
                                rtbAdresses.Text = "Classified"
                                rtbCriminalRecord.Text = "Classified"
                                rtbKnownAssociates.Text = "Classified"
                                rtbGeneralInfo.Text = "Classified"
                                rtbFamilyTree.Text = "Classified"
                                txtSecurityClearance.Text = "Classified"
                                rtbDivision.Text = "Classified"
                                rtbSupervisor.Text = "Classified"
                                rtbMaritalStatus.Text = "Classified"
                                rtbEducation.Text = "Classified"
                                rtbNationality.Text = "Classified"
                                lstCurrentMissionsNames.Enabled = False
                                lstCurrentMissionsNames.Items.Clear()
                                lstCurrentMissionsNames.Items.Add("Classified")
                                lstPastMissionsNames.Enabled = False
                                lstPastMissionsNames.Items.Clear()
                                lstPastMissionsNames.Items.Add("Classified")
                            End If
     
                        Else
                            lstResultNames.Visible = True
                            For m = 0 To lstResultRows.Items.Count - 1
                                Dim NeededRow As Integer = 0
                                Dim result As String = ""
                                Dim Name As String = ""
                                Dim Birthday As String = ""
                                Dim SkinTone As String = ""
                                Dim Nationality
                                Name = doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBIAgentsTable""First Name", lstResultRows.Items(m)) & " " & doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBIAgentsTable""Last Name", lstResultRows.Items(m))
                                Nationality = doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBIAgentsTable""Nationality", lstResultRows.Items(m))
                                Birthday = doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBIAgentsTable""Birthday", lstResultRows.Items(m))
                                SkinTone = doReturnStrFromSingleRow(MaxDBRows, AccessDataSet, "FBIAgentsTable""Skin Tone", lstResultRows.Items(m))
                                lstResultNames.Items.Add(Name & ", Nationality: " & Nationality & ", Birthday: " & Birthday & ", Skin Tone: " & SkinTone)
                            Next
                        End If
     
                    End If
     
     
                    txtSearchName.Text = ""
                    txtSearchAlias.Text = ""
                    txtSearchAdress.Text = ""
                    txtSearchPostalCode.Text = ""
                    dtpBirthDateFrom.Text = Today
                    dtpBirthDateTo.Text = Today
                    cbSearchSkinTone.Text = ""
                    txtSearchHairColour.Text = ""
                    cbSearchHasCriminalRecord.Text = ""
     
                    btnSearch.Enabled = True
                    btnSearch.Text = "&Search"
                    pbLoading.Value = 0
                    pbLoading.Visible = False
                End If
     
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub

    Και κάπου μέσα στο form.load έχω και αυτό:

                    dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"
                    dbSource = "Data Source = " & My.Application.Info.DirectoryPath & "\Database\dbDatabase.accdb"
                    objConnection.ConnectionString = dbProvider & dbSource
                    objConnection.Open()
                    DatabaseSelect = "SELECT * FROM " & TableToFetch
                    AccessDataAdapter = New OleDb.OleDbDataAdapter(DatabaseSelect, objConnection)
                    AccessDataAdapter.Fill(AccessDataSet, "FBICriminalsTable")
                    objConnection.Close()
                    Dim CommandBuilding As New OleDb.OleDbCommandBuilder(AccessDataAdapter)
                    MaxDBRows = AccessDataSet.Tables("FBICriminalsTable").Rows.Count - 1

    Άρα, αντί να καλώ το "doSearchDBforAllResults" κάθε φορά για να βρω σε ποια row υπάρχουν αυτά που θέλω, μπορώ να δώσω νέο string στο "DatabaseSelect", όπως
    DatabaseSelect = "SELECT * FROM " & TableToFetch & "WHERE "Last Name" = "& LastName & " AND " & " First Name = " & FirstName
    Σωστά?
    Αλλά πριν το κάνω αυτό, πρέπει να ξανανοίξω το connection, να πάρω εκ νέεου τα MaxDBRows και να ξανακλείσω το connection, ε?

    Μια ακόμα ερώτηση, μπορώ μεταξί των AND OR να βάζω παρενθέσεις? δλδ "WHERE ((Something = sth and SomethingElse=SthElse) OR (Blah=Blaah))" ?
    Και τέλος, το "IN" πως λειτουργεί? τι κάνει? :Ρ δεν το έπιασα αυτό



  •  05-11-2011, 18:04 68052 σε απάντηση της 68051

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Δεν είναι απαραίτητο καθόλου και το 99,9 % των περιπτώσεων που χρησιμοποιούν Goto μπορούν πολύ εύκολα να το αποφύγουν, ιδίως εν έτοι 2011 που δεν έχουμε απλά δομημένες γλώσσες αλλά και με full OO features και άλλα πολλά.

    Σωστά, ο κώδικας που παραθέτεις πρέπει να αλλαχτεί και όλα αυτά που κάνεις να τα κάνεις με Select statements είτε από την βάση είτε και από το dataset, βεβαίως υπάρχει και το LINQ.

    Ναι, ανοίγεις το connection, παίρνεις ή δίνεις αυτά που θέλεις και μετά το ξανακλείνεις.

    Ναι, φυσικά μπορείς να βάλεις παρενθέσεις.

    Το IN είναι όταν θέλεις να φέρεις επιλεκτικά εγγραφές από την βάση πχ:
    SELECT * FROM CustomerOrders
    WHERE OrderStatusCODE IN ('PENDING','EXECUTING','COMPLETED')
    OR OrderCustomer IS NULL

    Στην περίπτωση αυτή σου δείχνει μόνο παραγγελίες που είναι σε 3 τύπους και τις παραγγελίες χωρίς πελάτες όλες μαζί.

    Επίσης:

    Μετά από to κάθε DIM Block βάζουμε κενό.

    Γενικά βάζουμε κενά όπως βάζουμε παραγράφους στον γραπτό λόγο.

    Το Call δεν χρειάζεται. 

    Το Exit Sub πήρε σύνταξη ζήτω το Return!

    To MsgBox πέθανε Ζήτω το MessageBox.show!

    Connection string και DBSource σε Configuration file. Αυτά πρέπει να αλλάζουν χωρίς να ξανακάνεις build.

    To DIM Nationality τι τύπου είναι; Βάλε option strict on απάνω στο αρχείο σου.

    Τα Controls του .ΝΕΤ είναι databound, δεν είναι απαραίτητο να κάνεις εσύ τις αναθέσεις των εγγραφων.

    Μην γράφεις μεγάλα functions, άλλο function να φέρνει τα δεδομένα, άλλο να τα δείχνει στα controls.

    όλα τα strings σε resource file, αν σου ζητήσουν την εφαρμογή στα αγγλικά τι θα κάνεις;

    To exception to γενικό είναι γιά να το κληρονομούμε καλύτερα ή να χρησιμοποιούμε τα άλλα exceptions του .NET.

     

  •  08-11-2011, 19:08 68071 σε απάντηση της 68052

    Απ: VB.NET 2010 Εικόνα απο MS Access

    - Έχεις δίκιο, δεν είναι απαραίτητο, αλλά προσωπικά το βρίσκω ένα χρήσιμο εργαλείο για τις ελάχιστες φορές που μπορεί να το χρησιμοποιήσω...

    - Οκ, θα αρχίσω να τον αλλάζω απο τώρα. Θα χρειαστεί ουσιαστικά να γράψω τα πάντα απο την αρχή, αλλά δεν πειράζει - θέλω να γίνει σωστό :)

    Δεν έχω εξικοιωθεί ακόμα καλά με το dataset κτλ, οπότε θα ψάξω πως να χρησιμοποιώ select statements κτλ απο το dataset ή τη βάση. To LINQ όμως δεν έχω ιδέα τι είναι!

    - Δεν καταλαβαίνω γιατί μου λες ότι μετά το DIM βάζουμε κενό :S Χωρίς κενό θα το υπογράμμιζε και δεν θα δούλευε έτσι κι αλλιώς

    - Βέβαια βάζω κενά, βασικά τις περισσότερες φορές μπαίνουν και μόνα τους.

    - Ναι, ξέρω ότι δεν χρειάζεται, αλλά το call επειδή αλλάζει χρώμα, με κάνει να βλέπω καλύτερα που καλώ κάτι. Και αφού δεν κάνει τίποτα κακό, μου αρέσει να το βάζω.

    - Το Exit Sub τέλος? Αυτό δεν τόξερα. Δλδ μπορώ να αλλάξω όλα τα Exit Sub σε ένα σκέτο "Return" ??? Νόμιζα ότι το Return δουλεύει μόνο μέσα σε ένα Function και είναι για να γυρνάει μια μεταβλητή πίσω εκεί που καλέστηκε 

    - Τι διαφορά έχει το MsgBox από το MessageBox?? Μήπως είναι ακριβώς το ίδιο Function με πιο σύντομο όνομα??

    - Δεν χρειάζεται να τα βάλω σε config file γιατί το πρόγραμμα αυτό το έκανα εντελώς για την πλάκα μου, δεν θα το χρησιμοποιήσει κανείς. Απλώς ήθελα να δω τις βάσεις δεδομένων και μιας που μου αρέσει το FBI και τα Black Ops, είπα "και δεν φτιάχνεις ένα πρόγραμμα και καλά του FBI με μια βάση δεδομένων για εγκληματίες, υπαλλήλους και αποστολές?"

    - Το Nationality Είναι τύπου String, ή τουλάχιστον έτσι το ήθελα.. απότι κατάλαβα θα ξέχασα να το γράψω έ? Θα βάλω το Option Strict, και μιας που το ανέφερες, θα το βάζω σε κάθε πρόγραμμα που φτιάχνω.

    - Δεν κατάλαβα καθόλου αυτή την πρότασή σου... δλδ δεν ξέρω ούτε σε πιο Control .net αναφέρεσαι, ούτε τι είναι databound, ούτε τι "ανάθεση εγγράφου" έκανα...

    - Δεν είχα σκοπό να κάνω μεγάλο Function. Τώρα θα διαγραφτούν έτσι κι αλλιώς αλλά ΟΚ. Αν θεωρείς ότι είναι καλύτερα πολλά και πολύ μικρά functions τώτε θα ενστερνιστώ τη λογική σου. Και χαίρομαι πραγματικά πολύ που το επισήμανες. Αν και προγραμματίζω για χόμπι (προς το παρόν τουλάχιστον) θέλω να μάθω να τα κάνω όσο πιο σωστά μπορώ, απο κάθε άποψη.

    - Πάντα βάζω τα string σε language αρχείο, απλώς αυτό το πρόγραμμα το κάνω εντελώς για πλάκα, και μόνο εγώ το χρησιμοποιώ οπότε δεν χρειάζεται. Btw, μάλλον ήθελες να πεις "αν σου το ζητήσουν στα Ελλινικά" γιατί εγώ πάντα στα αγγλικά προγραμματίζω. Μέχρι και τα σχόλια που γράφω, 90% είναι αγγλικά

    - Δεν καταλαβαίνω τι εννοείς σε αυτή την πρόταση. Δεν ξέρω πως "κληρονομούμε" ούτε πως αλλιώς να κάνω ένα exception. Απλώς με το μυαλό μου σκέφτηκα ότι, όταν μου βγάζει πρόβλημα να μου το λέει κιόλας μέσω του MsgBox(ex.ToString)

    Αν υπάρχει τρόπος να οργανώσουμε τα exceptions ή κάτι, σε παρακαλώ πες μου.


    Και τέλος, ένα τεράααστιο ευχαριστώ

    Σου πήρε χρόνο για να δεις τον κώδικα και να γράψεις όλα αυτά που έγραψες. Το εκτιμώ πολύ!


  •  09-11-2011, 15:48 68078 σε απάντηση της 68071

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Μιας και το έφερε και η κουβέντα, συγγνώμη για το σχετικοάσχετο:



    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  10-11-2011, 10:04 68081 σε απάντηση της 68078

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Αν υποψιαστώ ότι τα goto στον κώδικα μου έχουν γυρίσει το χρόνο πίσω και την Ελλάδα στο 1950 και όχι οι πολιτικές κινήσεις την τελευταία τριαντακονταετία θα τρελλαθώ.
    Αν και αφου χρησιμοποιώ goto μάλλον είμαι ήδη τρελός οπότε No Prob , όλα καλά και η Ελλάδα πετάει .Θα γίνουμε Δανία του νότου η Ινδία της δύσης ,η Νότιος Αφρική του βορρά , η Αργεντινή της Ανατολής η δεν ξέρω και γώ τι θα γίνουμαι.

    Παραλογισμός τέλος ώρα να πάρω τα χάπια μου.

  •  10-11-2011, 10:36 68082 σε απάντηση της 68081

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Rayden:

    Αν υποψιαστώ ότι τα goto στον κώδικα μου έχουν γυρίσει το χρόνο πίσω και την Ελλάδα στο 1950 και όχι οι πολιτικές κινήσεις την τελευταία τριαντακονταετία θα τρελλαθώ.
    Αν και αφου χρησιμοποιώ goto μάλλον είμαι ήδη τρελός οπότε No Prob , όλα καλά και η Ελλάδα πετάει .Θα γίνουμε Δανία του νότου η Ινδία της δύσης ,η Νότιος Αφρική του βορρά , η Αργεντινή της Ανατολής η δεν ξέρω και γώ τι θα γίνουμαι.

    Παραλογισμός τέλος ώρα να πάρω τα χάπια μου.


    Dimo και Rayden, επειδή μέχρι τώρα τα πάμε φοβερά καλά με τον LibraStorm, μαθαίνω πολλά και περιμένω εκ νέου απάντηση απο αυτόν, σας παρακαλώ να σταματήσετε να κάνετε post αυτά τα incoherences ώστε το topic να παραμείνει σοβαρό και να μάθω ακόμα παραπάνω πράγματα.

    Ευχαριστώ προκαταβολικά.


  •  10-11-2011, 16:26 68084 σε απάντηση της 68082

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Οκ, το ίδιο πράγμα στα σοβαρά:: A Case against the GO TO Statement by Edsger W.Dijkstra


    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  10-11-2011, 17:32 68085 σε απάντηση της 68084

    Απ: VB.NET 2010 Εικόνα απο MS Access

    Θα διαβάσω το άρθρο, αν και δεν νομίζω ότι υπάρχει κάτι που θα με πείσει ότι η χρήση ενός ή δύο goto statements κάτω απο ορισμένες συνθήκες είναι κακή.

    That said, θεωρώ το θέμα του goto λήξαν, και δεν έχω σκοπό να διαβάσω (προς το παρόν τουλάχιστον) κάτι άλλο σε σχέση με αυτό.

    Προτιμώ να μάθω για τα άλλα 20 ερωτήματα που έχω κάνει.


    Ευχαριστώ πολύ όλους για τον χρόνο σας και τη βοήθεια.


  •  11-11-2011, 08:32 68098 σε απάντηση της 68085

    Απ: VB.NET 2010 Εικόνα απο MS Access

    πανικοσ παλι εγινε εδω χαχα, ωραιο το σκιτσο dimo :P

    Αλκη εγω να σου πω απλα κατι που ετσι πολυ γρηγορα ειδα στον παραπανω κωδικα που ειχες γραψει, δεν το διαβασα ολο απλα το ματι μου επεσε σε αυτο
    Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

    ειναι λαθακι, δεν θες να σου εμφανισει αν υπαρχει καποιο προβλημα το ex σε string, μαλλον θες το ex.message.tostring Wink
    είναι ποιο φιλικό για τον χρήστη όχι για σένα...αφου λογικά σε αυτόν απευθύνεται στο τέλος




    υ.γ χαιρετισμούς στην Πόλη μου (Βόλο) και στην Πατρίδα

    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  11-11-2011, 17:33 68101 σε απάντηση της 68098

    Απ: VB.NET 2010 Εικόνα απο MS Access

    hmm ενδιαφέρον :Ρ χεχε,


    πάντως δουλεύει μια χαρά και αυτό που έγραψα. Δλδ μου λέει τι ακριβώς πρόβλημα έχει και πού στον κώδικα.


  •  11-11-2011, 18:37 68102 σε απάντηση της 68046

    Απ: VB.NET 2010 Εικόνα απο MS Access

    - Έχεις δίκιο, δεν είναι απαραίτητο, αλλά προσωπικά το βρίσκω ένα χρήσιμο εργαλείο για τις ελάχιστες φορές που μπορεί να το χρησιμοποιήσω...

    - Το Goto μπορεί να οδηγήσει σε "μακαρονάδες" δηλαδή σε κώδικα που δεν έχει συγκεκριμένη ροή και να εκτελεί μέρη ενός function με τέτοιο τρόπο έτσι ώστε να αδυνατείς να κάνεις διορθώσεις και να κατανοήσεις  το τι πραγματικά συμβαίνει. Υπάρχουν περιπτώσεις που μπορείς με την Goto να "βγεις" από πολλά nested loops χωρίς να χρειάζεται να κάνεις exit (exit for κλπ) κάθε φορά και σε αυτήν την περίπτωση κερδίζεις και κατανοητό κώδικα και performance.

    - Οκ, θα αρχίσω να τον αλλάζω απο τώρα. Θα χρειαστεί ουσιαστικά να γράψω τα πάντα απο την αρχή, αλλά δεν πειράζει - θέλω να γίνει σωστό :)

    Δεν έχω εξικοιωθεί ακόμα καλά με το dataset κτλ, οπότε θα ψάξω πως να χρησιμοποιώ select statements κτλ απο το dataset ή τη βάση. To LINQ όμως δεν έχω ιδέα τι είναι!

    - Είναι ένας τρόπος να κάνεις select από Datasets, arrays  και γενικά από οτιδήποτε έχει την μορφή-δομή πίνακα, ακόμα και από μία βάση δεδομένων.

    - Δεν καταλαβαίνω γιατί μου λες ότι μετά το DIM βάζουμε κενό :S Χωρίς κενό θα το υπογράμμιζε και δεν θα δούλευε έτσι κι αλλιώς

    - Βέβαια βάζω κενά, βασικά τις περισσότερες φορές μπαίνουν και μόνα τους.

    - Εννοώ κενές γραμμές πατώντας Enter.

    - Ναι, ξέρω ότι δεν χρειάζεται, αλλά το call επειδή αλλάζει χρώμα, με κάνει να βλέπω καλύτερα που καλώ κάτι. Και αφού δεν κάνει τίποτα κακό, μου αρέσει να το βάζω.

    - Ε, τότε χρησιμοποίησε Me.  MyBase.  Myclass.  κλπ σου λένε και που είναι ο κώδικας που καλείς.

    - Το Exit Sub τέλος? Αυτό δεν τόξερα. Δλδ μπορώ να αλλάξω όλα τα Exit Sub σε ένα σκέτο "Return" ??? Νόμιζα ότι το Return δουλεύει μόνο μέσα σε ένα Function και είναι για να γυρνάει μια μεταβλητή πίσω εκεί που καλέστηκε

    - Ναι μπορείς να το αλλάξεις, κάνει το ίδιο πράγμα.

    - Τι διαφορά έχει το MsgBox από το MessageBox?? Μήπως είναι ακριβώς το ίδιο Function με πιο σύντομο όνομα??

    Microsoft.VisualBasic.Interaction.MsgBox("")
    System.Windows.Forms.MessageBox.Show("")

    - Το Messagebox είναι γιά όλες τις γλώσσες του .NET, έχει πιό πολλούς τρόπους να το χρησιμοποιήσεις ενώ Το msgbox είναι γιά λόγους συμβατότητας με την VB6 και η ειρωνεία είναι ότι καλεί την Messagebox.Show τελικά :).

    - Δεν χρειάζεται να τα βάλω σε config file γιατί το πρόγραμμα αυτό το έκανα εντελώς για την πλάκα μου, δεν θα το χρησιμοποιήσει κανείς. Απλώς ήθελα να δω τις βάσεις δεδομένων και μιας που μου αρέσει το FBI και τα Black Ops, είπα "και δεν φτιάχνεις ένα πρόγραμμα και καλά του FBI με μια βάση δεδομένων για εγκληματίες, υπαλλήλους και αποστολές?"

    - OK, αλλά δεν ξέρεις ποτέ τι γίνεται...

    - Το Nationality Είναι τύπου String, ή τουλάχιστον έτσι το ήθελα.. απότι κατάλαβα θα ξέχασα να το γράψω έ? Θα βάλω το Option Strict, και μιας που το ανέφερες, θα το βάζω σε κάθε πρόγραμμα που φτιάχνω.

    - Ναι γιατί κάθε φορά που ξεχνάς να δηλώνεις τον τύπο δημιουργείται ένα object στην μνήμη και αργεί πιό πολύ ή μετατροπή του όταν τρέχει ο κώδικας  (από Object σε String στην συγκεκριμένη περίπτωση).

    - Δεν κατάλαβα καθόλου αυτή την πρότασή σου... δλδ δεν ξέρω ούτε σε πιο Control .net αναφέρεσαι, ούτε τι είναι databound, ούτε τι "ανάθεση εγγράφου" έκανα...

    - Μπορείς να κάνεις Bind σχεδόν όλα τα controls του .NET με εγγραφές από βάσεις δεδομένων, δηλαδή μπορείς να συνδέσεις Controls με εγγραφές από την βάση χωρίς να γράφεις επαναλαμβανόμενο κώδικα.

    - Δεν είχα σκοπό να κάνω μεγάλο Function. Τώρα θα διαγραφτούν έτσι κι αλλιώς αλλά ΟΚ. Αν θεωρείς ότι είναι καλύτερα πολλά και πολύ μικρά functions τώτε θα ενστερνιστώ τη λογική σου. Και χαίρομαι πραγματικά πολύ που το επισήμανες. Αν και προγραμματίζω για χόμπι (προς το παρόν τουλάχιστον) θέλω να μάθω να τα κάνω όσο πιο σωστά μπορώ, απο κάθε άποψη.

    Να αποφεύγεις, όχι ότι αυτό είναι πάντα δυνατόν αλλά το Function OpenConnectionRetrieveDataAndDisplayDataToForm μπορεί να γίνει

    Con = OpenConnection(connectionString as String)
    Data = RetrieveData(con as Connection)
    DisplayDataToForm(Data)

    - Πάντα βάζω τα string σε language αρχείο, απλώς αυτό το πρόγραμμα το κάνω εντελώς για πλάκα, και μόνο εγώ το χρησιμοποιώ οπότε δεν χρειάζεται. Btw, μάλλον ήθελες να πεις "αν σου το ζητήσουν στα Ελλινικά" γιατί εγώ πάντα στα αγγλικά προγραμματίζω. Μέχρι και τα σχόλια που γράφω, 90% είναι αγγλικά.

    - OK.

    - Δεν καταλαβαίνω τι εννοείς σε αυτή την πρόταση. Δεν ξέρω πως "κληρονομούμε" ούτε πως αλλιώς να κάνω ένα exception. Απλώς με το μυαλό μου σκέφτηκα ότι, όταν μου βγάζει πρόβλημα να μου το λέει κιόλας μέσω του MsgBox(ex.ToString)

    Αν υπάρχει τρόπος να οργανώσουμε τα exceptions ή κάτι, σε παρακαλώ πες μου.

    Στο .NET μπορείς να κληρονομήσεις την λειτουργικότητα ενός class μέσα από ένα άλλο. Με αυτόν τον τρόπο μπορείς να επεκτείνεις ή και να αλλάξεις τις  λειτουργίες του «παλιού» class με τέτοιον τρόπο έτσι ώστε να μην χρειάζεται να αλλάξεις των κώδικα του. Γιά παράδειγμα όταν φτιάχνεις ένα Windows forms application στην ουσία η φόρμα που σου δείχνει κληρονομεί (Inherits) μία System.Windows.Form και εσύ μετά την αλλάζεις . Κάνε show all files από το Solution explorer και πήγαινε στο αρχείο Form1.Designer.vb να δεις τι λέει.

    Δες το παρακάτω παράδειγμα και πάτα το F1 μέχρι να λιώσει.Yes

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
    Option Strict On
    
    Public Class Form1
        Private Sub cmdGo_Click(sender As System.Object, e As System.EventArgs) Handles cmdGo.Click
            Dim Car As Car
    
            Try
                Car = New Car("IOO 1583")
    
                AddHandler Car.CarStopped, AddressOf Car_Stopped
    
                Car.Color = Color.Blue
                Car.NumberOfPassengers = 4
                Car.Engine.Start()
                Car.Run(80)
                Car.[Stop]()
                Car.Engine.[Stop]()
    
                RemoveHandler Car.CarStopped, AddressOf Car_Stopped
    
                Try ' Nesting example
                    Dim i As Integer = 10
                    Dim x As Integer = 0
    
                    i \= x
                Catch ex As DivideByZeroException
                    MessageBox.Show(ex.ToString)
                End Try
            Catch ex As PlateNumberException
                MessageBox.Show(ex.ToString)
            Finally
                Car = Nothing
            End Try
    
            GC.Collect() ' Force collect. Avoid using this in real applications.
        End Sub
    
        Private Sub Car_Stopped(sender As Object, e As EventArgs)
        End Sub
    End Class
    
    Public MustInherit Class Vehicle
        Public Property Color As System.Drawing.Color
    
        ' A Must Override method.
        Public MustOverride Sub Run(targetSpeed As Integer)
    
        ' It Can be changed from Classes that inherit this one.
        Public Overridable Sub [Stop]()
        End Sub
    End Class
    
    Public Class Car
        Inherits Vehicle
    
        ' Constructor
        Public Sub New(plateNumber As String)
            If String.IsNullOrWhiteSpace(plateNumber) Then
                ' When you throw exceptions at constructors instances are not created
                Throw New PlateNumberException
            Else
                _PlateNumber = plateNumber.Trim
                _Engine = New Engine
            End If
        End Sub
    
        ' A read only property
        Public ReadOnly Property PlateNumber As String
            Get
                Return _PlateNumber
            End Get
        End Property
    
        ' A Get and Set property
        Public Property NumberOfPassengers As UInteger
    
        Public ReadOnly Property Engine As Engine
            Get
                Return _Engine
            End Get
        End Property
    
        Public Overrides Sub Run(targetSpeed As Integer)
        End Sub
    
        ' Shadow Base Class Method
        Public Shadows Sub [Stop]()
            RaiseEvent CarStopped(Me, New EventArgs) ' You should inherit EventArgs.
        End Sub
    
        Friend Event CarStopped(sender As Object, e As EventArgs)
    
        ' Destructor
        Protected Overrides Sub Finalize()
            Stop
            ' When GC Collects will call the destructor.
            _Engine = Nothing
            MyBase.Finalize()
        End Sub
    
        ' A Field
        Private _PlateNumber As String
        Private WithEvents _Engine As Engine
    End Class
    
    Public Class Engine
        Public Property Rpm As UInteger
    
        Public Sub Start()
            _Rpm = 1000
        End Sub
    
        Public Sub [Stop]()
            _Rpm = 0
        End Sub
    End Class
    
    <Serializable()>
    Public Class PlateNumberException
        Inherits Exception
    
        Public Sub New()
            MyBase.New(_message)
        End Sub
    
        Public Sub New(message As String)
            MyBase.New(message)
        End Sub
    
        Public Sub New(message As String, innerException As System.Exception)
            MyBase.New(message, innerException)
        End Sub
    
        Protected Sub New(info As System.Runtime.Serialization.SerializationInfo,
                          context As System.Runtime.Serialization.StreamingContext)
            MyBase.New(info, context)
        End Sub
    
        Private Const _message As String = "Invalid Plate Number."
    End Class
  •  11-11-2011, 19:43 68103 σε απάντηση της 68102

    Απ: VB.NET 2010 Εικόνα απο MS Access

    - Το Goto μπορεί να οδηγήσει σε "μακαρονάδες" δηλαδή σε κώδικα που δεν έχει συγκεκριμένη ροή και να εκτελεί μέρη ενός function με τέτοιο τρόπο έτσι ώστε να αδυνατείς να κάνεις διορθώσεις και να κατανοήσεις το τι πραγματικά συμβαίνει. Υπάρχουν περιπτώσεις που μπορείς με την Goto να "βγεις" από πολλά nested loops χωρίς να χρειάζεται να κάνεις exit (exit for κλπ) κάθε φορά και σε αυτήν την περίπτωση κερδίζεις και κατανοητό κώδικα και performance.

    Πράγματι, όπως επίσης μπορεί να οδηγήσει και σε infinite loops (σε εμφωλευμένα κτλ) αλλά για τους λόγου που το χρησιμοποιώ εγώ δεν μπορεί να κάνει τίποτα γιατί θα υπάρχει το πολύ 1 φορά σε όλο το πρόγραμμα οπότε νταξ, καταλαβαίνει ο οποιοσδήποτε τι κάνει. Δλδ δεν καθιστά τον κώδικα δυσανάγνωστο.

     

    - Είναι ένας τρόπος να κάνεις select από Datasets, arrays και γενικά από οτιδήποτε έχει την μορφή-δομή πίνακα, ακόμα και από μία βάση δεδομένων.  

    Ακούγεται πολύ ενδιαφέρον, βρήκα αυτό: http://msdn.microsoft.com/en-us/vstudio/bb688088 Έτσι θα δω πάνω κάτω πως χρησιμοποιείται και θα αρχίσω να το χρησιμοποιώ κι εγώ.

     

    - Εννοώ κενές γραμμές πατώντας Enter.  

    Ναι, πάντα βάζω. Έχω σαν αρχή να είναι ευανάγνωστος ο κώδικας μου και αυτό βοηθάει. Τώρα αυτό το πρόγραμμα το έγραψα εντελώς τσαπατσούλικα αλλά εξήγησα γιατί... γιαυτό βλέπεις τέτοια, ή αλλού άκυρες κενές σειρές χωρίς νόημα..

    - Ε, τότε χρησιμοποίησε Me. MyBase. Myclass. κλπ σου λένε και που είναι ο κώδικας που καλείς.

    Χαχα, καλά εσύ κοροιδεύεις αλλά πλάκα πλάκα έχω χρησιμοποιήσει και "Me."... δυστυχώς είμαι πολύ Noobas ακόμα και δεν ξέρω ούτε καν τι υπάγεται στις MyBase ή MyClass. Προσπαθώ όμως, που θα πάει? θα μάθω κάποια στιγμή :)

       

      - Δεν χρειάζεται να τα βάλω σε config file γιατί το πρόγραμμα αυτό το έκανα εντελώς για την πλάκα μου, δεν θα το χρησιμοποιήσει κανείς. Απλώς ήθελα να δω τις βάσεις δεδομένων και μιας που μου αρέσει το FBI και τα Black Ops, είπα "και δεν φτιάχνεις ένα πρόγραμμα και καλά του FBI με μια βάση δεδομένων για εγκληματίες, υπαλλήλους και αποστολές?"

    - OK, αλλά δεν ξέρεις ποτέ τι γίνεται... 
     

    Χχαχαχαχαχ εδώ γέλασα πολύ!! :Ρ - Λες να μου ζητήσει το FBI το πρόγραμμα να το χρησιμοποιούν?? :Ρ That would be the day!!

     

    - Μπορείς να κάνεις Bind σχεδόν όλα τα controls του .NET με εγγραφές από βάσεις δεδομένων, δηλαδή μπορείς να συνδέσεις Controls με εγγραφές από την βάση χωρίς να γράφεις επαναλαμβανόμενο κώδικα.

    Έχεις ήδη κάνει πολλά, και το εκτιμώ πολύ. Αν έχεις το χρόνο όμως, κάνε μου ένα παράδειγμα για αυτή σου την πρόταση γιατί ακόμα δεν αντιλαμβάνομαι την έννοια

    Δες το παρακάτω παράδειγμα και πάτα το F1 μέχρι να λιώσει.

    Αν και το 90% του κώδικα δεν τον καταλαβαίνω... Έγινε! θα πατάω μέχρι να λιώσω :Ρ και μετά θα μελετήσω τον κώδικα


    Ευχαριστώ πάρα πολύ! Φαίνεται ότι έχω αρκετή δουλειά για το σαββατοκύριακο. Μόλις τελειώσω τις εργασίες για τη σχολή ( που προβλέπεται να πάρει μια μέρα τουλάχιστον, θα ασχοληθώ με αυτά που μου είπες.

    Σου είμαι ευγνώμων.


Σελίδα 2 από 2 (30 εγγραφές)   < 1 2
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems