Datensätze per CheckListBox auswählen und kopieren
-
Hallo!
Ich habe eine CheckListBox welche mit verschiedenen Datensätzen gefüllt wird. Nach dem ich dort die gewünschten Datensätze selektiert habe werden diese in eine leere Tabelle kopiert. Markiere ich alle Datensätze funktioniert es wunderbar. Markiere ich nur einzelne Datensätze macht das Programm mist, obwohl der Inhalt der StringList stimmt.
Hier mal mein Code:
Hier werden die CheckListBoxen gefüllt...
void __fastcall Tf_abrechnung_automaten_waehlen::FormShow(TObject *Sender) { if (CheckListBox1->Count == 0) { for (int i = 0; i < f_start->ADOQuery1_Automatenverwaltung->RecordCount; i++) // CheckListBox1 fuellen { if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD_ABRECHNUNG")->AsInteger > 0) // Pruefen ob Automat vorgemerkt ist { ListBox4->Items->Add("Ja"); } if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD_ABRECHNUNG")->AsInteger == 0) // Pruefen ob Automat vorgemerkt ist { ListBox4->Items->Add("Nein"); } if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SALDO2_VORGEMERKT")->AsCurrency == 0) // Pruefen ob Saldo2 vorgemerkt ist { RichEdit1->Lines->Add("0.00 €"); } if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SALDO2_VORGEMERKT")->AsCurrency < 0 || f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SALDO2_VORGEMERKT")->AsCurrency > 0) // Pruefen ob Automat vorgemerkt ist { RichEdit1->Lines->Add(FloatToStrF (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SALDO2_VORGEMERKT")->AsFloat, ffCurrency, 7, 2)); } CheckListBox1->Items->Add (f_start->ADOQuery1_Automatenverwaltung->FieldByName("TYP") ->AsString); ListBox1->Items->Add (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("BEZEICHNUNG")->AsString); ListBox2->Items->Add (f_start->ADOQuery1_Automatenverwaltung->FieldByName("SNNR") ->AsString); ListBox3->Items->Add (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("DATUM_KD_ABHOLUNG")->AsDateTime); f_start->ADOQuery1_Automatenverwaltung->Next(); } } }
Und hier werden die Datensätze selektiert...
void __fastcall Tf_abrechnung_automaten_waehlen::CheckListBox1Click(TObject *Sender) { // Stringliste erstellen f_abrechnung->pGewaehlteAutomaten->Clear(); // Stringliste leeren for (int i = 0; i < CheckListBox1->Count; i++) // Stringliste fuellen { if (CheckListBox1->State[i]) { f_abrechnung->pGewaehlteAutomaten->Add(ListBox2->Items->Strings[i]); } } }
Und hier werden die selektierten Datensätze kopiert...
// An ersten Datensatz springen for (int x = 0; x < pGewaehlteAutomaten->Count; x++) { if (pGewaehlteAutomaten->Strings[x] == f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SNNR")->AsString) { // Tabelle Abrechnung_Erfassung mit Daten fuellen ADOTable2->Insert(); if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD_ABRECHNUNG")->AsInteger > 0) // Automat ist vorgemerkt { ADOTable2->FieldByName("NR_KD") ->AsInteger = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD_ABRECHNUNG")->AsInteger; pVorgemerkteAutomaten->Add (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SNNR")->AsString); // Kundennummer merken und Automat aus Liste der vorgemerkte loeschen } if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD")->AsInteger > 0) // Automat ist nicht vorgemerkt { ADOTable2->FieldByName("NR_KD") ->AsInteger = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD")->AsInteger; } if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD")->AsInteger == 0) // Automat ist vorgemerkt { ADOTable2->FieldByName("NR_KD") ->AsInteger = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD_ABRECHNUNG")->AsInteger; } ADOTable2->FieldByName("NR_KD_ABRECHNUNG") ->AsInteger = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("NR_KD_ABRECHNUNG")->AsInteger; if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SALDO2_VORGEMERKT")->AsCurrency < 0 || f_start->ADOQuery1_Automatenverwaltung->FieldByName("SALDO2_VORGEMERKT")->AsCurrency > 0) { ADOTable2->FieldByName("KASSENINHALT") ->AsCurrency = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SALDO2_VORGEMERKT")->AsCurrency; } if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SALDO2_VORGEMERKT")->AsCurrency == 0) { ADOTable2->FieldByName("KASSENINHALT")->AsCurrency = 0; } ADOTable2->FieldByName("MWST_SPIELER")->AsCurrency = 0; ADOTable2->FieldByName("NETTO")->AsCurrency = 0; ADOTable2->FieldByName("VERG_STEUER")->AsCurrency = 0; if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("GEBUEHR_KD")->AsCurrency == 0) { ADOTable2->FieldByName("GEBUEHR") ->AsCurrency = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("GEBUEHR_KD_ABHOLUNG")->AsCurrency; } if (f_start->ADOQuery1_Automatenverwaltung->FieldByName ("GEBUEHR_KD")->AsCurrency > 0) { ADOTable2->FieldByName("GEBUEHR") ->AsCurrency = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("GEBUEHR_KD")->AsCurrency; } ADOTable2->FieldByName("VERBLEIB_ABRECHNUNG") ->AsCurrency = 0; ADOTable2->FieldByName("PROZENT")->AsCurrency = 0; ADOTable2->FieldByName("ANTEIL_WIRT")->AsCurrency = 0; ADOTable2->FieldByName("GERAETE_NR") ->AsString = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("SNNR")->AsString; ADOTable2->FieldByName("TYP") ->AsString = f_start->ADOQuery1_Automatenverwaltung->FieldByName("TYP") ->AsString; ADOTable2->FieldByName("LNR_ABRECHNUNG") ->AsInteger = iLaufendeNummerAbrechnung; ADOTable2->FieldByName("AUSZAHLUNG")->AsCurrency = 0; if(f_start->ADOQuery1_Automatenverwaltung->FieldByName("PROZENT_WIRT")->AsInteger == 0) { ADOTable2->FieldByName("PROZENT_WIRT") ->AsFloat = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("PROZENT_WIRT_VORGEMERKT")->AsFloat; } if(f_start->ADOQuery1_Automatenverwaltung->FieldByName("PROZENT_WIRT")->AsInteger > 0) { ADOTable2->FieldByName("PROZENT_WIRT") ->AsFloat = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("PROZENT_WIRT")->AsFloat; } ADOTable2->FieldByName("BEZEICHNUNG") ->AsString = f_start->ADOQuery1_Automatenverwaltung->FieldByName ("BEZEICHNUNG")->AsString; ADOTable2->FieldByName("VERG_STEUER_WIRT")->AsCurrency = 0; ADOTable2->FieldByName("MWST_ANTEIL_WIRT")->AsCurrency = 0; if (f_start->ADOQuery1_Kundenverwaltung->FieldByName ("LETZTE_ABRECHNUNG_GS")->AsString == "") { ADOTable2->FieldByName("DATUM_VON") ->AsString = "01.01.2010"; DBGrid1->Columns->Items[1]->ReadOnly = false; } else { ADOTable2->FieldByName("DATUM_VON") ->AsString = f_start->ADOQuery1_Kundenverwaltung ->FieldByName("LETZTE_ABRECHNUNG_GS")->AsDateTime; DBGrid1->Columns->Items[1]->ReadOnly = false; } ADOTable2->FieldByName("DATUM_BIS") ->AsString = DateToStr(Date()); if(f_start->ADOQuery1_Automatenverwaltung->FieldByName("DATUM_KD_ABHOLUNG")->AsDateTime > "01.01.2010") { ADOTable2->FieldByName("DATUM_BIS") ->AsString = f_start->ADOQuery1_Automatenverwaltung->FieldByName("DATUM_KD_ABHOLUNG")->AsDateTime; } ADOTable2->FieldByName("VERG_STEUER_VORGEMERKT")->AsInteger = f_start->ADOQuery1_Automatenverwaltung->FieldByName("VERG_STEUER_VORGEMERKT")->AsInteger; ADOTable2->FieldByName("GUTSCHRIFT")->AsCurrency = 0; ADOTable2->Post(); f_start->ADOQuery1_Automatenverwaltung->Next(); } }
Wäre nett wenn mir jemand auf die Sprünge helfen könnte, ich kann hier nämlich keinen Fehler finden...
LG Maik