Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi sql -> html (https://www.delphipraxis.net/28482-sql-html.html)

mav 25. Aug 2004 11:23


sql -> html
 
hi all

wiedermal bin ich es, welcher hier ein thread eröffned :)

ich bin am basteln html ausgabe mithilfe der IBQuery

Delphi-Quellcode:
procedure TFimexport.SpeedButton1Click(Sender: TObject);
begin
If SaveDialog1.Execute then
  IBQuery1.SQL.Text := 'SELECT mov_title, mov_genre FROM mov_db';
  IBQuery1.Open;
  while IBQuery1.Eof=false
  do begin
        TabList := TStringList.Create;
      Try

        TabList.Add('<html><head></head><body>');
        TabList.Add('<Table>');
        LineStr := '<tr>';
        For i := 0 To IBQuery1.RecordCount Do
        Begin
          LineStr := LineStr + '<td>[b]' + IBQuery1.Fields[i].DisplayLabel + '[/b]</td>'
        End;
        TabList.Add(LineStr + '</tr>');
        LineStr := '';

        While Not Eof Do
        Begin
          LineStr := '<tr>';
          For i := 0 To IBQuery1.RecordCount Do
          Begin
            LineStr := LineStr + '<td>' + IBQuery1.Fields[i].asString + '</td>'
          End;
          TabList.Add(LineStr + '</tr>');
          LineStr := '';
          Next;
        End;
        TabList.Add('</Table></body>');
        TabList.SaveToFile(SaveDialog1.FileName);

      Finally
        TabList.Free;
      End;
end;
end;
beim starten habe ich keine probleme.. jedoch wenn ich das html file speichern möchte.. bekomme ich folgende meldung:

Im Projekt html.exe ist eine Exception der Klasse EListError aufgetreten. Meldung: Listenindex überschreitet das Maximum (2)...

kann mir da wer nen tip geben?

generic 25. Aug 2004 11:34

Re: sql -> html
 
Delphi-Quellcode:
For i := 0 To IBQuery1.RecordCount Do
sollte heissen ?

Delphi-Quellcode:
For i := 0 To IBQuery1.RecordCount-1 Do
an beiden stellen ?

und

Delphi-Quellcode:
while IBQuery1.Eof=false
wuerde ich aus gewohnheit in

Delphi-Quellcode:
while not IBQuery1.Eof
ändern.

Steve 25. Aug 2004 11:36

Re: sql -> html
 
Hi,

in welcher Zeile tritt der Fehler denn auf?

Achja, folgendes könnte evtl. scho der Fehler sein:
Delphi-Quellcode:
For i := 0 To IBQuery1.RecordCount - 1 Do
{statt "For i := 0 To IBQuery1.RecordCount Do"}
Gruß
Stephan

{too late}

mav 25. Aug 2004 11:45

Re: sql -> html
 
kann ich dir leider nicht sagen, in welcher zeile der fehler auftritt, das programm läuft ganz durch..
auch mit euren tips gings nicht :(.. dummes ding :cry:

MrSpock 25. Aug 2004 11:51

Re: sql -> html
 
Hallo mav,

recordcount liefert bei einer IBQuery nicht immer die korrekte Zahl, da immer nur soviele Sätze abgerufen werden, wie angezeigt werden. Werden die Daten nicht angezeigt, wird zunächst nur 1 Datensatz geliefert. Das kannst du ändern, indem du nach Open noch:

Delphi-Quellcode:
IBQuery1.FetchAll
einfügst. Aber ich glaube nicht, dass das Dein Problem mit dem Index löst. Das liegt vielleicht an dem EOF, du musst hier natürlich IBQuery1.EOF verwenden.

mav 25. Aug 2004 11:57

Re: sql -> html
 
jo.. das mit dem Eof habe ich auch bemerkt.. nütze aber leider auch nichts.. wie auch FetchAll nicht

MrSpock 25. Aug 2004 12:01

Re: sql -> html
 
Ooops, da habe ich ja gerade gesehen, dass du den Index i benutzt, um die Felder durchzugehen, aber dafür ist ja nicht RecordCount (Anzahl der Datensätze) sondern FieldCount zu verwenden. :mrgreen:

mav 25. Aug 2004 12:32

Re: sql -> html
 
yeahh.. danke.. jetzt bekomme ich kein fehler mehr.. jedoch scheint mein progi jetzt abzustürzen wenn ich das file speichern möchte :)
also das progi reagiert nicht mehr.. und es erstellt auch keine datei
ich dreh noch durch :)

mav 30. Aug 2004 11:19

Re: sql -> html
 
wenn ich bei diesem code die .html datei speichern möchte, stürzt das tool ab.. und generiert auch kein .html file

Delphi-Quellcode:
procedure TFimexport.SpeedButton1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
  IBQuery1.SQL.Text := 'SELECT mov_title, mov_genre FROM mov_db';
  IBQuery1.Open;
  IbQuery1.FetchAll;
  while not IBQuery1.Eof
  do begin
        TabList := TStringList.Create;
      try

        TabList.Add('<html><head></head><body>');
        TabList.Add('<Table>');
        LineStr := '<tr>';
        for i := 0 to IBQuery1.FieldCount-1
        do begin
          LineStr := LineStr + '<td>[b]' + IBQuery1.Fields[i].DisplayLabel + '[/b]</td>'
        end;
        TabList.Add(LineStr + '</tr>');
        LineStr := '';

        while not IBQuery1.Eof
        do begin
          LineStr := '<tr>';
          for i := 0 to IBQuery1.FieldCount-1
          do begin
            LineStr := LineStr + '<td>' + IBQuery1.Fields[i].asString + '</td>'
          end;
          TabList.Add(LineStr + '</tr>');
          LineStr := '';
          Next;
        end;
        TabList.Add('</Table></body>');
        TabList.SaveToFile(SaveDialog1.FileName);

      finally
        TabList.Free;
      end;
end;
end;

MrSpock 30. Aug 2004 11:46

Re: sql -> html
 
Hallo mav,

zwei ineinanderverschachtelte While Schleifen mit derselben Abbruchbedingung sind nicht sinnvoll. Die StringListe in einer While Schleife zu erstellen, erzeugt diese natürlich bei jedem Durchlauf. Die Einträge der davor erzeugten Liste sind dann auch nicht mehr zugreifbar. Aufgrund des ersten Fehlers der beiden ineinander geschachtelten While Schleifen, gibt es aber wohl nur einen Durchlauf durch die äußere Schleife, so dass der Fehler hier noch nicht zum Tragen kommt. Das Next in der inneren Schleife muss IBQuery1.Next heißen, nur dann wird der Datensatzzeiger auch weiterbewegt. Ansonsten hast du eine Endlosschleife.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.
Seite 1 von 2  1 2      

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