|
Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 11-11-2011, 19:43. Υπάρχουν 29 απαντήσεις.
-
05-11-2011, 01:26
|
-
Libra Storm
-
-

-
Μέλος από τις 28-01-2011
-
Χαϊδάρι
-
Δημοσιεύσεις 142
-
-
|
Απ: 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
|
-
AlKiS
-
-

-
Μέλος από τις 12-01-2007
-
Volos
-
Δημοσιεύσεις 312
-
-
|
Απ: VB.NET 2010 Εικόνα απο MS Access
Ευχαριστώ πολύ! :) Βλέπω ότι έκτος απο τα "Select, Insert, Delete και Update" commands που ανέφερες, υπάρχει και το "Where" στον κώδικα σου. Και απότι κατάλαβα το Where καθιστά άχρηστο τον κώδικα για ψάξιμο που έχω γράψει ε? ( Public Sub doSearchDBforOneResult(ByVal AccessDataSet As DataSet, ByVal dsTable As String, ByVal strDatabaseItem As String, ByVal MaxDBRows As Integer, ByVal ComparingString As String, ByRef ResultRow As Integer, Optional ShowMessage As Boolean = True, Optional 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 DataSet, ByVal dsTable As String, ByVal strDatabaseItem As String, ByVal MaxDBRows As Integer, ByVal ComparingString As String, ByRef ResultRows As ListBox, Optional ShowMessage As Boolean = True, Optional 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
|
-
Libra Storm
-
-

-
Μέλος από τις 28-01-2011
-
Χαϊδάρι
-
Δημοσιεύσεις 142
-
-
|
Απ: 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
|
-
AlKiS
-
-

-
Μέλος από τις 12-01-2007
-
Volos
-
Δημοσιεύσεις 312
-
-
|
Απ: VB.NET 2010 Εικόνα απο MS Access
Ευχαριστώ για τις πληροφορίες :) ένα πράγμα μόνο, τo goto δεν το χρησιμοποιώ πολύ, αλλά μερικές φορές είναι απαραίτητο. Δεν βλέπω τον λόγο να μην το χρησιμοποιήσω ποτέ..
Τώρα, έχω γράψει τον εξής κώδικα για ψαχτίρι: Private Sub tmrSearch_Tick(sender As System.Object, e As System.EventArgs) Handles 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
|
-
Libra Storm
-
-

-
Μέλος από τις 28-01-2011
-
Χαϊδάρι
-
Δημοσιεύσεις 142
-
-
|
Απ: 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
|
-
AlKiS
-
-

-
Μέλος από τις 12-01-2007
-
Volos
-
Δημοσιεύσεις 312
-
-
|
Απ: 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
|
-
dimos.homatas
-
-

-
Μέλος από τις 13-12-2010
-
Θεσσαλονίκη
-
Δημοσιεύσεις 319
-
-
|
Απ: 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
|
-
Rayden
-
-

-
Μέλος από τις 16-06-2006
-
Άλιμος
-
Δημοσιεύσεις 51
-
-
|
Απ: VB.NET 2010 Εικόνα απο MS Access
Αν υποψιαστώ ότι τα goto στον κώδικα μου έχουν γυρίσει το χρόνο πίσω και την Ελλάδα στο 1950 και όχι οι πολιτικές κινήσεις την τελευταία τριαντακονταετία θα τρελλαθώ. Αν και αφου χρησιμοποιώ goto μάλλον είμαι ήδη τρελός οπότε No Prob , όλα καλά και η Ελλάδα πετάει .Θα γίνουμε Δανία του νότου η Ινδία της δύσης ,η Νότιος Αφρική του βορρά , η Αργεντινή της Ανατολής η δεν ξέρω και γώ τι θα γίνουμαι.
Παραλογισμός τέλος ώρα να πάρω τα χάπια μου.
|
|
-
10-11-2011, 10:36
|
-
AlKiS
-
-

-
Μέλος από τις 12-01-2007
-
Volos
-
Δημοσιεύσεις 312
-
-
|
Απ: VB.NET 2010 Εικόνα απο MS Access
Rayden:Αν υποψιαστώ ότι τα goto στον κώδικα μου έχουν γυρίσει το χρόνο πίσω και την Ελλάδα στο 1950 και όχι οι πολιτικές κινήσεις την τελευταία τριαντακονταετία θα τρελλαθώ. Αν και αφου χρησιμοποιώ goto μάλλον είμαι ήδη τρελός οπότε No Prob , όλα καλά και η Ελλάδα πετάει .Θα γίνουμε Δανία του νότου η Ινδία της δύσης ,η Νότιος Αφρική του βορρά , η Αργεντινή της Ανατολής η δεν ξέρω και γώ τι θα γίνουμαι.
Παραλογισμός τέλος ώρα να πάρω τα χάπια μου.
Dimo και Rayden, επειδή μέχρι τώρα τα πάμε φοβερά καλά με τον LibraStorm, μαθαίνω πολλά και περιμένω εκ νέου απάντηση απο αυτόν, σας παρακαλώ να σταματήσετε να κάνετε post αυτά τα incoherences ώστε το topic να παραμείνει σοβαρό και να μάθω ακόμα παραπάνω πράγματα. Ευχαριστώ προκαταβολικά.
|
|
-
10-11-2011, 16:26
|
-
10-11-2011, 17:32
|
-
AlKiS
-
-

-
Μέλος από τις 12-01-2007
-
Volos
-
Δημοσιεύσεις 312
-
-
|
Απ: VB.NET 2010 Εικόνα απο MS Access
Θα διαβάσω το άρθρο, αν και δεν νομίζω ότι υπάρχει κάτι που θα με πείσει ότι η χρήση ενός ή δύο goto statements κάτω απο ορισμένες συνθήκες είναι κακή. That said, θεωρώ το θέμα του goto λήξαν, και δεν έχω σκοπό να διαβάσω (προς το παρόν τουλάχιστον) κάτι άλλο σε σχέση με αυτό. Προτιμώ να μάθω για τα άλλα 20 ερωτήματα που έχω κάνει.
Ευχαριστώ πολύ όλους για τον χρόνο σας και τη βοήθεια.
|
|
-
11-11-2011, 08:32
|
-
Johnnyxp64
-
-

-
Μέλος από τις 30-08-2008
-
Earth
-
Δημοσιεύσεις 554
-
-
|
Απ: VB.NET 2010 Εικόνα απο MS Access
πανικοσ παλι εγινε εδω χαχα, ωραιο το σκιτσο dimo :P
Αλκη εγω να σου πω απλα κατι που ετσι πολυ γρηγορα ειδα στον παραπανω κωδικα που ειχες γραψει, δεν το διαβασα ολο απλα το ματι μου επεσε σε αυτο Catch ex As Exception
MsgBox(ex.ToString)
End Try ειναι λαθακι, δεν θες να σου εμφανισει αν υπαρχει καποιο προβλημα το ex σε string, μαλλον θες το ex. message.tostring  είναι ποιο φιλικό για τον χρήστη όχι για σένα...αφου λογικά σε αυτόν απευθύνεται στο τέλος
υ.γ χαιρετισμούς στην Πόλη μου (Βόλο) και στην Πατρίδα
This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
|
|
-
11-11-2011, 17:33
|
-
AlKiS
-
-

-
Μέλος από τις 12-01-2007
-
Volos
-
Δημοσιεύσεις 312
-
-
|
Απ: VB.NET 2010 Εικόνα απο MS Access
hmm ενδιαφέρον :Ρ χεχε,
πάντως δουλεύει μια χαρά και αυτό που έγραψα. Δλδ μου λέει τι ακριβώς πρόβλημα έχει και πού στον κώδικα.
|
|
-
11-11-2011, 18:37
|
-
Libra Storm
-
-

-
Μέλος από τις 28-01-2011
-
Χαϊδάρι
-
Δημοσιεύσεις 142
-
-
|
Απ: 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 μέχρι να λιώσει. 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
|
-
AlKiS
-
-

-
Μέλος από τις 12-01-2007
-
Volos
-
Δημοσιεύσεις 312
-
-
|
Απ: 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 εγγραφές)
2
|
|
|