Einzelnen Beitrag anzeigen

mckruep

Registriert seit: 28. Mai 2008
9 Beiträge
 
#13

Re: Tabelle und DBGrid aus DB füllen

  Alt 28. Mai 2008, 16:11
Im hauptfenster werden Daten in Edit Felder eingegeben und dann eingetragen
Hoffe das hilft dir weiter
:

Delphi-Quellcode:
procedure TfrmMain.KundeanlegenClick(Sender: TObject);
begin
   // Verbindung prüfen
   if FMySQL.Connected = false then begin
      LogHinzufuegen('Kunde anlegen: Keine SQL-Verbindung');
      messagedlg(strMySqlKeineVerbindung,mterror,[mbok],0 );
   end;
   frmKundeAnlegen.strKundennummer := '';
   frmKundeAnlegen.Tag := 0;
   frmKundeAnlegen.ShowModal;
   if frmKundeAnlegen.Tag = 1 then BescheideAendernClick(Sender);
end;
Delphi-Quellcode:
procedure TfrmMain.BescheideAendernClick(Sender: TObject);
var strKundennummer:string;
begin
   // Verbindung prüfen
   if FMySQL.Connected = false then begin
      LogHinzufuegen('btnBescheideAendernClick: Keine SQL-Verbindung');
      messagedlg(strMySqlKeineVerbindung,mterror,[mbok],0 );
   end;

  strKundennummer := FeldAusGridLesen(frmmain.grdKunden, 'Kd.-Nr.');
  if strKundennummer <> 'then begin
    frmBescheide.strKundennummer := strKundennummer;
    frmBescheidEinf.strKundennummer := strKundennummer;
    frmBescheide.ShowModal;
    frmmain.Refresh;
    frmmain.grdKundenClick(frmMain); // Aktualisieren
  end;
end;
Delphi-Quellcode:

procedure TfrmMain.grdKundenClick(Sender: TObject);
var intZaehler,intZaehlerZwei,intAnzahlGueltig, intAnzahlHauptkundeE,intAnzahlHauptkundeK,intAnzahlE,intAnzahlK,intAnzahlHauptkundeUngueltig,intAnzahlUngueltig:integer;
    strSpalte,strInhalt,strKundennummer,strAbfrage,strGueltigAb,strGueltigBis,strBescheidArt:string;
    objFeldDefinitionen:TMysql_FieldDef;
    ex:boolean;
    datDatum:TDateTime;
    fltUmsatz,fltZahlung,fltKundenSaldo:real;
begin
      // Verbindung prüfen
      if FMySQL.Connected = false then begin
        LogHinzufuegen('grdKundenClick: Keine SQL-Verbindung');
        messagedlg(strMySqlKeineVerbindung,mterror,[mbok],0 );
      end;

      // Fenster rücksetzen
      FelderLeeren();

      // Kundennummer im Grid suchen
      strKundennummer := FeldAusGridLesen(frmmain.grdKunden, 'Kd.-Nr.');
      if strKundennummer = 'then begin
         LogHinzufuegen('grdKundenClick: Kundennummer konnte nicht aus Grid gelesen werden');
         // messagedlg('Ein interner Fehler ist beim Abrufen der Kundendaten aufgetreten.' + #10#13 + 'Prüfen Sie die Datenbankverbindung und versuchen Sie es erneut.',mterror,[mbok],0 );
         Exit;
      end;

      // Fortschritt zeigen
      frmmain.lblKunden.Caption := 'Lese Kundendaten...';
      frmmain.lblKunden.Refresh;

      // Felder rücksetzen
      intAnzahlE := 0;
      intAnzahlK := 0;
      intAnzahlUngueltig := 0;
      intAnzahlHauptkundeE := 0;
      intAnzahlHauptkundeK := 0;

      // Kundenstammdaten lesen
      fltKundenSaldo := 0;
      strAbfrage := 'select Kundennummer,Nachname,Vorname,Strasse as Straße,Hausnummer,Postleitzahl,Ort as Wohnort,Geburtsdatum,Kunde_seit as "Kunde seit",Bezeichnung as Verteilstelle,Bemerkungen,Fruehere_Kundennummer as "Orts Kundennumer",Kundenkonto_Saldo from '  + strEinstellungenSQLTabellenKundenstamm + ' INNER JOIN ' + strEinstellungenSQLTabellenPLZ + ' ON ('+ strEinstellungenSQLTabellenKundenstamm +'.Postleitzahl_id = '+ strEinstellungenSQLTabellenPLZ +'.Postleitzahl_id) INNER JOIN ' + strEinstellungenSQLTabellenVerteilstellen +' ON (' + strEinstellungenSQLTabellenKundenstamm + '.Verteilstellen_Nr =' + strEinstellungenSQLTabellenVerteilstellen + '.Verteilstellen_Nr) where (';
      strAbfrage := strAbfrage + 'Kundennummer="' + strKundennummer + '")';
      LogHinzufuegen('grdKundenClick: SQL-Abfrage: ' + strabfrage);
      FResult := fmysql.query(strabfrage, True, ex);
      if (ex = True) and (fresult.rowscount > 0) then begin
        LogHinzufuegen('grdKundenClick: Resultat: OK, Kunden ' + inttostr(FResult.RowsCount) + ' Mal gefunden');

        for intZaehler := 0 to fresult.FieldsCount - 1 do begin
          objFeldDefinitionen := fresult.FieldDef(intZaehler)^;
          strspalte := objFeldDefinitionen.name;
          strInhalt := fresult.FieldValue(intzaehler);
          loghinzufuegen('grdKundenClick: Verarbeite Kunden-Stammdaten ' + strspalte + ' / ' + strinhalt);

          try
            if strspalte = 'Vornamethen edtVorname.text := strinhalt;
            if strspalte = 'Nachnamethen edtName.text := strinhalt;
            if strspalte = 'Postleitzahlthen edtPLZ.text := strinhalt;
            if strspalte = 'Wohnortthen edtWohnort.text := strinhalt;
            if strspalte = 'Straßethen edtStrasse.text := strinhalt;
            if strspalte = 'Hausnummerthen edtHausnr.text := strinhalt;
            if strspalte = 'Geburtsdatumthen begin
              edtGeburtsdatum.text := Transformdate(strinhalt,MysqlDateToDate);

              try
                    strInhalt := Transformdate(strinhalt,MysqlDateToDate);

                    // ############### DEBUG ####################

                    // Datum vor 18 Jahren errechnen
                    if FormatDateTime('dd.mm.', frmMain.dteDatum.date) = '29.02.then begin // Schaltjahr
                      datDatum := strtodate('28.02.' + inttostr(strtoint(FormatDateTime('yyyy', frmMain.dteDatum.date)) - 18));
                    end else begin
                      datDatum := strtodate(FormatDateTime('dd.mm.yyyy', strtodate(FormatDateTime('dd.mm.', frmMain.dteDatum.date) + inttostr(strtoint(FormatDateTime('yyyy', frmMain.dteDatum.date)) - 18))));
                    end;

                    // Datum vergleichen
                    if isDatePlus(strInhalt) = True then begin // Datum prüfen
                      if strtodate(strInhalt) > datDatum then begin // Kind/Jugendlicher unter 18
                        intAnzahlHauptkundeK := intAnzahlHauptkundeK + 1;
                        LogHinzufuegen('grdKundenClick: Hauptkunde Kind/Jugendlicher');
                      end else begin // Erwachsener
                        intAnzahlHauptkundeE := intAnzahlHauptkundeE + 1;
                        LogHinzufuegen('grdKundenClick: Hauptkunde Erwachsener');
                      end;
                    end else begin
                      LogHinzufuegen('grdKundenClick: Hauptkunde - Datum ungültig');
                      intAnzahlHauptkundeUngueltig := intAnzahlHauptkundeUngueltig + 1;
                    end;
              except
                    LogHinzufuegen('grdKundenClick: Fehler beim Verarbeiten von Kunden-Daten');
              end;
            end;
            if strspalte = 'Kundennummerthen edtKdnNr.text := strinhalt;
            if strspalte = 'Kunde seitthen edtKundeSeit.text := Transformdate(strinhalt,MysqlDateToDate);
            if strspalte = 'Verteilstellethen edtVerteilstelle.text := strinhalt;
            if strspalte = 'Orts Kundennumerthen edtOertlKdnr.text := strinhalt;
            if strspalte = 'Bemerkungenthen begin
              mmoBemerkung.Lines.Clear;
              mmoBemerkung.Lines.text := BermerkungenDeKodieren(strInhalt);
            end;
            if strSpalte = 'Kundenkonto_Saldothen fltKundenSaldo := StrToFloat(StringReplace(strinhalt, '.', ',', []));
          except
            LogHinzufuegen('grdKundenClick: Fehler beim Verarbeiten von Kunden-Stammdaten');
          end;
        end;
      end else begin
        LogHinzufuegen('grdKundenClick: Resultat: Fehler oder 0 Resultate - ' + fmysql.LastError);
        messagedlg('Ein Fehler ist beim Abrufen der Kundendaten aufgetreten.' + #10#13 + 'Prüfen Sie die Datenbankverbindung und versuchen Sie es erneut.',mterror,[mbok],0 );
      end;
      mmoBemerkung.Perform(EM_LineScroll, 0 , 0); // Scrollbar nach oben rollen

      // Bescheid-Daten lesen
      frmmain.mmoBescheid.Clear;
      strAbfrage := 'select Bescheid_Art, Gueltig_Ab, Gueltig_Bis from '  + strEinstellungenSQLTabellenBescheide + ' where (';
      strAbfrage := strAbfrage + 'Kundennummer="' + strKundennummer + '")';
      LogHinzufuegen('grdKundenClick: SQL-Abfrage: ' + strabfrage);
      FResult := fmysql.query(strabfrage, True, ex);
      if (ex = True) and (fresult.rowscount > 0) then begin
        LogHinzufuegen('grdKundenClick: Resultat: OK, ' + inttostr(FResult.RowsCount) + ' Bescheide gefunden');

        intAnzahlGueltig := 0;
        for intZaehler := 0 to fresult.RowsCount - 1 do begin
            fresult.RecNo := intZaehler;
            strGueltigAb := '';
            strGueltigBis := '';
            strBescheidArt := '';

            for intZaehlerZwei := 0 to fresult.FieldsCount -1 do begin
              objFeldDefinitionen := fresult.FieldDef(intZaehlerZwei)^;
              strSpalte := objFeldDefinitionen.name;
              strInhalt := fresult.FieldValue(intZaehlerZwei);
              LogHinzufuegen('grdKundenClick: Verarbeiten Daten für Bescheid ' + IntToStr(intZaehler) + ' ' + strspalte + ' / ' + strinhalt);

              try
                if strspalte = 'Gueltig_Abthen begin
                  strInhalt := Transformdate(strinhalt,MysqlDateToDate);
                  if isDatePlus(strInhalt) = true then begin
                    strGueltigAb := strInhalt;
                  end else begin
                    LogHinzufuegen('grdKundenClick: Datum ungültig');
                    strGueltigAb := '';
                  end;
                end;
                if strspalte = 'Gueltig_Bisthen begin
                  strInhalt := Transformdate(strinhalt,MysqlDateToDate);
                  if isDatePlus(strInhalt) = true then begin
                    strGueltigBis := strInhalt;
                  end else begin
                    LogHinzufuegen('grdKundenClick: Datum ungültig');
                    strGueltigBis := '';
                  end;
                end;
                if strspalte = 'Bescheid_Artthen strBescheidArt := strinhalt;
              except
                LogHinzufuegen('grdKundenClick: Fehler beim Verarbeiten von Bescheid-Daten');
              end;
            end;
            strInhalt := inttostr(intZaehler + 1) + ': ' + strBescheidArt;
            if (isDatePlus(strGueltigAb) = True) then begin
               if strGueltigBis = 'then strGueltigBis := DateToStr(frmMain.dteDatum.date);
               if (StrToDate(strGueltigAb) <= frmMain.dteDatum.date) and (StrToDate(strGueltigBis) >= StrToDate(DateToStr(frmMain.dteDatum.date)) {frmMain.dteDatum.date}) then begin
                  strInhalt := strInhalt + ' (gültig)';
                  intAnzahlGueltig := intAnzahlGueltig + 1;
               end else if (StrToDate(strGueltigAb) >= frmMain.dteDatum.date) and ((StrToDate(strGueltigBis) >= StrToDate(strGueltigAb)) or (StrToDate(strGueltigBis) = StrToDate(DateToStr(frmMain.dteDatum.date)))) then begin
                  strInhalt := strInhalt + ' (noch nicht gültig)';
               end else begin
                  strInhalt := strInhalt + ' (abgelaufen)';
               end;
            end else begin
               strInhalt := strInhalt + ' (Daten ungültig)';
               LogHinzufuegen('grdKundenClick: Bescheid-Daten ungültig');
            end;
            frmmain.mmoBescheid.Lines.Add(strInhalt);
        end;
        if intAnzahlGueltig = 0 then frmmain.mmoBescheid.Lines.Add('Fazit: Keine gültigen Bescheide gefunden.')
        else if intAnzahlGueltig = 1 then frmmain.mmoBescheid.Lines.Add('Fazit: ' + inttostr(intAnzahlGueltig) + ' gültiger Bescheid')
        else if intAnzahlGueltig > 1 then frmmain.mmoBescheid.Lines.Add('Fazit: ' + inttostr(intAnzahlGueltig) + ' gültige Bescheid');
      end else begin
        LogHinzufuegen('grdKundenClick: Resultat: Fehler oder 0 Resultate - ' + fmysql.LastError);
        frmmain.mmoBescheid.Lines.Add('(keine Bescheide erfasst)');
        // messagedlg('Ein Fehler ist beim Abrufen der Bescheide aufgetreten.' + #10#13 + 'Prüfen Sie die Datenbankverbindung und versuchen Sie es erneut.',mterror,[mbok],0 );
      end;
      mmoBescheid.Perform(EM_LineScroll, 0 , mmoBescheid.Lines.Count-1); // Scrollbar nach oben rollen

      // Weitere-Personen-Daten lesen
      frmmain.edtAnzErw.text := '0';
      frmmain.edtAnzKinder.text := '0';
      strAbfrage := 'select Geburtsdatum from '  + strEinstellungenSQLTabellenFamilienmitglieder + ' where (';
      strAbfrage := strAbfrage + 'Kundennummer="' + strKundennummer + '")';
      LogHinzufuegen('grdKundenClick: SQL-Abfrage: ' + strabfrage);
      FResult := fmysql.query(strabfrage, True, ex);
      if (ex = True) and (fresult.rowscount > 0) then begin
          LogHinzufuegen('grdKundenClick: Resultat: OK, ' + inttostr(FResult.RowsCount) + ' weitere Personen gefunden');

          for intZaehler := 0 to fresult.RowsCount - 1 do begin
              fresult.RecNo := intZaehler;

              for intZaehlerZwei := 0 to fresult.FieldsCount -1 do begin
                objFeldDefinitionen := fresult.FieldDef(intZaehlerZwei)^;
                strSpalte := objFeldDefinitionen.name;
                strInhalt := fresult.FieldValue(intZaehlerZwei);
                LogHinzufuegen('grdKundenClick: Verarbeite Daten für weitere Person ' + IntToStr(intZaehler) + ' ' + strspalte + ' / ' + strinhalt);

                if strspalte = 'Geburtsdatumthen begin
                  try
                    strInhalt := Transformdate(strinhalt,MysqlDateToDate);

                    // Datum vor 18 Jahren errechnen
                    if FormatDateTime('dd.mm.', frmMain.dteDatum.date) = '29.02.then begin // Schaltjahr
                      datDatum := strtodate('28.02.' + inttostr(strtoint(FormatDateTime('yyyy', frmMain.dteDatum.date)) - 18));
                    end else begin
                      datDatum := strtodate(FormatDateTime('dd.mm.yyyy', strtodate(FormatDateTime('dd.mm.', frmMain.dteDatum.date) + inttostr(strtoint(FormatDateTime('yyyy', frmMain.dteDatum.date)) - 18))));
                    end;

                    // Datum vergleichen
                    if isDatePlus(strInhalt) = True then begin // Datum prüfen
                      if strtodate(strInhalt) > datDatum then begin // Kind/Jugendlicher unter 18
                        intAnzahlK := intAnzahlK + 1;
                        LogHinzufuegen('grdKundenClick: Kind/Jugendlicher');
                      end else begin // Erwachsener
                        intAnzahlE := intAnzahlE + 1;
                        LogHinzufuegen('grdKundenClick: Erwachsener');
                      end;
                    end else begin
                      LogHinzufuegen('grdKundenClick: Datum ungültig');
                      intAnzahlUngueltig := intAnzahlUngueltig + 1;
                    end;
                  except
                    LogHinzufuegen('grdKundenClick: Fehler beim Verarbeiten von Weitere-Kunden-Daten');
                  end;
                end;
              end;
          end;
      end else begin
        LogHinzufuegen('grdKundenClick: Resultat: Fehler oder 0 Resultate - ' + fmysql.LastError);
        // messagedlg('Ein Fehler ist beim Abrufen der weiteren Personen aufgetreten.' + #10#13 + 'Prüfen Sie die Datenbankverbindung und versuchen Sie es erneut.',mterror,[mbok],0 );
      end;

      // Personen-Daten eintragen (inkl. ungültigen Hauptkunden- und Nebenkunden-Geburtstage)
      frmmain.edtAnzErw.text := inttostr(intAnzahlE + intAnzahlHauptkundeE);
      if (intAnzahlUngueltig > 0) or (intAnzahlHauptkundeUngueltig > 0) then
        frmmain.edtAnzErw.text := frmmain.edtAnzErw.text + ' (+' + inttostr(intAnzahlUngueltig + intAnzahlHauptkundeUngueltig) + '?)';
      frmmain.edtAnzKinder.text := inttostr(intAnzahlK + intAnzahlHauptkundeK);

      // Umsatz-Daten eintragen
      frmmain.edtZuZahlen.text := Format('%f',[reaEinstellungenGebuehrErwachsener * (intAnzahlE + intAnzahlHauptkundeE + intAnzahlUngueltig + intAnzahlHauptkundeUngueltig) + reaEinstellungenGebuehrKind * (intAnzahlK + intAnzahlHauptkundeK)]);
      frmmain.edtHeuteKassiert.text := frmmain.edtZuZahlen.text;
      frmmain.edtNochOffen.text := Format('%f',[fltKundenSaldo]);

      // Fortschritt zeigen
      frmmain.lblKunden.Caption := 'Gefundene Kunden: ' + IntToStr(frmmain.grdKunden.RowCount - 1);

      // Fokus auf das Umsatz-Feld setzen
      try
        frmmain.edtHeuteKassiert.SetFocus;
      except
      end;

end;
  Mit Zitat antworten Zitat