Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQLQuery funtioniert nicht richtig (https://www.delphipraxis.net/62558-sqlquery-funtioniert-nicht-richtig.html)

traudl 6. Feb 2006 13:09

Datenbank: AbsolutDB • Version: 5.02 • Zugriff über: ABSQuery

SQLQuery funtioniert nicht richtig
 
:wiejetzt: Hallo DPler ich hab ein ganz doofes Problem. Ich möchte wenn ich in einem DBGrid auf den Namen klicke, dass es nach dem ColumnNamen sortiert wird. Es funktioniert auch nur verändert er die Colunmbreite. Wenn ich einen Haltepunkt einfüge um zu sehen ob er alles richtig macht, geht es und er lässt die Breite wie sie ist.
Genauso ist es beim Laden eines Bildes mit Haltepunkt geht es, ohne nicht.

Hier der Query zum sortieren.

Code:
procedure TMainFrm.grdKundenTitleClick(Column: TColumn);
var i: integer;
    s: String;
begin
      for i := 0 to grdKunden.Columns.Count -1 do begin
          if Column.Index = i then begin
            qryKunden.Close;
            qryKunden.SQL.Clear;
            s:= grdKunden.Columns[i].FieldName;
            qryKunden.SQL.Add('SELECT * FROM kunden ORDER BY ' + s);
            qryKunden.Open;
          end;
      end;
end;
und hier der zum laden eines Bildes.

Code:
procedure TMainFrm.qryBilderAfterScroll(DataSet: TDataSet);
var Str: TMemoryStream;
begin
  btnSave.Enabled := DataSet.RecordCount > 0;  // MainFrm
  Str := TMemoryStream.Create;
    try
    TBlobField(DataSet.FieldByName('Datei')).SaveToStream(Str);
    Str.Position := 0;
    if Str.Size = 0 then begin
      imgPLBild.Picture.Graphic := nil;
      Exit;
    end;
    if imgPLBILD.Picture.Graphic = nil then
      imgPLBILD.Picture.Graphic := TJPEGImage.Create;
    imgPLBILD.Picture.Graphic.LoadFromStream(Str);
    imgPLBild.Repaint;
  finally
      Str.Free;
  end; // finally
end;
Ich hab echt keine Idee mehr, zumal ich mit der Programmierung eh nicht so fit bin und das meine erste Datenbank ist.
:wall:
Ich hoffe Ihr könnt mir helfen.

Ferber 6. Feb 2006 14:03

Re: SQLQuery funtioniert nicht richtig
 
Hi !

Zitat:

Zitat von traudl
Code:
procedure TMainFrm.grdKundenTitleClick(Column: TColumn);
var i: integer;
    s: String;
begin
      for i := 0 to grdKunden.Columns.Count -1 do begin
          if Column.Index = i then begin
            qryKunden.Close;
            qryKunden.SQL.Clear;
            s:= grdKunden.Columns[i].FieldName;
            qryKunden.SQL.Add('SELECT * FROM kunden ORDER BY ' + s);
            qryKunden.Open;
          end;
      end;
end;

Die Spaltenbreite sollte sich eigentlich nicht ändern.
Versuchs mal so: (die Schleife ist nicht notwendig)

SQL-Code:
procedure TMainFrm.grdKundenTitleClick(Column: TColumn);
begin
  qryKunden.Close;
  qryKunden.SQL.Clear;
  qryKunden.SQL.Add('SELECT * FROM kunden ORDER BY ' + Column.FieldName);
  qryKunden.Open;
end
Hast du persistente columns im DBGrid ?

Verwende doch für das Bild ein DBJpeg (aus der Unit DBJpeg) :wink:

traudl 6. Feb 2006 14:22

Re: SQLQuery funtioniert nicht richtig
 
Ich habe die Schleife weggelassen, aber das Resultat ist das Gleiche, mit Haltepinkt OK, ohne nicht.
Im Moment sind die Columns alle persistent.
Kann es sein das ein Zeitproblem vorliegt ? Ich hab auch schon einen Dalay(1000) eingebaut vor dem Query, geht aber auch nicht.

Ferber 6. Feb 2006 14:32

Re: SQLQuery funtioniert nicht richtig
 
:wall: Hab ich befürchtet.

Eine gute Gelegenheit SQLGrid auszuprobieren !

SQLGrid

traudl 6. Feb 2006 14:35

Re: SQLQuery funtioniert nicht richtig
 
Hab noch was rausgefunden
wenn ich es richtig umständlich programmiere geht es auch

Delphi-Quellcode:
     if column.index = 1 then begin
          qryKunden.Close;
          qryKunden.SQL.Clear;
          usw....
auch hier bleibt die Spaltenbreite.

traudl 6. Feb 2006 14:41

Re: SQLQuery funtioniert nicht richtig
 
Hallo Ferber, ich probier den Grid heute abend aus, wenn ich wieder im Hotel bin. Ich denke 50 MEG mit dem Handy freut den Chef nicht so sehr und Spaß machts auch nicht.

Was ich komisch finde ist das es mit dem Haltepunkt geht. Was passiert da ?? Mein Bild läd auch nur mit dem Haltepunkt. Kann es an der Querykomponente selbst liegen ???

Ferber 6. Feb 2006 14:46

Re: SQLQuery funtioniert nicht richtig
 
Versuch mal vor dem sortieren folgendes:
Delphi-Quellcode:
SelectedIndex:=Column.Index
D5 / D7 verändert SelectedIndex beim Titleklick nicht, BDS2006 reagiert anders.
Vielleicht hilfts !?

Edit: Ist abhängig von Options - dgColumnResize

WePo 6. Feb 2006 19:52

Re: SQLQuery funtioniert nicht richtig
 
Hi,
Habe dein Prog probiert.
Gibt es bei dir eigentlich keine Fehler wenn man mehrfach auf Spalten clickt?
Delphi-Quellcode:
for i := 0 to grid.Columns.Count -1 do
            if Column.Index = i then
              s:= grid.Columns[i].FieldName;
            q.Close;
            q.SQL.Clear;
            q.SQL.Add('SELECT * FROM table ORDER BY ' + s);
            q.Open;
Ohne persistente Felder der query werden die Spalten aber noch immer geändert, da die query geschlossen und neu erstellt wird. Dann greift das dbgrid auf die Felder-Standardbreite zurück. Bei float-feldern wird standardmäßig displaywidth=10 eingestellt. Schau mal im Objektinspector diesen Wert deiner Felder nach.
Setze also im OI den Wert displaywidth auf die gewünschhte column-breite.
Werner

traudl 6. Feb 2006 23:41

Re: SQLQuery funtioniert nicht richtig
 
Hallo,

bin erst jetzt im Hotel. Hab gleich mal probiert ob es bei mir Fehler gibt wenn ich mehrmals die Titelleiste anklicke. Nö alles normal. Ich muss meine Felder in diesem Grid vordefinieren, da ich foreign Keys habe und diese nicht anzeigen möchte. Wenn aber wüsste wie ich das umgehen kann, würde ich das tun. In meinen Cols stehen ja Werte drin, die breite stimmt ja auch bis zu dem Zeitpunkt an dem ich den Query ausführe.

WePo 7. Feb 2006 00:29

Re: SQLQuery funtioniert nicht richtig
 
Hi,
Zitat:

In meinen Cols stehen ja Werte drin, die breite stimmt ja auch bis zu dem Zeitpunkt an dem ich den Query ausführe.
Spricht für mich dafür,daß du die Spalten-Breite des dbgrids angepaßt hast.
Bitte lies noch mal meinen Vorschlag durch. Ich rede von Breite/displaywidth der persistenen Felder.
Daß bei dir kein Fehler bei dem Code auftaucht verstehe ich auch nicht so ganz. Das DBgrid hat doch mehrere Spalten, oder nicht.
Hast du mal unterschiedliche Spalten angeclickt?
Dein code macht nämlich folgendes:
er geht über alle Spalten, falls Treffer query schließen und neu öffnen.
Dann muß aber das Dbgrid sich auf die neue query einstellen, während du noch in deiner Schleife bist. Bei mir (D6 prof) hagelts.
Werner


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 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