![]() |
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? |
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! |
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. |
Hi, hab nicht ganz kapiert, was du meinst.
Für die Anzeige im DbGrid hab ich folgenden Code zusammengeschnipselt:
Code:
Kannst du damit was anfangen?
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; |
Hi M-werk,
habe das Thema gerade gesehen, bin an etwas weit entfent ähnlichem dran.
Code:
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:
WHERE A.[ist Kunde]
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 |
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:
Tabelle A = Kundendaten und Tabelle B = Geschäftsdaten.
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)'..... 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. |
Hallo m-werk,
was ich meinte ist, wenn du z.B. folgendes SQL Statement erzeugst:
Code:
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.
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
|
Das speichern der Columns sollte auch mit
DBGrid1.Columns.SaveToFile('c:\sortierung.txt'); und DBGrid1.Columns.LoadFromFile('c:\sortierung.txt'); funktionieren :witch: |
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. |
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