Constrained to be unique

Status
Niet open voor verdere reacties.

Twanno5483

Gebruiker
Lid geworden
1 mrt 2009
Berichten
74
Hoi Allemaal,

Ik heb een klein database progje, waar ik in mijn SQLCE database het veld "typenummer" als unique heb ingesteld. Nu zou ik graag een msgbox willen laten verschijnen zodra ik het type nummer voor de 2e keer wil opslaan. Hoe kan ik dit aanpakken?

groetjes
Twan
 
Mischien zo iets
Code:
Private Sub typenummerTextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles typenummerTextBox1.LostFocus
        If Me.MyBindingSource.Position > -1 Then
            Dim typenummer As Double
            For Each row As DataRowView In Me.MyBindingSource.List
                typenummer = row!typenummer
                If typenummer = TextBox1.Text Then
                    MsgBox("Nummer bestaat al")
                End If
            Next
        End If
    End Sub


Of maak het veld op Autonummering
 
Laatst bewerkt:
Hartelijk bedank. Hier kan ik wat mee. Ik heb de script toegepast zodra ik mijn formulier opsla en Dim typenummer As Double vertaald naar Dim typenummer As String, omdat mijn typenummer ook letters kan bevatten.
Ik krijg alleen nu die MsgBox 2x achter elkaar. Hoe kan dat?

Code:
ElseIf Me.ArtikelenBindingSource.Position > -1 Then
            Dim typenummer As String
            For Each row As DataRowView In Me.ArtikelenBindingSource.List
                typenummer = row!Typenummer
                If typenummer = TypenummerTextBox.Text Then
                    MsgBox("Typenummer bestaat al!")
                End If
            Next
        Else
 
ik weet niet wat er voor je elseif staat.
dus weet ik niet of daar de fout zit.

en let op dat je alles met of zonder hoofd letters maakt Typenummer of typenummer
 
Laatst bewerkt:
Dat met de hoofdletters weet ik, anders krijg ik zo'n blauwe error kronkel.
Ik stuur anders bij deze de volledige code.

Ik kom er trouwens ook achter dat nu alle invoeren in de TypenummerTextBox met dezelfde aantal karakters de foutmelding geeft. Hij reageert niet op de text, maar op de aantal karakters. Wat kan ik hieraan doen.

Code:
 Private Sub ArtikelenBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ArtikelenBindingNavigatorSaveItem.Click
        If CategorieComboBox.Text = "" Then
            MsgBox("Veld Categorie is leeg. Waarde is verplicht!", MsgBoxStyle.Critical)
        ElseIf MinVrdTextBox.Text = "" Then
            MsgBox("Veld Min. Voorraad is leeg. Waarde is verplicht!", MsgBoxStyle.Critical)
        ElseIf TypenummerTextBox.Text = "" Then
            MsgBox("Veld Typenummer is leeg. Waarde is verplicht!", MsgBoxStyle.Critical)
        ElseIf MaxVrdTextBox.Text = "" Then
            MsgBox("Veld Max. Voorraad is leeg. Waarde is verplicht!",MsgBoxStyle.Critical)
        ElseIf Me.ArtikelenBindingSource.Position > -1 Then
            Dim typenummer As String
            For Each row As DataRowView In Me.ArtikelenBindingSource.List
                typenummer = row!Typenummer.ToString
                If typenummer = TypenummerTextBox.Text Then
                    MsgBox("Typenummer bestaat al!", MsgBoxStyle.Critical)
                End If
            Next
        Else
            Me.Validate()
            Me.ArtikelenBindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.DatabaseDataSet)
            Me.ArtikelenDataGridView.Enabled = True
        End If
    End Sub
 
Laatst bewerkt:
ik weet niet zeker maar
laat deze regels er eens uit en kijk of hij dan nog tweemaal de msg box geeft
Code:
ElseIf TypenummerTextBox.Text = "" Then
            MsgBox("Veld Typenummer is leeg. Waarde is verplicht!", MsgBoxStyle.Critical)


maak ander een geneste if van de code
 
Misschien een domme vraag, maar wat is een geneste if?

Ben maar een beginnend amateur

Ik denk trouwens dat "Me.ArtikelenBindingSource.Position > -1" het probleem is, want hier wordt een Integer verwacht terwijl ik in mijn TypenummerTextBox met een string werk.
Hoe kan ik die position omzetten voor een string?
 
Laatst bewerkt:
Bij mij werk de code goed zonder twee maal een msg box ook als string

"Me.ArtikelenBindingSource.Position > -1" heeft hier niets mee te maken.
je kan hem zelfs weg laten
dus kijk naar de indeling van je code het belangrijkste eerst
Code:
Dim Nummer As String
        For Each row As DataRowView In Me.ArtikelBindingSource.List
            Nummer = row!Nummer
            If Nummer = TextBoxX1.Text Then
                MsgBox("Nummer bestaat al", MsgBoxStyle.Exclamation)
               
                End If
        Next


genest is een if binnen een if dus geen Elseif en aan het eind van de code end if voor elke if.

probeer eerst de code werkt die goed bouw hem dan verder uit.

En kijk waar de fout optreed.
is wel zo leuk om er zelf wat aan te doen als je aan het leren bent.
 
Laatst bewerkt:
even nagemaakt deze code werkt.
Door Else in je code en krijg je tweekeer de msgbox
deze code doet wat hij moet doen.
hij moet immers niets doen als de code verschillend is.
en na de waarschuwing dat het nummer al bestaad de code niet verder afwerken.

Code:
 Private Sub ArtikelenBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ArtikelenBindingNavigatorSaveItem.Click
        If CategorieComboBox.Text = "" Then
            MsgBox("Veld Categorie is leeg. Waarde is verplicht!", MsgBoxStyle.Critical)
        ElseIf MinVrdTextBox.Text = "" Then
            MsgBox("Veld Min. Voorraad is leeg. Waarde is verplicht!", MsgBoxStyle.Critical)
        ElseIf MaxVrdTextBox.Text = "" Then
            MsgBox("Veld Max. Voorraad is leeg. Waarde is verplicht!", MsgBoxStyle.Critical)
        ElseIf TypenummerTextBox.Text = "" Then
            MsgBox("Veld Typenummer is leeg. Waarde is verplicht!", MsgBoxStyle.Critical)
        ElseIf TypenummerTextBox.Text = TypenummerTextBox.Text Then
            Dim typenummer As String
            For Each row As DataRowView In Me.ArtikelenBindingSource.List
                typenummer = row!Typenummer.ToString
                If typenummer = TypenummerTextBox.Text Then
                     MsgBox("Typenummer bestaat al!" & vbNewLine & "Typenummer moet uniek zijn", MsgBoxStyle.Critical)
                    Exit Sub
                End If
            Next
            Me.Validate()
            Me.ArtikelenBindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.DatabaseDataSet)
            Me.ArtikelenDataGridView.Enabled = True
        End If
    End Sub


Groet Old Hippy
 
Hey Old Hippy,

Bedankt voor de code, maar deze werkt per record maar 1 keer. Zodra ik een bestaand record bewerk, maar het typenummer niet wijzig, krijg ik ook de msgbox te zien.

Ik heb via internet en een tip van een vriend van me de optie Try geprobeerd. dit werkt, maar de melding is in het engels. Kan ik deze omprogrammeren naar Nederlands?
In de onderstaande code zou dit eigenlijk omgezet worden, maar het werkt niet.

Weet jij hier iets mee?

Code:
Private Sub ArtikelenBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ArtikelenBindingNavigatorSaveItem.Click
        If CategorieComboBox.Text = "" Then
            MsgBox("Veld Categorie is leeg. Waarde is verplicht!")
        ElseIf MinVrdTextBox.Text = "" Then
            MsgBox("Veld Min. Voorraad is leeg. Waarde is verplicht!")
        ElseIf TypenummerTextBox.Text = "" Then
            MsgBox("Veld Typenummer is leeg. Waarde is verplicht!")
        ElseIf MaxVrdTextBox.Text = "" Then
            MsgBox("Veld Max. Voorraad is leeg. Waarde is verplicht!")
        End If
        Try
            Me.Validate()
            Me.ArtikelenBindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.DatabaseDataSet)
            Me.ArtikelenDataGridView.Enabled = True
            Me.BindingNavigatorMovePreviousItem.Enabled = True
            Me.BindingNavigatorMoveNextItem.Enabled = True
            Me.BindingNavigatorMoveFirstItem.Enabled = True
            Me.BindingNavigatorMoveLastItem.Enabled = True
        Catch ex As Exception
            Dim culture As String = My.Application.UICulture.Name
            My.Application.ChangeUICulture("nl-NL")
            MsgBox(ex.Message, MsgBoxStyle.Critical)
            My.Application.ChangeUICulture(culture)

        End Try
        
    End Sub
 
Ik heb het toch al zelf opgelost.
Ik heb catch ex as constraintexeption gebruikt met een messagebox met eigen text. Daarna nog catch ex as exeption.

Dit werkt goed
Heel erg bedankt voor de moeite.

Twan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan