![]() |
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:
beim starten habe ich keine probleme.. jedoch wenn ich das html file speichern möchte.. bekomme ich folgende meldung:
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; Im Projekt html.exe ist eine Exception der Klasse EListError aufgetreten. Meldung: Listenindex überschreitet das Maximum (2)... kann mir da wer nen tip geben? |
Re: sql -> html
Delphi-Quellcode:
sollte heissen ?
For i := 0 To IBQuery1.RecordCount Do
Delphi-Quellcode:
an beiden stellen ?
For i := 0 To IBQuery1.RecordCount-1 Do
und
Delphi-Quellcode:
wuerde ich aus gewohnheit in
while IBQuery1.Eof=false
Delphi-Quellcode:
ändern.
while not IBQuery1.Eof
|
Re: sql -> html
Hi,
in welcher Zeile tritt der Fehler denn auf? Achja, folgendes könnte evtl. scho der Fehler sein:
Delphi-Quellcode:
Gruß
For i := 0 To IBQuery1.RecordCount - 1 Do
{statt "For i := 0 To IBQuery1.RecordCount Do"} Stephan {too late} |
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: |
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:
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.
IBQuery1.FetchAll
|
Re: sql -> html
jo.. das mit dem Eof habe ich auch bemerkt.. nütze aber leider auch nichts.. wie auch FetchAll nicht
|
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:
|
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 :) |
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; |
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 09:56 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