Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Spalten in einem DBGrid verschieben und auch sortieren! (https://www.delphipraxis.net/870-spalten-einem-dbgrid-verschieben-und-auch-sortieren.html)

m-werk 24. Sep 2002 07:17

Hi, das DBGrid greift auf eine ADOQuery zu. Ich habe in der ADOQuery einen SQL-String: GROUP BY KundenNr. Diesen brauche ich, da ich ja einige Abfragen in dem Formular habe, die dann in dem Grid ersichtlich sind. Wenn ich das Formular öffne, dann ist das Grid leer. Das soll auch so sein, da dieses Formular nur zum Filtern von Daten gedacht ist.

Ich hab aber auch schon probiert, ADOQuery.Open. Da muß ich aber zuerst eine SQL wie z.B. SELECT, INSERT usw. einfügen.

Wenn ich so etwas einfüge, dann sehe ich jetzt beim öffnen Alle Kunden im Grid. (Zeichen dafür, dass die Tabelle offen ist.) Aber das mit dem Lesen der INI, wo ich dann die Reihenfolge drinn habe, funktioniert nicht.

Das Speichern geht super.
Kann man das so lösen, dass die Tabelle offen ist, wenn ich das Formular öffne, ohne dass irgendwelche Daten im Grid stehen?

m-werk 30. Sep 2002 16:30

Hi Leute, hat keiner von euch eine Idee, wie Ich das obrige Problem lösen kann?

Wäre euch zu dank verpflichtet, wenn ihr mir helfen könnt!

MrSpock 30. Sep 2002 20:24

Hallo m-werk,

ich könnte mir vorstellen, dass du ein SELECT Statement benutzt, dass die korrekte Struktur, also alle die Felder enthält, die normalerweise angezeigt werden sollen, erzeugt, aber keine Datensätze enthält. Z.B.: SELECT * FROM Personen WHERE ID = 0, wobei eine ID 0 nicht existiert. So erhälst du eine leere Datenmenge. Probier das doch mal aus.

m-werk 1. Okt 2002 19:00

Hi, hab nicht ganz kapiert, was du meinst.

Für die Anzeige im DbGrid hab ich folgenden Code zusammengeschnipselt:

Code:
procedure TKundenDruckMenue.Button6Click(Sender: TObject);
var
  cSql : String;
begin
  with ADOQuery1 do begin
    Active := False;
    Sql.Clear;
    if CheckBox1.Checked then begin
    cSql := 'Select DISTINCT KundenNr, Anrede, Titel, Vorname, Nachname, Straße, PLZ, Ort, Geburtsdatum, Land, Beruf, Telefon, Mobil, Fax, email FROM Kundendaten';
    end else
    if (allekunden.Checked = False) and (email.Checked = False) and (lv.Checked = False) and (flv.Checked = False) and (df.Checked = False) and (ff.Checked = False) and (sv.Checked = False) and (bsp.Checked = False) and (sto.Checked = False) and (mk.Checked = False) then
    begin
      if Trim(Edit1.Text) = '' then begin
      ShowMessage('Bitte geben Sie einen Wert ein!');
      exit;
    end;
    cSql := 'Select DISTINCT KundenNr, Anrede, Titel, Vorname, Nachname, Straße, PLZ, Ort, Geburtsdatum, Land, Beruf, Telefon, Mobil, Fax, email FROM Kundendaten where (' + ComboBox1.Text + ' like ' + QuotedStr (Edit1.Text + '%') +')'
    end
    else
      cSql := 'Select DISTINCT A.KundenNr, A.Anrede, A.Titel, A.Vorname, A.Nachname, A.Straße, A.PLZ, A.Ort, A.Geburtsdatum, A.Land, A.Beruf, A.Telefon, A.Mobil, A.Fax, A.email FROM Kundendaten A LEFT JOIN Geschaeftsdaten B ON A.KundenNr = B.KundenNr ';
    if (allekunden.Checked) and (flv.Checked) and (lv.Checked) and (df.Checked) and (ff.Checked) and (sv.Checked) and (bsp.Checked) and (sto.Checked) then
        cSql := cSql + ' AND ( [A.ist Kunde] = True OR [B.flv] = True OR [B.lv] = True OR [B.df] = True OR [B.ff] = True OR [B.sv] = True OR [B.bsp] = True OR [B.sto] = True OR [A.email] = True OR [B.eigengeschaeft] = True)'
    else if allekunden.Checked then
      cSql := cSql + ' WHERE A.[ist Kunde] = True'
    else if flv.Checked then
      cSql := cSql + ' WHERE B.[flv] = True'
    else if lv.Checked then
      cSql := cSql + ' WHERE B.[lv] = True'
    else if df.Checked then
      cSql := cSql + ' WHERE B.[df] = True'
    else if ff.Checked then
      cSql := cSql + ' WHERE B.[ff] = True'
    else if sv.Checked then
      cSql := cSql + ' WHERE B.[sv] = True'
    else if bsp.Checked then
      cSql := cSql + ' WHERE B.[bsp] = True'
    else if sto.Checked then
      cSql := cSql + ' WHERE B.[sto] = True'
    else if mk.Checked then
      cSql := cSql + ' WHERE B.[eigengeschaeft] = True';
    if email.Checked then
      cSql := cSql + ' WHERE TRIM (A.[email]) <> ' + QuotedStr ('');
    Sql.Add(cSql);
    Open;
  end;
end;
Kannst du damit was anfangen?

Hansa 1. Okt 2002 19:25

Hi M-werk,

habe das Thema gerade gesehen, bin an etwas weit entfent ähnlichem dran.

Code:
WHERE A.[ist Kunde]
Was sind denn das für [] ?? Ist doch SQL oder hab ich mich verlesen ? Der Code sieht jedenfalls ziemlich kompliziert aus. Kannst Du nicht das ewig lange IF..THEN..ELSE irgendwie in logisch zusammenhängende von mir aus auch auf 2 oder 3 Case Blöcke verteilen ? Zur Fehlersuche möchte ich den Code nicht. :mrgreen:

Vielleicht druck ich mirs mal aus und schau genauer. Aber erklär mir mal das mit den [] und das was da drin steht.

Gruß
Hansa

m-werk 1. Okt 2002 20:13

Bei dieser Abfrage geht es um folgendes.

Ich habe in der Access-DB einige Tabellen.
Ich habe hier eine Abfrage, die aus 2 Tabellen besteht.

Code:
cSql := 'Select DISTINCT A.KundenNr, A.Anrede, A.Titel, A.Vorname, A.Nachname, A.Straße, A.PLZ, A.Ort, A.Geburtsdatum, A.Land, A.Beruf, A.Telefon, A.Mobil, A.Fax, A.email FROM Kundendaten A LEFT JOIN Geschaeftsdaten B ON A.KundenNr = B.KundenNr ';
    if (allekunden.Checked) and (flv.Checked) and (lv.Checked) and (df.Checked) and (ff.Checked) and (sv.Checked) and (bsp.Checked) and (sto.Checked) then
        cSql := cSql + ' AND ( [A.ist Kunde] = True OR [B.flv] = True OR [B.lv] = True OR [B.df] = True OR [B.ff] = True OR [B.sv] = True OR [B.bsp] = True OR [B.sto] = True OR [A.email] = True OR [B.eigengeschaeft] = True)'.....
Tabelle A = Kundendaten und Tabelle B = Geschäftsdaten.

Das A weist auf eine Tabelle hin und [ist Kunde] = Feld in der Tabelle.

Ich habe für diese Abfrage ca 4 Wochen mit hilfe eines Freundes gebraucht.

Diese Funktioniert aber jetzt einwandfrei.

MrSpock 2. Okt 2002 07:01

Hallo m-werk,

was ich meinte ist, wenn du z.B. folgendes SQL Statement erzeugst:

Code:
Select DISTINCT A.KundenNr, A.Anrede, A.Titel, A.Vorname, A.Nachname, A.Straße, A.PLZ, A.Ort, A.Geburtsdatum, A.Land, A.Beruf, A.Telefon, A.Mobil, A.Fax, A.email FROM Kundendaten WHERE A.KundenNr = 0
dann (vorausgesetzt es gibt keine Kundenummer 0) sollte eine leere Datenmenge erzeugt werden, die die gewünschte Struktur hat. Wenn du diese dann (solange bis du eine echte Abfrage startest) im Grid anzeigst, sollte das Verschieben der Spalten und das Speichern in der Ini-Datei funktionieren.

Boxma 2. Okt 2002 10:37

Das speichern der Columns sollte auch mit

DBGrid1.Columns.SaveToFile('c:\sortierung.txt');

und

DBGrid1.Columns.LoadFromFile('c:\sortierung.txt');

funktionieren :witch:

waldforest 26. Jun 2005 17:45

Re: Spalten in einem DBGrid verschieben und auch sortieren!
 
Halo,
habe den Code zum einlesen der Spalten einmal ausprobiert.
Leider werden die Spaltensortierung eingelesen, aber hat keine Auswirkung auf die Anzeige.
Ich habe auch keine Möglichkeit gefunden die Anzeige zu refreshen.

Der Tipp mit dem
DBGrid1.Columns.SaveToFile('c:\sortierung.txt');
ist toll, und anschließend funktioniert auch die Anzeige.
Ich möchte duiesen Inhalt aber in eine Ini-Datei ablegen. Hier verzweifel ich. Habe auch keine Ahnung, wie ich einen TStringStream direkt in eine INI-Section bekomme.

mfg waldforest



[delphi]
procedure TQueryForm.GridToIni(GridName: TDBGrid; Section: string);
var
MS: TMemoryStream;
Ini : TIniFile;
tTv: TStringStream;
node : string;
n: integer;
begin
tTv := TStringStream.Create('');
MS := TMemoryStream.Create;
Ini:=TIniFile.Create(ChangeFileExt(Application.Exe Name,'.ini'));
try
GridName.Columns.SaveToStream(MS);
MS.Position := 0;
tTv.Read(MS,ms.Size) ;


INI.EraseSection(Section);
INI.WriteString(Section, '', tTv.DataString); // Hier läuft die Anwendung auf Fehler

finally
tTv.Free;
MS.Free;
end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.
Seite 4 von 4   « Erste     234   

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