AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabelle und DBGrid aus DB füllen
Thema durchsuchen
Ansicht
Themen-Optionen

Tabelle und DBGrid aus DB füllen

Ein Thema von mckruep · begonnen am 28. Mai 2008 · letzter Beitrag vom 28. Mai 2008
Antwort Antwort
Seite 2 von 2     12   
mckruep

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

Re: Tabelle und DBGrid aus DB füllen

  Alt 28. Mai 2008, 12:59
Alles Umbauen wäre schon ne riesen Arbeit wo mir leider die Zeit ausgehen würde.

Aber ich kann einfach ne 2te Verbindung zur Datenbank öffnen oder nicht? Ist zwar Programmiertechnisch nicht sauber, aber WAYNE. Hauptsache läuft. Ist für eine Tafel hier im Ort, die sind froh das die das so umsonst bekommen
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Tabelle und DBGrid aus DB füllen

  Alt 28. Mai 2008, 14:22
Hallo,

und womit werden Daten eingetragen ?


Heiko
Heiko
  Mit Zitat antworten Zitat
mckruep

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

Re: Tabelle und DBGrid aus DB füllen

  Alt 28. Mai 2008, 15: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
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Tabelle und DBGrid aus DB füllen

  Alt 28. Mai 2008, 18:35
Hallo,

ich fass mal zusammen,

1 ( ) der sieht wirklich so aus
2 ( ) die Formatierung ist verrutscht


Im Fall vom 1
-> Grauenhaft
Handschuhe anziehen und auf Sonderdeponie entsorgen


Im Fall vom 2

-> Puh, Glück gehabt




Nu aber im Ernst´. Zurück zu 1.


eine Zeile ist mir aufgefallen

FResult := fmysql.query(strabfrage, True, ex); Hier wird also eine Query ausgeführt, deren Text in strabfrage steht,
d.h. dieses fmysql.query muss in der Lage sein, Queries auszuführen (ExecSQL),
dann mussirgendwie ja auch ein DataSet geöffnet werden können (.Open),
was dann Ausgangfsbasis für ein DBGrid sein kann.

Da würde ich mal beginnen.

Mit dieser Query könnte man sich an eine DataSource.Dataset anbinden,
aber ich habe echt keinen Nerv mehr heute (und morgen), mir diesen Code anzutun.


Hänge mal das ganze Projekt als Zip oder Rar an,
wenn es geht.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Tabelle und DBGrid aus DB füllen

  Alt 28. Mai 2008, 18:50
Das sieht mir stark nach MySQL Direct aus.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz