Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben (https://www.delphipraxis.net/99378-nur-bestimmte-anzahl-sql-zeilen-datei-schreiben.html)

Svenkan 11. Sep 2007 12:49


Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
Hallo Leute,
und zwar möchte ich Vertretungspläne aufm Monitor anzeigen lassen.
Dafür sollen HTML-Dateien mit den jeweiligen Daten geschrieben werden, welche ich über den TWebBrowser anzeigen und weiterschalten lasse. Das funktioniert problemlos.
Aber: da nur X Zeilen (X festgelegt durch den Benutzer)/Seite draufpassen, muss ich nach X ja auch eine neue Datei schreiben lassen.
Und da hab ich Probleme mit.
Das ganze wird per TQuery ausgelesen.
Nur weiß ich grad nicht so ganz, wie ich das gebacken bekomme, dass ich dann eine neue Datei anfange und dann weiterschreiben lasse.
Hat da jemand ne Idee für ein Grundgerüst (mehr brauch ich nicht, da ich den Rest der Dateierstellung schon habe)? Denke ja mal, dass man das über Schleifen machen müsste..

mkinzler 11. Sep 2007 12:52

Re: Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
Welche Datenbank?
Wie erzeugst du die HTML-Datei?

Svenkan 11. Sep 2007 12:58

Re: Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
BDE.
Der Code ist jetzt erstmal noch sehr durcheinander, hab erst einmal die Funktion soweit zusammengebastelt, Optimierungen kommen noch. Also nicht zu sehr schimpfen. ^^


Delphi-Quellcode:
  AssignFile(Datei, (ExtractFilePath(ParamStr(0)) + '\monitor\vplan_'+wts+'_'+IntToStr(l_count)+'.htm'));
  Rewrite(Datei);
  a:='<html>'+sLineBreak+'<head>'+sLineBreak+'<title>Vertretungsplan '+schule+'</title>'+sLineBreak+'<meta http-equiv="expires" content="0">'+sLineBreak+'<link rel="stylesheet" href="vplan.css" type="text/css">'+sLineBreak+'</head>'+sLineBreak+'<body>'+sLineBreak+'<div class="vplan">';
  WriteLn(Datei, a);
  b:=sLineBreak+'<table cellpadding=2 cellspacing=1 border=0 width="98%" bgcolor="#000000">';
  WriteLn(Datei, b);
 if order_mon='KLASSEN' then
  ba:=sLineBreak+'<tr>'+sLineBreak+'<td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tklasse+'</font></td>'+sLineBreak+'<td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tstunde+'</font></td>'+sLineBreak+'<td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tfehlt+'</font></td>'
 else
  ba:=sLineBreak+'<tr>'+sLineBreak+'<td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tstunde+'</font></td>'+sLineBreak+'<td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tklasse+'</font></td>'+sLineBreak+'<td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tfehlt+'</font></td>';
  WriteLn(Datei, ba);
  c:=sLineBreak+'<td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tvertritt+'</font></td>'+sLineBreak+'<td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tfach+'</font></td>'+sLineBreak+'<td width=37% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+tbemerkung+'</font></td>'+sLineBreak+' <td width=9% class="tblhead">'+sLineBreak+'<font class="font_tblhead">'+traum+'</font></td>'+sLineBreak+'</tr>';
  WriteLn(Datei, c);

//Ab hier die Datensätze

 Query1.First;
 if Pred(Query1.RecordCount)=-1 then begin
   hcode:='<tr bgcolor="'+tdc1+'">'+sLineBreak+'<td colspan="7"><font color="'+fc1+'"> [b]Für '+wochentag+', den '+today+' ist kein Eintrag vorhanden![/b]</font></td>'+sLineBreak+'</tr>';
   WriteLn(Datei, hcode);
 end
 else begin
 while not Query1.EOF do begin
  for count := 0 to Pred(Query1.RecordCount) do begin
   if count mod 2 = 0 then begin
    tdcolor:=tdc1;
    fccolor:=fc1;
   end
   else begin
    fccolor:=fc2;
    tdcolor:=tdc2;
   end;

   if ((Query1.FieldByName('FUER').AsString='') AND (Query1.FieldByName('WERT').AsString='M') AND (Query1.FieldByName('ANZAHL').AsString='1')) then begin
     if (pos('fällt aus', Query1.FieldByName('BEMER_SCH').AsString)<>0) then begin
      fehlt1:='<font class="fehlt">'+Query1.FieldByName('WER').AsString+'</font>';
      fach1:='<font class="fehlt">'+Query1.FieldByName('FACH').AsString+'</font>';
      vertritt1:='';
    end
    else begin
      fehlt1:=Query1.FieldByName('WER').AsString;
      fach1:=Query1.FieldByName('FACH').AsString;
      vertritt1:=Query1.FieldByName('WER').AsString;
    end;
   end
   else begin
     if (pos('fällt aus', Query1.FieldByName('BEMER_SCH').AsString)<>0) then begin
      fehlt1:='<font class="fehlt">'+Query1.FieldByName('FUER').AsString+'</font>';
      vertritt1:='<font class="fehlt">'+Query1.FieldByName('WER').AsString+'</font>';
      fach1:='<font class="fehlt">'+Query1.FieldByName('FACH').AsString+'</font>';
     end
     else begin
      fehlt1:=Query1.FieldByName('FUER').AsString;
      vertritt1:=Query1.FieldByName('WER').AsString;
      fach1:=Query1.FieldByName('FACH').AsString;
     end;
   end;

  if order_mon='KLASSEN' then begin
   if Query1.FieldByName(sklassen).AsString=Label13.Caption then klasse:=''
   else klasse:='[b]'+Query1.FieldByName(sklassen).AsString+'[/b]';
   Label13.Caption:=Query1.FieldByName(sklassen).AsString;
   stunde:=Query1.FieldByName('S').AsString+'.';
   if NOT baender then
    klasse:=Compress(klasse);
  end
  else begin
   if Query1.FieldByName('S').AsString=Label13.Caption then klasse:=''
   else klasse:=Query1.FieldByName('S').AsString+'.';
   Label13.Caption:=Query1.FieldByName('S').AsString;
   stunde:='[b]'+Query1.FieldByName(sklassen).AsString+'[/b]';
   if NOT baender then
    stunde:=Compress(stunde);
  end;

  if (NOT (vlehrer) AND NOT (vertritt1='<font class="fehlt"></font>') AND NOT (vertritt1='')) then
   vertritt1:='???';

  if NOT (raeume) AND NOT (Length(Query1.FieldByName('Raum').AsString)=0) then
   raum1:='?'
  else
   raum1:=Query1.FieldByName('Raum').AsString;

   hcode:='<tr bgcolor="'+tdcolor+'">'+sLineBreak+'<td width=9%><font color="'+fccolor+'" class="font_tblrow"> '+klasse+'</font></td>'+sLineBreak+'<td width=9%><font color="'+fccolor+'" class="font_tblrow"> '+stunde+'</font></td>'+sLineBreak+'<td width=9%><font color="'+fccolor+'" class="font_tblrow"> '+fehlt1+'</font></td>';
   WriteLn(Datei, hcode);
   hcode2:='<td width=9%><font color="'+fccolor+'" class="font_tblrow"> '+vertritt1+'</font></td>'+sLineBreak+'<td width=9%><font color="'+fccolor+'" class="font_tblrow"> '+fach1+'</font></td>'+sLineBreak+'<td width=37%><font color="'+fccolor+'" class="font_tblrow"> '+Query1.FieldByName('BEMER_SCH').AsString+'</font></td>'+sLineBreak+'<td width=9% bgcolor="'+tdcolor+'"><font color="'+fccolor+'" class="font_tblrow"> '+raum1+'</font></td>'+sLineBreak+'</tr>';
   WriteLn(Datei, hcode2);
   Query1.Next;
  end;
 end;
 end;
  f:='</table>'+sLineBreak+'</div>'+sLineBreak+'</body>'+sLineBreak+'</html>';
  WriteLn(Datei, f);
  CloseFile(Datei);

mkinzler 11. Sep 2007 13:22

Re: Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
-Wenn die Datenbank unterstützt kannst du mit Limitierung arbeiten.
-Zähle die Anzahl doch einfach und erzeuge die datei innerhalb der Schleife (z.B. durch Modula-Abfrage)

Svenkan 11. Sep 2007 14:01

Re: Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
Was isn eine Modula-Abfrage?

mkinzler 11. Sep 2007 14:24

Re: Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
Restabfrage

5 DIV 2 = 2
5 MOD 2 = 1 denn 5 - 2*2 = 1
Wenn also Modulo Datensatznummer MOD AnzahlDSproSeite dann Seite voll -> neues Blatt.

Svenkan 11. Sep 2007 15:20

Re: Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
Ach mod!
Sech det doch! :D
Habs jetz hinbekommen.
Eine Frage noch (wollt dafür net extra nen neuen Thread aufmachen): Wie startet man das Programm autom. maximiert?

BUG 11. Sep 2007 16:15

Re: Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
Zitat:

Zitat von Svenkan
(wollt dafür net extra nen neuen Thread aufmachen)

Solltest du aber ...

Form automatisch maximiert starten:
TForm hat die Eigenschaft WindowState, die man im Objektinspektor oder zur Laufzeit auf wsMaximized stellen kann.

MfG,
Bug

Svenkan 11. Sep 2007 20:53

Re: Nur bestimmte Anzahl SQL-Zeilen in Datei schreiben
 
Ah, dankeschön!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz