tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
407
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    airmexx Tutorials.de Gastzugang
    Hallo,

    ich hab da ein problem, ich habe ein listenfeld, dies ist auch mit daten gefüllt, wenn ich jetzt auf meinen löschen-button drücke löscht er den obersten(ersten) datensatz und nicht den markierten.

    meine listenbox fülle so: ich schreibe mit hilfe von 'insert into' daten in eine tabelle und lese sie dann mit hilfe einer unterabfrage wieder aus, die unterabfrage ist in der listenbox.

    die listenbox und die eingabe der daten befinden sich auf zwei unterschiedlichen formularen.kann komischerweise auf dem eingabe formular nicht auf die liste zugreifen...sonst wurde ich 'additem' anwenden, und nicht über die tabellen gehen...

    kann mir jemand sagen wie ich vllt auf 'additem' zugreifen kann oder wie ich es schaffe die daten aus der tabelle so zu löschen('delete from'), das nur der markierte datensatz verschwindet.

    danke!
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Also für gewöhnlich kannst du durch Formname.Listenname.Eigenschaft auch auf Elemente in einem anderen Formular zugreifen.

    Warum es bei dir nicht geht ist aber schwer zu sagen so lange man nicht ein bisschen vom Quellcode sieht und genauer weiß womit du arbeitest.

    Gruß Thomas
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    dieter m Tutorials.de Gastzugang
    so das ist der quellcode von der form wo die daten in die tabelle geschrieben werden
    der obere abschnitt ist erstmal uninteressant.

    Private Sub cmd_eintragen_Click()
    Dim txtvon As String
    Dim txtbis As String
    Dim vonzahl, dzahl As Long
    Dim biszahl As Long
    Dim datumvon As String
    Dim datumbis As String
    Dim dnow As String
    Dim prueferdatum, prueferfeiertag As Boolean
    Dim UserName2 As String
    Dim sql As String
    Dim rec As DAO.Recordset
    Dim sql2 As String
    Dim rec2 As DAO.Recordset
    Dim Username3, msg As String
    Dim i, vardatum As Date
    Dim j_minus, j_plus, urlaubstage, n, y, i2, n2, y2 As Long
    Dim zaehler As Integer
    prueferfeiertag = True
    prueferdatum = True
    'die dnow bekommt das datum von heute zugewiesen
    dnow = Date
    intj_minusahr = Year(Date)
    txtvon = dnow
    'txtvon bekommt den wert der in von angeklickt wurde
    txtvon = Me.dtp_datum_von.value
    txtbis = Me.dtp_datum_bis.value
    vonzahl = CDbl(CDate(txtvon))
    biszahl = CDbl(CDate(txtbis))
    dzahl = CDbl(CDate(dnow))
    'man darf nur datentypen vom typ datum angeben
    If vonzahl < dzahl Then
    MsgBox "Das ist leider nicht machbar"
    prueferdatum = False
    End If
    If vonzahl > biszahl Then
    MsgBox "Das ist leider nicht machbar"
    prueferdatum = False
    End If
    'sql befehl um den gespeicherten namen auszurufen
    sql = "SELECT * FROM tbl_zwischegespeicherter_name"
    Set rec = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)
    UserName2 = rec.Fields("Gespeicherter_name")
    'j_minusetzt bekommt den name seiner dazugehörigen ID
    sql2 = "SELECT * FROM tbl_Azubi WHERE Personalnummer = '" & UserName2 & "'"
    Set rec2 = CurrentDb.OpenRecordset(sql2, dbOpenSnapshot)
    Username3 = rec2.Fields("ID_Azubi")
    mod_Datum.FeiertagDatum (intj_minusahr)

    'mod_Datum.Ostern
    'mod_Datum.Arbeitstag
    'mod_Datum.ArbeitsTage
    'Wochenenden berechnen und vom zähler subtrahieren
    'zählt vom von datum bis zum bis datum
    For i = vonzahl To biszahl
    prueferfeiertag = True
    ' hier wird das aktuelle datum in eine zahle umgewandelt(die tag zahl bis zu dem tag von 1.1.1900)
    i2 = CDbl(CDate(i))
    'n2 bekommt den wert 7
    n2 = 7
    'diese schleife zählt von 7 hoch bis zum bis datum(ca. 40353(24.06.2010))
    For n = 1 To biszahl
    n2 = n2 + 7
    'vergleicht ob der i tag ein samstag ist
    If i2 = n2 Then
    prueferfeiertag = False
    End If
    Next n
    y2 = 8
    'diese schleife zählt von 8 hoch bis zum bis datum(ca. 40353(24.06.2010))
    For y = 1 To biszahl
    y2 = y2 + 7
    'vergleicht ob der i tag ein sonntag ist
    If i2 = y2 Then
    prueferfeiertag = False
    End If
    Next y

    ' vergleichen ob der heutige tag ein beweglicherfeiertag ist
    If i = CDate("01.01." & intj_minusahr) Then
    prueferfeiertag = False
    End If
    If i = CDate("01.05." & intj_minusahr) Then
    prueferfeiertag = False
    End If
    If i = CDate("03.10." & intj_minusahr) Then
    prueferfeiertag = False
    End If
    If i = CDate("24.12." & intj_minusahr) Then
    prueferfeiertag = False
    End If
    If i = CDate("25.12." & intj_minusahr) Then
    prueferfeiertag = False
    End If
    'der variablen FeiertagDatum bekommt das heutige jahr zu gewiesen
    vardatum = FeiertagDatum(Format(Date, "yyyy"))
    'der variablen FeiertagDatum wird ein tag dazu addiert
    'ostermonntag
    vardatum = DateAdd("d", 1, vardatum)
    If i = vardatum Then
    prueferfeiertag = False
    End If
    'karfreitag
    vardatum = FeiertagDatum(Format(Date, "yyyy"))
    vardatum = DateAdd("d", -1, vardatum)
    If i = vardatum Then
    prueferfeiertag = False
    End If
    'Christi Himmelfahrt
    vardatum = FeiertagDatum(Format(Date, "yyyy"))
    vardatum = DateAdd("d", 39, vardatum)
    If i = vardatum Then
    prueferfeiertag = False
    End If
    'Pfingstmontag
    vardatum = FeiertagDatum(Format(Date, "yyyy"))
    vardatum = DateAdd("d", 50, vardatum)
    If i = vardatum Then
    prueferfeiertag = False
    End If
    If prueferfeiertag = False Then
    j_minus = j_minus + 1
    End If
    j_plus = j_plus + 1
    urlaubstage = j_plus - j_minus
    Next i

    AB HIER:

    Set ctl = Me.lst_vorl_Urlaubsantraege
    If prueferdatum = True Then
    'hier werden die daten in die tabelle geschrieben
    DoCmd.RunSQL ("INSERT INTO tbl_vorl_Urlaubsantraege (ID_Azubi, Start_Urlaub, End_Urlaub, gen_Urlaubstage, Bemerkungen, genehmigt) " & _
    "VALUES ('" & Username3 & "' , '" & txtvon & "' , '" & txtbis & "' , '" & urlaubstage & "', '" & " " & "' , '" & " " & "')")


    End If
    'messagebox ob man noch was hinzufügen möchte
    msg = MsgBox("Möchten Sie noch einen Eintrag vornehmen?", vbYesNo)
    If msg = vbNo Then
    DoCmd.Close acForm, Me.name
    End If
    If msg = vbYes Then

    End If
    End Sub


    und das ist jetzt die form wo der datensatz gelöscht werden soll


    Private Sub cmd_loeschen_Click()
    DoCmd.SetWarnings False
    Dim ctlListe As Control, varElement As Variant
    Dim msg As String

    'Control-Objektvariable, die auf das Listenfeld zeigt, zurückgeben.


    Dim frm As Form, ctl As Control
    Dim varElem As Variant, intI As Integer
    Dim urlaubstage As Integer
    Dim sql_statement As Variant
    'ctl wird nun der wert der liste lst_azubi übergeben
    Set ctl = Me.lst_vorl_Urlaubsantraege
    'abfrage ob der datensatz gelöscht werden soll
    msg = MsgBox("Wollen Sie den Datensatz wirklich löschen?", vbYesNo)
    'if schleife datensatz wird nur gelöscht wenn ja geklickt wird
    If msg = vbNo Then

    End If
    If msg = vbYes Then
    DoCmd.RunSQL ("DELETE FROM tbl_vorl_Urlaubsantraege WHERE (ID_vorl_pruefung = " & ctl.Column(7, varElem) & ")")
    End If
    Me.lst_vorl_Urlaubsantraege.RowSource = "qry_unterabfrage_vorl_Uralubsantraege"

    End Sub
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Kannst du ihn bitte formatiert in [VB]dein Code[/VB] schreiben? Dann ist er auch lesbar. (ja, diese Tags gehen auch für Gäste!)
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    dieter Tutorials.de Gastzugang
    So hoffe, dass das jetzt besser ist.
    Code vb:
    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
    141
    142
    
    Private Sub cmd_eintragen_Click()
        Dim txtvon As String
        Dim txtbis As String
        Dim vonzahl, dzahl As Long
        Dim biszahl As Long
        Dim datumvon As String
        Dim datumbis As String
        Dim dnow As String
        Dim prueferdatum, prueferfeiertag As Boolean
        Dim UserName2 As String
        Dim sql As String
        Dim rec As DAO.Recordset
        Dim sql2 As String
        Dim rec2 As DAO.Recordset
        Dim Username3, msg As String
        Dim i, vardatum As Date
        Dim j_minus, j_plus, urlaubstage, n, y, i2, n2, y2 As Long
        Dim zaehler As Integer
        prueferfeiertag = True
        prueferdatum = True
        'die dnow bekommt das datum von heute zugewiesen
        dnow = Date
        intj_minusahr = Year(Date)
        txtvon = dnow
        'txtvon bekommt den wert der in von angeklickt wurde
        txtvon = Me.dtp_datum_von.value
        txtbis = Me.dtp_datum_bis.value
        vonzahl = CDbl(CDate(txtvon))
        biszahl = CDbl(CDate(txtbis))
        dzahl = CDbl(CDate(dnow))
        'man darf nur datentypen vom typ datum angeben
            If vonzahl < dzahl Then
                MsgBox "Das ist leider nicht machbar"
                prueferdatum = False
            End If
            If vonzahl > biszahl Then
                MsgBox "Das ist leider nicht machbar"
                prueferdatum = False
            End If
        'sql befehl um den gespeicherten namen auszurufen
        sql = "SELECT * FROM tbl_zwischegespeicherter_name"
        Set rec = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)
        UserName2 = rec.Fields("Gespeicherter_name")
        'j_minusetzt bekommt den name seiner dazugehörigen ID
        sql2 = "SELECT * FROM tbl_Azubi WHERE Personalnummer = '" & UserName2 & "'"
        Set rec2 = CurrentDb.OpenRecordset(sql2, dbOpenSnapshot)
        Username3 = rec2.Fields("ID_Azubi")
        mod_Datum.FeiertagDatum (intj_minusahr)
            
        'mod_Datum.Ostern
        'mod_Datum.Arbeitstag
        'mod_Datum.ArbeitsTage
        'Wochenenden berechnen und vom zähler subtrahieren
        'zählt vom von datum bis zum bis datum
        For i = vonzahl To biszahl
        prueferfeiertag = True
        ' hier wird das aktuelle datum in eine zahle umgewandelt(die tag zahl bis zu dem tag von 1.1.1900)
            i2 = CDbl(CDate(i))
            'n2 bekommt den wert 7
                n2 = 7
            'diese schleife zählt von 7 hoch bis zum bis datum(ca. 40353(24.06.2010))
                For n = 1 To biszahl
                    n2 = n2 + 7
                    'vergleicht ob der i tag ein samstag ist
                    If i2 = n2 Then
                            prueferfeiertag = False
                    End If
                Next n
                    y2 = 8
             'diese schleife zählt von 8 hoch bis zum bis datum(ca. 40353(24.06.2010))
                    For y = 1 To biszahl
                        y2 = y2 + 7
                          'vergleicht ob der i tag ein sonntag ist
                        If i2 = y2 Then
                            prueferfeiertag = False
                        End If
                     Next y
            
        '   vergleichen ob der heutige tag ein beweglicherfeiertag ist
                If i = CDate("01.01." & intj_minusahr) Then
                    prueferfeiertag = False
                End If
                If i = CDate("01.05." & intj_minusahr) Then
                    prueferfeiertag = False
                End If
                If i = CDate("03.10." & intj_minusahr) Then
                    prueferfeiertag = False
                End If
                If i = CDate("24.12." & intj_minusahr) Then
                    prueferfeiertag = False
                End If
                If i = CDate("25.12." & intj_minusahr) Then
                    prueferfeiertag = False
                End If
                'der variablen FeiertagDatum bekommt das heutige jahr zu gewiesen
                vardatum = FeiertagDatum(Format(Date, "yyyy"))
                'der variablen FeiertagDatum wird ein tag dazu addiert
                'ostermonntag
                vardatum = DateAdd("d", 1, vardatum)
                If i = vardatum Then
                    prueferfeiertag = False
                End If
                'karfreitag
                vardatum = FeiertagDatum(Format(Date, "yyyy"))
                vardatum = DateAdd("d", -1, vardatum)
                If i = vardatum Then
                    prueferfeiertag = False
                End If
                'Christi Himmelfahrt
                vardatum = FeiertagDatum(Format(Date, "yyyy"))
                vardatum = DateAdd("d", 39, vardatum)
                If i = vardatum Then
                    prueferfeiertag = False
                End If
                'Pfingstmontag
                vardatum = FeiertagDatum(Format(Date, "yyyy"))
                vardatum = DateAdd("d", 50, vardatum)
                If i = vardatum Then
                    prueferfeiertag = False
                End If
                        If prueferfeiertag = False Then
                                j_minus = j_minus + 1
                        End If
                        j_plus = j_plus + 1
                        urlaubstage = j_plus - j_minus
            Next i
        Set ctl = Me.lst_vorl_Urlaubsantraege
        If prueferdatum = True Then
        DoCmd.RunSQL ("INSERT INTO tbl_vorl_Urlaubsantraege (ID_Azubi, Start_Urlaub, End_Urlaub, gen_Urlaubstage, Bemerkungen, genehmigt) " & _
                      "VALUES ('" & Username3 & "' , '" & txtvon & "' , '" & txtbis & "' , '" & urlaubstage & "', '" & " " & "' , '" & " " & "')")
       
        
        End If
        'messagebox ob man noch was hinzufügen möchte
        msg = MsgBox("Möchten Sie noch einen Eintrag vornehmen?", vbYesNo)
                If msg = vbNo Then
                    DoCmd.Close acForm, Me.name
                End If
                If msg = vbYes Then
                       
                End If
    End Sub

    Code vb:
    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
    
    Private Sub cmd_loeschen_Click()
    DoCmd.SetWarnings False
        Dim ctlListe As Control, varElement As Variant
        Dim msg As String
     
        'Control-Objektvariable, die auf das Listenfeld zeigt, zurückgeben.
        
      
        Dim frm As Form, ctl As Control
        Dim varElem As Variant, intI As Integer
        Dim urlaubstage As Integer
        Dim sql_statement As Variant
        'ctl wird nun der wert der liste lst_azubi übergeben
        Set ctl = Me.lst_vorl_Urlaubsantraege
        'abfrage ob der datensatz gelöscht werden soll
        msg = MsgBox("Wollen Sie den Datensatz wirklich löschen?", vbYesNo)
        'if schleife datensatz wird nur gelöscht wenn ja geklickt wird
            If msg = vbNo Then
            
            End If
            If msg = vbYes Then
         DoCmd.RunSQL ("DELETE FROM tbl_vorl_Urlaubsantraege WHERE (ID_vorl_pruefung = " & ctl.Column(7, varElem) & ")")
            End If
            Me.lst_vorl_Urlaubsantraege.RowSource = "qry_unterabfrage_vorl_Uralubsantraege"
            
    End Sub
     

  6. #6
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Nur mal so ein Schuß ins Blaue:

    Code vb:
    1
    
    DoCmd.RunSQL ("DELETE FROM tbl_vorl_Urlaubsantraege WHERE (ID_vorl_pruefung = " & ctl.Column(7, ctl.ListIndex) & ")")

    Kann es sein das die Variable "varElem" nicht oder falsch definiert ist Wenn du den ListIndex Wert des markierten Eintrages nimmst, sollte der richtige Datensatz gelöscht werden (zumindest wenn der Spaltenwert 7 den richtigen Wert liefert).
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Code vb:
    1
    2
    3
    
    Dim varElem As Variant
    ...
    ... ctl.Column(7, varElem) ...
    varElem ist die Zeile die du ausliest (Zeile varElem, Spalte 8).
    1) du definierst varElem nirgens. Ergo nimmt er die erste Zeile
    2) um die selektionierte Zeile auszuwählen, kannst du diesen optionalen Parameter einfach weglassen
    Code vb:
    1
    
    ... ctl.Column(7) ...

    Edit:
    1:0 für tombe.... du warst schneller *g*
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  8. #8
    dieter Tutorials.de Gastzugang
    Unglaublich...danke!

    einfach varElem weglassen und dann gehts...danke hab seit montag gesucht wo der fehler ist...
     

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 26.11.09, 12:11
  2. Datensatz löschen?
    Von Reverent im Forum .NET Datenverwaltung
    Antworten: 3
    Letzter Beitrag: 25.03.06, 18:07
  3. datensatz löschen
    Von hikeda_ya im Forum PHP
    Antworten: 17
    Letzter Beitrag: 13.01.06, 19:22
  4. Datensatz aus TXT löschen
    Von MajorWindbeutel im Forum PHP
    Antworten: 13
    Letzter Beitrag: 03.02.04, 20:03
  5. Datensatz aus DB löschen
    Von Subwoover im Forum PHP
    Antworten: 7
    Letzter Beitrag: 20.02.02, 16:52