Hallo Leute,
ich bin grad am verzweifeln ... ich mache eine Form mit ShowDialog() auf, gebe in der Form eine Variable über ein Property zurück und wenn die aufrufende Form die Variable abfragt ist diese wieder auf 0. Ich habe keine Ahnung warum, ich habe nen ähnlichen Code für ein anderes Forumlar, da klappt das super ... vielleicht kann mir kurz wer nen Tipp geben.
Der Aufruf aus Form1 ...
Private Sub cmdKundeNeu_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles cmdKundeNeu.Click
Dim frm As New frmQuickAnlage
Dim nID As Integer
frm.AnlageArt = 0
Dim res As DialogResult = frm.ShowDialog()
If res = Windows.Forms.DialogResult.OK Then
nID = frmQuickAnlage.NeuID
'Hier bekomme ich immer wieder 0 zurück
If nID > 0 Then
'Das ist die ID des neu angelegten Kunden -> Daten
' anzeigen und ID in Privater Var. merken
lKdID = nID
Call FillKdFields(nID) 'Diese Funktion füllt die Felder
' mit den Daten aus der Neuanlage
End If
Else
'Kein kunde wurde angelegt
End If
frm.Dispose()
End Sub Und hier der Code aus dem Formular was die Variable erzeugt Problem
muss ja eigentlich entweder in der Property oder in cmdAnlage liegen
Public Class frmQuickAnlage
Private nAnlageArt As Integer '0=Kundenanlage, 1=Anlage anlegen,
' 2=Material anlegen
Private nNeuID As Long 'hier steht die Neu angelegte ID, wenn
' eine Neuanlage durchgeführt wurde
Public Property AnlageArt As Integer
Get
Return nAnlageArt
End Get
Set(ByVal value As Integer)
nAnlageArt = value
End Set
End Property
Public Property NeuID As Integer
Get
Return nNeuID
End Get
Set(ByVal value As Integer)
End Set
End Property
Private Sub cmdAnlage_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles cmdAnlage.Click
Dim nNrNeu As Integer
Dim sSqlPruef As String
Dim dr As DataRow
Dim kd As New KundenNeu
Dim sTable As String
Dim sSqlAnlage As String
Dim nErg As Integer
Dim nID As Integer
nNrNeu = Val(Me.txtNr.Text)
Select Case nAnlageArt
Case 0
'Kunde soll angelegt werden
sSqlPruef = "SELECT * FROM kunden WHERE kdnr=" & nNrNeu
sTable = "kunden"
sSqlAnlage = "INSERT INTO kunden (kdnr, kd_name) VALUES (" & _
nNrNeu & ", '" & Me.txtBez.Text & "')"
Case 1
'Anlage anlegen
sSqlPruef = "SELECT * FROM anlagen WHERE nr=" & nNrNeu
sTable = "anlagen"
sSqlAnlage = "INSERT INTO anlagen (nr, bez) VALUES (" & nNrNeu _
& ", '" & Me.txtBez.Text & "')"
Case 2
'Material Anlegen
sSqlPruef = "SELECT * FROM stoffe WHERE nr=" & nNrNeu
sTable = "stoffe"
sSqlAnlage = "INSERT INTO stoffe (nr, bez) VALUES (" & nNrNeu & _
", '" & Me.txtBez.Text & "')"
Case Else
MsgBox("Not implemented")
Exit Sub
End Select
dr = kd.FillDataRowWithSQL(sSqlPruef, sTable)
If dr Is Nothing Then
'Nr noch nicht vorhanden, weiter mit der Anlage
nErg = kd.UpdateWithSql(sSqlAnlage)
If nErg > 0 Then
'Anlage hat geklappt, jetzt nur noch die neue ID des
' Datensatzes ermitteln und zurückgeben
System.Threading.Thread.Sleep(850)
dr = kd.FillDataRowWithSQL(sSqlPruef, sTable)
If dr IsNot Nothing Then
nID = dr("id")
Else
MsgBox("Neu angelegter Datensatz kann nicht automatisch" & _
"gefunden werden, bitte suchen Sie diesen manuell")
End If
'nNeuID hat beim Debuggen auch nen Wert ...
'ID zurückgeben und raus
nNeuID = nID
Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close()
Else
MsgBox("Anlage war nicht erfolgreich")
Me.Close()
End If
Else
'Nr schon vorhanden meldung und erstma raus
MsgBox("Bitte vergeben Sie eine eindeutige Nummer")
Me.txtNr.Focus()
Exit Sub
End If
End Sub
End ClassVielen Dank schonmal.
mfg
Sebastian |