AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Spalten in einem DBGrid verschieben und auch sortieren!
Thema durchsuchen
Ansicht
Themen-Optionen

Spalten in einem DBGrid verschieben und auch sortieren!

Ein Thema von m-werk · begonnen am 17. Sep 2002 · letzter Beitrag vom 26. Jun 2005
Antwort Antwort
Seite 4 von 4   « Erste     234   
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#31
  Alt 24. Sep 2002, 08: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?
Grüße, m-werk
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#32
  Alt 30. Sep 2002, 17: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!
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#33
  Alt 30. Sep 2002, 21: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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#34
  Alt 1. Okt 2002, 20: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?
Grüße, m-werk
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#35
  Alt 1. Okt 2002, 20: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.

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
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#36
  Alt 1. Okt 2002, 21: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.
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#37
  Alt 2. Okt 2002, 08: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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Boxma

Registriert seit: 22. Aug 2002
Ort: Hamburg
12 Beiträge
 
Delphi 6 Enterprise
 
#38
  Alt 2. Okt 2002, 11:37
Das speichern der Columns sollte auch mit

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

und

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

funktionieren
A busstation is where a bus stops.
A trainstation is where a train stops.
On my desk I have a workstation.
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#39

Re: Spalten in einem DBGrid verschieben und auch sortieren!

  Alt 26. Jun 2005, 18:45
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 Uhr.
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