Textfeld bei gleichen SQL Werten in Abhängigkeit von Dropdown-Feldern füllen?

Guten Morgen zusammen,

da die Überschrift wohl eher wenig aussagt erläutere ich mal mein Problem auch anhand eines Screenshots, der sich im Anhang befindet.

Ich habe 2 Dropdown-Felder (Listboxen) in meinem Dialog. Dropdown1 wird durch eine SQL Abfrage beim Start des Dialoges gefüllt. Das funktioniert reibungslos. Sobald ich in Dropdown1 einen Wert auswähle (jeden Wert gibt es nur einmal) füllt sich anhand einer SQL Abfrage im Makro das Dropdown2. Je nachdem welchen Wert ich in Dropdown1 auswähle kann es sein, dass die Werte in Dropdown2 mehrfach vorkommen.

Das Textfeld1 wird in meinem Makro erst dann gefüllt, wenn sowohl in Dropdown1, als auch in Dropdown2 ein Wert ausgewählt ist. Bis hierhin klappt alles super. Nun komme ich nach viel Erläuterung zu meinem eigentlichen Problem. Beispiel (nicht auf Sinnigkeit achten ;)): - Dropdown1 sind Städte hinterlegt - In Dropdown2 erscheinen die dazugehörigen Produke - In Textfeld1 erscheint dann der Kunde, welcher per SQL Abfrage der Kundennummer und des Produktes zu finden ist

Nun kommt es vor das es in Stadt "Hamburg" mehrere Kunden gibt, die dasselbe Produkt herstellen. Ich wähle also in Dropdown1 Hamburg aus und in Dropdown2 erscheint 3mal Milch, weil 3 Kunden Milch herstellen. Egal welchen "Milchwert" ich nun auswähle, ich erhalte im Textfeld1 immer den ersten Kunden, den die SQL Abfrage findet.

Wie kann ich nun die Abfrage so bauen, dass mir bei jedem Wert der entsprechende Kunde angezeigt wird ohne, dass ich die Werte in Dropdown2 in Milch_1, Milch_2 und Milch_3 umbennen muss? Mein bisheriger SQL Code für die Abfrage schaut so aus:

  • Stadtdropdown

    Stadtergebnis = SQL_Anweisung.executeQuery("SELECT ""stadt"" FROM ""staedte""")
    Do While Stadtergebnis .next
    LBItem = Stadtergebnis .getString(1)
    Dialog.GetControl("LB1").addItem(LBItem, Dialog.GetControl("LB1").ItemCount)
    Loop
    
  • Produktedropdown

    Produktergebnis = SQL_Anweisung.executeQuery("SELECT ""produkt"" FROM ""produkte"" WHERE ""stadt""=" & gewaehltestadt(i) & "")
    Dialog.GetControl("LB2").removeItems(0, Dialog.GetControl("LB2").getItemCount())
    Do While Produktergebnis.next
    LBItem2= Produktergebnis.getString(1)
    Dialog.GetControl("LB2").addItem(LBItem2, Dialog.GetControl("LB2").ItemCount()
    Loop
    
  • Kundetextfeld

    Kundeergebnis = SQL_Anweisung.executeQuery("SELECT ""kunde"" FROM ""kunden"" WHERE ""stadt""=" & gewaehltestadt(i) & " AND ""produkt""='" & gewaehltesprodukt(i) & "'")
    Do While Kundeergebnis.next
    Dialog.GetControl("Kunde").text = Kundeergebnis.getString(1)
    Loop
    

So nun hoffe ich, dass mir jemand bei meinem Problem weiterhelfen kann.

Viele Grüße

Kenji

...zum Beitrag

Habs nun durch ein weiteres Dropdown Menü gelöst. Danke an alle für die Antworten.

...zur Antwort

Ich habe nun einmal eine andere Schleife gebaut, die allerdings die Excel Datei abstürzen lässt (Microsoft Excel reagiert nicht mehr). Kann mir hier jemand einen Tipp geben?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rzelle As Integer
rzelle = Target.Row
Do While Cells(rzelle, 4) <> ""
If rzelle < 4 Or rzelle > 15000 Then Exit Do
End If
Cells(Target.Row, 2) = Date
rzelle = rzelle + 1
Loop
End Sub
...zur Antwort

Habs selber wieder gefunden ;)

...zur Antwort
  1. Nach Familienangehörigen ein ,
  2. voraussichtlich würde ich weglassen. Du willst dich ja präsentieren mit deiner Bewerbung. Versuch deshalb ein wenig selbstbewusster zu formulieren.
  3. Über eine Einladung freue ich mich sehr. Lass diese Konjunktive raus.

Ansonsten schauts gut aus.

...zur Antwort

Damit Ihr wisst, wo ich hänge:

$( ".art-btn" ).click(function() {
    val = $(this).val();
    $('#artausgabe').html(val);
    
    $.ajax({
        type: "GET",
        url: "../config/ajax.php",
        data: {
            wert1: val
        },
        success: function(ausgabe) {
    $('#grunddiv').html(ausgabe);
    }
    
    });
    
});
</script>

Das Script funktioniert einwandfrei. Er liest den Wert des Radiobuttons aus, übergibt diesen in die ajax.php, wo eine DB Abfrage läuft, die automatisch neue Radio Buttons erzeugt. Soweit so gut.

Nun ist es so, dass ich den ausgelesen Wert noch für eine andere success function() benötige. Derzeit versuche ich es so:

<script>
$( ".art-btn" ).click(function() {
    val = $(this).val();
    val_artnr = val.slice(0, 2);
    $('#artausgabe').html(val);
    $('#artausgabe2').html(val_artnr);
    
    $.ajax({
        type: "GET",
        url: "../config/ajax.php",
        data: {
            wert2: val_artnr
        },
        success: function(ausgabe) {
    $('#grunddiv2').html(ausgabe);
    }
    
    });
       
    
});
</script>

Das Script liest den Wert wieder aus, speichert Ihn aber in einer anderen Variable, nämlich Wert2, die dann an die ajax.php übergeben wird. Dort soll folgende Funktion aufgerufen werden:

<?php
require_once('config.php');
$wert2 = mysqli_real_escape_string($conn, $_GET['wert2']);
if($_GET['wert2'] == "AL")   
    echo ('<input type="number" name="sequenznr" placeholder="Sequenz-Nr." min="1" max="99999 required>');
else
    echo ('<input type="number" name="sequenznr" placeholder="Sequenz-Nr." min="1" max="99999">');
?>

Er soll also, wenn der Radiobutton einen bestimmten Wert hat ein number Feld erzeugen, was required ist. Andernfalls erzeugt er das selbe Feld, aber ohne required.

Wenn ich das nun auf der Seite ausführe und den entsprechenden Radio Button anklicke, dann erstellt er mir das Feld zwar, wenn der Radiobutton den entsprechenden Wert hat, aber er fügt darüber noch Fehlermeldungen ein mit "Undefined Index: wert2".

Wenn der Radiobutton nun einen anderen Wert hat, als in der ajax.php vorgeschrieben, erstellt er mir sogar 2 weitere Number Felder mit den gleichen Fehlermeldungen.

Hoffe es ist verständlich erklärt und jemand hat noch eine Hilfestellung für mich.

...zur Antwort

Hallo,

wo kommen deine Daten, wie Auftragsnummer und Auftrag her? Stehen die auch in der Excel Datei auf einem versteckten Tabellenblatt? Falls ja, kannst du das mit INDIREKT() und Namens Manager lösen.

...zur Antwort