MySQL: Fehlerhafte Suchanfrage?

Hallo,

ich stehe vor einer Herausforderung mit einer Windows Forms-Anwendung, die ich entwickelt habe, um Tageszeitraumstatistiken für Benutzer anzuzeigen. In dieser Anwendung gibt es ein Formular mit dem Namen TagesZeitraumStatistik, das darauf ausgelegt ist, Benutzern ihre Umsätze basierend auf ihnen zugewiesenen PIDs (Produkt-IDs) anzuzeigen.

Jedoch stieß ich auf ein Problem: Das Programm lädt nicht alle PIDs korrekt. Insbesondere scheinen einige Unter-PIDs übersprungen zu werden.

Bei der Fehlersuche mittels Debugging und Setzen von Breakpoints konnte ich beobachten, dass initial alle PIDs korrekt erfasst werden. Allerdings überspringt das Programm im weiteren Verlauf bestimmte PIDs, ohne dass ein offensichtlicher Grund dafür erkennbar ist. Leider komme ich bei dem Problem nicht wirklich weiter. Vielleicht kann mir ja hier jemand helfen.

Hier die Codeausschnitte:

public TagesZeitraumStatistik(string username, bool isAdmin, List<string> userPIDs)
{
  InitializeComponent();
  InitializeDataGridView();
  FillYearComboBox();

  this.username = username;
  this.isAdmin = isAdmin;
  this.userPIDs = userPIDs;
  this.Load += new EventHandler(TagesZeitraumStatistik_Load);

  monthCalendar1.DateSelected += MonthCalendar1_DateSelected;
  comboBoxYear.SelectedIndexChanged += ComboBoxYear_SelectedIndexChanged;
  printDocument1.PrintPage += new PrintPageEventHandler(PrintDocument1_PrintPage);

  // TextBox für den PID-Filter erstellen und konfigurieren
  textBoxPidFilter = new TextBox();
  textBoxPidFilter.Location = new Point(10, 10);
  textBoxPidFilter.Size = new Size(150, 20);
  this.Controls.Add(textBoxPidFilter);

  // LoadData-Methode aufrufen, um die Daten zu laden
  LoadData();
}

private void LoadData(DateTime? startDate = null, DateTime? endDate = null, string pidStartsWith = null)
{
  try
  {
    List<string> pidFilterList = new List<string>();

    if (!string.IsNullOrEmpty(pidStartsWith))
    {
      pidFilterList.Add(pidStartsWith);
    }

    DataTable statistikData = dbManager.GetTageszeitraumStatistikData(startDate, endDate, pidFilterList, userPIDs);
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = statistikData;
    UpdateTotalSales(statistikData);
    UpdateSalesLabel(startDate, endDate);
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
  }
}

public DataTable GetTageszeitraumStatistikData(DateTime? startDate = null, DateTime? endDate = null, List<string> pidPrefixes = null, List<string> userPids = null)
{
  DataTable dt = new DataTable();

  using (MySqlConnection conn = new MySqlConnection(connectionString))
  {
    try
    {
      conn.Open();
      string query = @"
        SELECT Datum, FreierText1 AS PID, Name AS Nachname, EuroNetto, Belegnummer
        FROM BELEG 
        WHERE 1=1";

      if (startDate.HasValue)
      {
        query += " AND Datum >= @StartDate";
      }

      if (endDate.HasValue)
      {
        query += " AND Datum <= @EndDate";
      }

      if (pidPrefixes != null && pidPrefixes.Any())
      {
        query += " AND (";

        for (int i = 0; i < pidPrefixes.Count; i++)
        {
          query += $"FreierText1 LIKE @Pid{i}";

          if (i < pidPrefixes.Count - 1)
          {
            query += " OR ";
          }
        }

        query += ")";
      }

      if (userPids != null && userPids.Count > 0)
      {
        string pidsCondition = string.Join(",", userPids.Select(pid => $"'{pid}'"));
        query += $" AND FreierText1 IN ({pidsCondition})";
      }

      using (MySqlCommand cmd = new MySqlCommand(query, conn))
      {
        if (startDate.HasValue)
        {
          cmd.Parameters.AddWithValue("@StartDate", startDate.Value.Date);
        }

        if (endDate.HasValue)
        {
          cmd.Parameters.AddWithValue("@EndDate", endDate.Value.Date);
        }

        if (pidPrefixes != null && pidPrefixes.Any())
        {
          for (int i = 0; i < pidPrefixes.Count; i++)
          {
            cmd.Parameters.AddWithValue($"@Pid{i}", $"{pidPrefixes[i]}%");
          }
        }

        using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
        {
          da.Fill(dt);
        }
      }
    }
    catch (MySqlException ex)
    {
      throw new Exception($"Fehler beim Abrufen der Daten: {ex.Message}", ex);
    }
  }

  return dt;
}
C Sharp, Code, Datenbank, MySQL, Programmiersprache, Visual Studio, Algorithmus
JavaScript: Warum springt die Galerie immer wieder zum ersten Bild zurück?

Hallo,

ich habe auf meiner Seite eine Galerie mit einigen Bildern. Diese kann ich öffnen/schließen und durchklicken.

Leider habe ich das Problem, dass wenn ich mich durch die Galerie durchklicke, er leider, warum auch immer, wieder zurück zum ersten Bild springt, anstatt die Bilder komplett durchzulaufen.

Ich finde den Fehler nicht.

HTML Code:

<div class="gallery-container">
  <div class="gallery" id="gallery">
    <!--Erste Reihe-->
    <img src="1_1.webp" alt="Bild 1_1" onclick="openModal();currentSlide(1)" class="hover-shadow cursor gallery-img" data-index="1">
    <img src="1_2.webp" alt="Bild 1_2" onclick="openModal();currentSlide(2)" class="hover-shadow cursor gallery-img" data-index="2">
    <img src="2.1.webp" alt="Bild 2_1" onclick="openModal();currentSlide(3)" class="hover-shadow cursor gallery-img" data-index="3">

    usw. bis

    <img src="8_2.webp" alt="Bild 8_2" onclick="openModal();currentSlide(23)" class="hover-shadow cursor gallery-img" data-index="23">
    <img src="8_3.webp" alt="Bild 8_3" onclick="openModal();currentSlide(24)" class="hover-shadow cursor gallery-img" data-index="24">
  </div>
  <div id="myModal" class="modal">
    <span class="close cursor" onclick="closeModal()">&times;</span>
    <div class="modal-content">
      <!-- Fügen Sie für jedes Bild in der Galerie eine Modal Slide hinzu -->
      <div class="mySlides">
        <img src="1_1.webp" style="width:100%">
      </div>
      <div class="mySlides">
        <img src="1_2.webp" style="width:100%">

        bis

      <div class="mySlides">
        <img src="8_2.webp" style="width:100%">
      </div>
      <div class="mySlides">
        <img src="8_3.webp" style="width:100%">
      </div>
    </div>

    <!-- Vorwärts/Rückwärts Kontrollen -->
    <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
    <a class="next" onclick="plusSlides(1)">&#10095;</a>
  </div>

JavaScript:

function currentSlide(n) {
  showSlidesModal(slideIndex = n);
}

function showSlidesModal(n) {
  var i;
  var slidesModal = document.getElementsByClassName("mySlides");

  if (n > slidesModal.length) {
    slideIndex = 1
  }

  if (n < 1) {
    slideIndex = slidesModal.length
  }

  for (i = 0; i < slidesModal.length; i++) {
    slidesModal[i].style.display = "none";
  }

  slidesModal[slideIndex - 1].style.display = "block";
}

var galleryImages = document.getElementsByClassName("gallery-img");

for (var i = 0; i < galleryImages.length; i++) {
  galleryImages[i].onclick = function(event) {
    openModal();
    currentSlide(parseInt(event.target.getAttribute('data-index')));
  }
}

for (var i = 0; i < galleryImages.length; i++) {
  galleryImages[i].setAttribute('data-index', i + 1);
}

window.onclick = function(event) {
  if (event.target == document.getElementById('myModal')) {
    closeModal();
  }
}

function plusSlides(n, modal = false) {
  var slides;

  if (modal) {
    slides = document.getElementsByClassName("mySlides");
  }
  else {
    slides = document.getElementsByClassName("slide");
  }

  slideIndex += n;

  if (slideIndex > slides.length) {
    slideIndex = 1
  }

  if (slideIndex < 1) {
    slideIndex = slides.length
  }

  for (var i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }

  slides[slideIndex - 1].style.display = "block";

  if (!modal) {
    resetAnimations(slides[slideIndex - 1]);
  }
}

document.querySelector(".modal .prev").onclick = function() {
  plusSlides(-1, true);
};
document.querySelector(".modal .next").onclick = function() {
  plusSlides(1, true);
};

function openModal() {
  document.getElementById('myModal').style.display = "block";
}

function closeModal() {
  document.getElementById('myModal').style.display = "none";
}

showSlides(slideIndex);
HTML, Webseite, JavaScript, Code, Webdesign, Visual Studio Code
Rechnungsproblem C# -> Python Verknüpfung?

Hallo,

ich habe folgendes Problem:

Ich habe ein ERP-Programm in C# geschrieben. Dieses funktioniert auch einwandfrei. In der Auftragsverwaltungsübersicht habe ich zwei Buttons hinzugefügt: Einmal Rechnung erstellen und einmal Angebot erstellen.

Wenn ich den Knopf Rechnung erstellen klicke, wird ein Python-Code aufgerufen, welcher die Rechnung mit den Daten automatisch erstellt.

Er zeigt immer an, Rechnung erfolgreich erstellt, allerdings erstellt er keine Rechnung bzw. er speichert keine Rechnung ab. Woran könnte das Problem denn liegen?

Hier die Methode, welche aufgerufen wird, wenn ich auf Rechnung erstellen klicke:

private void CreateInvoice(DataGridViewRow row)
{
  try
  {
    var invoiceData = new
    {
      provider_name = "Media Soft",
      provider_address = "Bahnhofstraße 40, 66639 Beispiel",
      provider_mobile = "0174 | 623 655 9",
      provider_email = "klasenjulian@web.de",
      customer_name = $"{row.Cells["Vorname"].Value} {row.Cells["Nachname"].Value}",
      customer_address_line1 = $"{row.Cells["Adresse"].Value}",
      customer_address_line2 = $"{row.Cells["PLZ"].Value} {row.Cells["Ort"].Value}",
      customer_mobile = "",
      date = DateTime.Now.ToString("dd.MM.yyyy"),
      invoice_number = row.Cells["AuftragID"].Value.ToString(),
      customer_number = "Ihre Kundennummer",
      items = new[] {
        new {
          title = row.Cells["Artikelname"].Value.ToString(),
          description = "",
          price = Convert.ToDouble(row.Cells["Einzelpreis"].Value),
          total = Convert.ToDouble(row.Cells["Gesamtpreis"].Value)
        }
      },
      total = Convert.ToDouble(row.Cells["Gesamtpreis"].Value)
    };

    string json = JsonConvert.SerializeObject(invoiceData);
    File.WriteAllText(@"C:\Projekte\rechnung\invoice_data.json", json);

    ProcessStartInfo start = new ProcessStartInfo();
    start.FileName = "python.exe";
    start.Arguments = string.Format("{0} {1}", @"C:\Projekte\rechnung\rechnung.py", @"C:\Projekte\rechnung\invoice_data.json");
    start.UseShellExecute = false;
    start.RedirectStandardOutput = true;
    start.RedirectStandardError = true;

    using (Process process = Process.Start(start))
    {
      using (StreamReader reader = process.StandardOutput)
      {
        string stderr = process.StandardError.ReadToEnd();
        string result = reader.ReadToEnd();

        if (string.IsNullOrEmpty(stderr))
        {
          MessageBox.Show("Rechnung erfolgreich erstellt!");
        }
        else
        {
          MessageBox.Show("Fehler beim Erstellen der Rechnung:\n" + stderr);
        }
      }
    }
  }
  catch (Exception ex)
  {
    MessageBox.Show("Fehler beim Erstellung der Rechung: " + ex.Message);
  }
}

Hier der Python-Code:

  • Rechnung - Pastebin.com

Hier die Python-Daten:

  • Daten zur Projektmappe
  • Name: rechnung
  • Pfad: C:\Projekte\rechnung\rechnung.sln
  • Startprojekt: rechnung

Daten zur Projekteigenschaft:

Allgemein:

  • Arbeitsverzeichnis: .
  • Startdatei: C:\Projekte\rechnung\rechnung.py

Sonstiges:

  • Projektdatei: rechnung.pyproj
  • Projektordner: C:\Projekte\rechnung
  • Projektstartseite: C:\Projekte\rechnung
C Sharp, Programmiersprache, Python, Visual Studio
Excel in VS einbinden?

Hallo,

aktuell erstelle ich ein Programm mit C#, welches Daten, die ich eingebe, in Excel einfügt. Um Excel zu verwenden, habe ich das EPPlus NuGet-Paket installiert. Irgendwie gab es dort Probleme mit dem Zugriff (Datenschutz). Daher wollte ich die Excel-Datei direkt in Visual Studio einfügen und sie so direkt bearbeiten. Dafür bin ich auf die Projektmappe gegangen, habe einen Rechtsklick gemacht, "Hinzufügen" ausgewählt, dann "Vorhandenes Element" und schließlich die zuvor erstellte (gespeicherte .xlsx) Datei aus Excel ausgewählt.

Danach kam immer die Meldung: "Entweder wird das Dokumentformat nicht unterstützt, oder das Dokument enthält binäre Zeichen, die mit einer anderen Anwendung geöffnet werden müssen."

Ich kann die Meldung bestätigen, und die Excel-Datei wird im Projektfenster als Element angezeigt. Allerdings funktioniert mein Code nicht, weil die Excel-Datei nicht richtig eingebunden wurde.

Zur Excel-Datei:

Ich habe in Excel einfach eine leere Arbeitsmappe erstellt und diese in einem leeren Ordner als "Ernährungsdaten.xlsx" abgespeichert, natürlich ohne Schreibschutz.

Wie man am Namen erkennen kann, geht es um Ernährungsdaten, die verarbeitet werden. Später kommen auch noch Datenbanken usw. hinzu und Vorgänge werden automatisiert. Allerdings muss ich jetzt erst einmal die Excel-Datei richtig einbinden.

Ich hoffe, Ihr könnt mir helfen.

Danke im Voraus.

Microsoft Excel, C Sharp, Visual Studio