Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBgrid sortieren (https://www.delphipraxis.net/94461-dbgrid-sortieren.html)

icebreaker 21. Jun 2007 17:13

Datenbank: Paradox • Version: 7 • Zugriff über: ADO ?!

DBgrid sortieren
 
Guten Tag,
bin gerade dabei eine kleine Adress-Datenbank als Projektarbeit zu schreiben.
Man kann bereits Werte eingeben und die komplette Datenbank speichern/Laden.
Allerdings wäre es genial wenn ich auch noch meine Werte im DBgrid sortieren lassen könnte; also wenn man auf den jeweiligen Title clickt
wird die Spalte sortiert nach A-Z ; Z-A.
Meine Realisierung funktioniert leider überhaupt nicht, dazu muss ich sagen das wir in der Schule nicht mit "komplexen" Datenbanken arbeiten,
außerdem kenn ich mich (Bis Jetzt?!) nicht mit SQL aus.

Für das Ereignis "TitleClick" habe ich folgende Procedure: (Aus dem Forum)

als Varriablen sind
Delphi-Quellcode:
sSortColumn: String;
  bSortOrder: Boolean; // global festgelegt.

procedure TForm5.DBGrid1TitleClick(Column: TColumn);

begin
 if Column.FieldName <> sSortColumn then
  begin
    sSortColumn := Column.FieldName;
  end
  else
  begin
    bSortOrder := not bSortOrder;
  end;
  ADODataSet1.Close;
  if bSortOrder then
  begin
    ADODataSet1.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn;
  end
  else
  begin
    ADODataSet1.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn + ' DESC';
  end;
  ADODataSet1.Open;


//showmessage(column.fieldname);
end;
Dessweiteren habe ich die Komponente ADODataSet1 eingefügt und mit der DataSource verbunden.
ICh benutze Paradox7 sowie TQuerry, wenn ich das jetzt alles Starte kommt die Fehlermeldung:
Fehlende Connection oder ConnectionString!

Wie schaffen ich das es mir das DBGrid sortiert ausgiebt?!
Herrzlichen Dank für eure Hilfe,
Mfg ice

[edit=Sharky]Habe den Code mal mit den richtigen Tags versehen. Mfg, Sharky[/edit]

oki 21. Jun 2007 17:29

Re: DBgrid sortieren
 
Hallo und herzlich willkommen in der DP!!! :dp:

Du must deine Datenbasis siortieren, dann wird sie auch so im Grid angezeigt.
So weit ich weiß, geht das über das Grid selber nicht.

Gruß oki

raiguen 21. Jun 2007 17:55

Re: DBgrid sortieren
 
@ oki
Die Sortierung über die Datenbasis versucht icebreaker ja schon ;)

@icebreaker
EIn ADODataSet allein reicht nicht aus, um auf irgendwelcche Daten zuzugreifen, Die Fehlermeldung sagt ja schon eindeutig: es ist in den Eigenschaften KEIN ConnectionString einmgetragen :!:
Vorgehensweise:
1) ADODataSet.ConnectionString -> Doppelklick in das leere Feld (oder auf den Ellipsenschalter)
2) Im Dialog-Fenster 'Verbindungsstring verwenden' -> Klick auf Button 'Aufbauen'
3) im Dialog Datenverknüpfungseigenschaften:
- Provider -> Microsoft JET 4.0 OLE DB Treiber
- Verbindung -> nach der AccessTabelle suchen (Klick auf den ...-Button)
danach auf VErbindung testen

Wenn das alles soweit funzt, dann sollte auch die ADODataSet-Abfrage funktionieren ...

DeddyH 21. Jun 2007 18:32

Re: DBgrid sortieren
 
Es geht nicht um Access, sondern um Paradox (laut Threadtitel) ;)

icebreaker 21. Jun 2007 22:22

Re: DBgrid sortieren
 
Erstmal: Ganz leib das ihr mir gleich so helft.
Hab das alles so gemacht, anstatt bei Verbindungen Acess Datei habe ich meine Paradox 7 genommen ("adressen.db").
Doch wenn ichs sortieren will kommt folgende Fehlermeldung:
Im Project Project1.exe ist eine Exeption der Klasse EOleExeption mit der Meldung " Nicht erkennbaresDatenbbankformat 'C:\.....\adressen.db" aufgetreten.
Beim Verbindungstest sagt er auch gleich:
Nicht erkennbares Datenbankformat.
Eine Acces Datenbank konnte ich nicht anlegen, da zeigt er ne Fehlermessage mit dem Inhalt: -2147221164.
Mfg ice

joachimd 22. Jun 2007 07:38

Re: DBgrid sortieren
 
nimm statt der AdoDataSet eine TQuery...binde dann diese Query an Dein Grid über eine TDatasource.

icebreaker 22. Jun 2007 10:20

Re: DBgrid sortieren
 
Hmm also es funktioniert nicht, außerdem habe ich es wahrscheinlich falsch umgesetzt.
Also ich habe:
1.Mein ADODataset durch ein weiteres Tquerry (querry2) ersetzt.
2.Das querry2 an die datasource1 angebunden
3.Den Quelltext wie folgt verändert:

Delphi-Quellcode:
 if bSortOrder then
  begin
    query2.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn;
  end
  else
  begin
   query2.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn + ' DESC';
  end;
  query2.Open;
Allerdings hat Tquerry ja keine Eigenschaft Command Text, was soll ich dafür verwenden?

Danke für die Hilfe :hello:
Mfg ice

joachimd 22. Jun 2007 10:40

Re: DBgrid sortieren
 
Zitat:

Zitat von icebreaker
Allerdings hat Tquerry ja keine Eigenschaft Command Text, was soll ich dafür verwenden?

Delphi-Quellcode:
Query2.SQL.Text:='...';

icebreaker 22. Jun 2007 11:13

Re: DBgrid sortieren
 
Ich bin echt etwas doof, bekomms leider nicht hin, jetzt kommt:
ungültiges Schlüsselwort
Symbol-string: Table
Zeilennummer:1

Konnte im Netz nix finden, auch habe ich selber nichts gefunden, liegt das an dem 2. Querry?
Mfg ice

DeddyH 22. Jun 2007 11:21

Re: DBgrid sortieren
 
Du musst "Table" auch durch den Namen der abzufragenden Tabelle ersetzen. :-D

icebreaker 22. Jun 2007 16:58

Re: DBgrid sortieren
 
Ist zum Mäuse melken.

Habe jetzt mein Querry2 mit der Datasource1 verbunden, dann
Delphi-Quellcode:
 query2.SQL.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn;
geändert, doch da wo Table stand geht das nicht.
habe erst meinen DBGrid1 Namen reingeschrieben, jetzt den Datenbank Namen.
Was muss da rein?
den Namen der abzufragenden Tabelle und der wäre?

Sry, ich bin ein hoffnungsloser Fall.

EDIT: Also ich denke mal das da meine als Paradox7 erzeugte Datenbank namens: adressen.db reinmuss (wie oben beschrieben) aber wenn ich das mache compiliert er zwar, auch kann ich auf den Title des Grid klicken, ABER er sortiert nicht. :cry:

DeddyH 22. Jun 2007 17:02

Re: DBgrid sortieren
 
Wir können leider nicht hellsehen, daher kann Dir auch niemand sagen, wie Deine Tabellen heißen. :stupid:

mkinzler 22. Jun 2007 17:03

Re: DBgrid sortieren
 
Das Statement an sich sieht gut aus, wie lauten die weiteren Einstellungen der Komponenete?

icebreaker 22. Jun 2007 17:11

Re: DBgrid sortieren
 
Oh Krass seit ihr fix, das ist ja echt nicht schlecht. Schon mit nem Chat vergleichbar.

EDIT: Also ich denke mal das da meine als Paradox7 erzeugte Datenbank namens: adressen.db reinmuss (wie oben beschrieben) aber wenn ich das mache compiliert er zwar, auch kann ich auf den Title des Grid klicken, ABER er sortiert nicht. Crying or Very sad

Von welcher Komponente?
hab da so einiges zu bieten

DeddyH 22. Jun 2007 17:14

Re: DBgrid sortieren
 
Moment, die Daten werden aber im Grid dargestellt?

icebreaker 22. Jun 2007 17:19

Re: DBgrid sortieren
 
ja die werden im Grid dargestellt.

DeddyH 22. Jun 2007 17:22

Re: DBgrid sortieren
 
Zeig doch bitte n0ochmal den aktuellen Quelltext. Ich bin derweil mal schnell beim Abendbrot ;)

icebreaker 22. Jun 2007 17:29

Re: DBgrid sortieren
 
Delphi-Quellcode:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBClient, Grids, DBGrids, ExtCtrls, DBCtrls, DBTables,
  Mask, ADODB;

type
  TForm5 = class(TForm)
    Name: TLabel;
    Vorname: TLabel;
    Strasse: TLabel;
    hausnummer: TLabel;
    ClientDataSet1: TClientDataSet;
    ClientDataSet1Name: TStringField;
    ClientDataSet1Vorname: TStringField;
    ClientDataSet1Strae: TStringField;
    ClientDataSet1Hausnummer: TStringField;
    ClientDataSet1PLZ: TStringField;
    ClientDataSet1Ort: TStringField;
    ClientDataSet1Email: TStringField;
    DBNavigator1: TDBNavigator;
    DataSource1: TDataSource;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    GroupBox1: TGroupBox;
    DBGrid1: TDBGrid;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Query1: TQuery;
    Query2: TQuery;


    procedure DBGrid1TitleClick(Column: TColumn);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);

   
  private
    { Private-Deklarationen }       
  public
      { Public-Deklarationen }
  end;
     type datensatz=record  end;
var
  Form5: TForm5;
  sSortColumn: String;
  bSortOrder: Boolean;
 
implementation

uses Unit1, Unit4;
       
{$R *.dfm}


procedure TForm5.Button3Click(Sender: TObject);
begin
ClientDataSet1.SaveToFile('c:\Datenbank.da-guckst-du', dfXML);
end;

procedure TForm5.Button4Click(Sender: TObject);
begin
 ClientDataSet1.LoadFromFile('C:\Datenbank.da-guckst-du');
end;



procedure TForm5.DBGrid1TitleClick(Column: TColumn);

begin
 if Column.FieldName <> sSortColumn then
  begin
    sSortColumn := Column.FieldName;
  end
  else
  begin
    bSortOrder := not bSortOrder;
  end;
  query2.Close;
  if bSortOrder then
  begin
    query2.SQL.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn;
  end
  else
  begin
   query2.sql.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn + ' DESC';
  end;
  query2.Open;



end.
lass dir schmecken, bis gleich... :bounce1:
nebenbei: :dp:

DeddyH 22. Jun 2007 17:32

Re: DBgrid sortieren
 
Komisch, das sollte eigentlich funktionieren. Füg doch mal eine Zeile ein.
Delphi-Quellcode:
query2.Close;
  if bSortOrder then
  begin
    query2.SQL.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn;
  end
  else
  begin
   query2.sql.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn + ' DESC';
  end;
  ShowMessage(query2.SQL.Text);
  query2.Open;
Und dann poste bitte die Meldung.

mkinzler 22. Jun 2007 17:35

Re: DBgrid sortieren
 
Hast du das Grid auch mit Query2 verknüpft oder doch mit Query1?

icebreaker 22. Jun 2007 17:45

Re: DBgrid sortieren
 
DBGrid ist mit DataSource1 verknüpft.
Wenn ich die Zeile einfüge zeigt er wie gewollt ne Showmessage mit:
SELECT * FROM adressen.db ORDER BY /gewählter Title/ DESC;

DeddyH 22. Jun 2007 17:46

Re: DBgrid sortieren
 
Das SQL ist schon mal OK. Woran hängt denn die DataSource1?

icebreaker 22. Jun 2007 17:49

Re: DBgrid sortieren
 
Die hängt an ClientDataSet1 das wiederum hängt an ClientDataSet1 und das ist mit adressen.db (Paradox7) verknüpft.

DeddyH 22. Jun 2007 17:51

Re: DBgrid sortieren
 
Verknüpf doch mal die DataSource mit Query2.

icebreaker 22. Jun 2007 17:54

Re: DBgrid sortieren
 
Das steht bei Datasource->DataSet garnicht zur Auswahl, wenn ichs manuel eingebe kommt:Zirkuläre Datenverbindungen sind nicht erlaubt


Wenn nicht setz ich das Program mal hier rein.
Bin auch jetzt leider erstmal fort.

icebreaker 23. Jun 2007 00:00

Re: DBgrid sortieren
 
Was soll ich eigentlich mit wem verknüpfen?
Wieviel TQuery´s / DataSource brauche ich?
AHbe jetzt alles mögliche miteinander verknüpft, ohne erfolg. :cry:

marabu 23. Jun 2007 09:02

Re: DBgrid sortieren
 
Guten Morgen,

du brauchst minimal eine TQuery, eine TDataSource und ein TDBGrid um deine Daten im Grid darzustellen und auch dort zu ändern, zu löschen oder neu zu erfassen. Nützlich wäre auch eine TDatabase, aber schau erstmal, dass du alles ohne zum laufen bringst. Der ClientDataSet scheint ein Überbleibsel von deinen früheren Versuchen zu sein. Die einzelnen DBEdits wohl auch, oder?

Grüße vom marabu

icebreaker 23. Jun 2007 14:43

Re: DBgrid sortieren
 
Ne, über meine DBEdits lese ich die informationen fürs Grid ein.
Query1 hängt an DataSource1 das wiederum hängt an ClientDataSet1 und das ist mit adressen.db (Paradox7) verknüpft.
Mal ne gaaanz andere frage, lässt es sich einfacher incrementieren im Grid einen Eintrag zu suchen?
Mfg ice

mkinzler 23. Jun 2007 14:46

Re: DBgrid sortieren
 
Wenn das Grid an Query1 hängt, wird dir das ergebnis von Query2 natürlich nicht angezeigt.

icebreaker 23. Jun 2007 16:03

Re: DBgrid sortieren
 
Nein, das Grid hängt an DataSource1.
Was soll ich nun tun?
je länger ich dran sitz um so verzweifelter werde ich. :wiejetzt:

DeddyH 23. Jun 2007 16:05

Re: DBgrid sortieren
 
Das Grid an DataSource1 und diese wiederum an Query2.

marabu 23. Jun 2007 16:35

Re: DBgrid sortieren
 
Hallo,

wenn du dein Projekt und eine leere Adressen.db bereit stellst, dann kann man dir besser helfen. Die Eintragung von DataSource1 bei der Komponente ClientDataSet1 ist ein Fehler. Schau dir dazu mal die Online Hilfe an.

Freundliche Grüße

icebreaker 23. Jun 2007 17:10

Re: DBgrid sortieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei einer TTable muss man doch bei "Tablename" die Datenbank auswählen, das mus ich doch beim Query sicher auch machen, sonst werden die Datenbankwerte nicht im Grid angezeigt.
Aber egal, ich stelle mal das komplette prog rein.
Das Progrmam befindet sich üprigens noch in Alpha Phase. :wink:

mkinzler 23. Jun 2007 17:20

Re: DBgrid sortieren
 
Delphi-Quellcode:
object DataSource1: TDataSource
DataSet = ClientDataSet1
Delphi-Quellcode:
    DataSet = Query2
    Left = 24
    Top = 64
  end

DeddyH 23. Jun 2007 17:33

Re: DBgrid sortieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab Unit5 ein klein wenig geändert.

marabu 23. Jun 2007 17:54

Re: DBgrid sortieren
 
Hallo,

das Programm scheint ursprünglich auf das Arbeiten mit einem XML-basierten ClientDataSet ausgelegt zu sein. Wenn das nun auf BDE und TQuery umgestellt werden soll, dann stören die "alten" Überbleibsel. Da würde ich erstmal beherzt löschen, was sich nicht wehrt, damit man sinnvoll weiter arbeiten kann.

Übrigens:

Delphi-Quellcode:
procedure TForm4.Button3Click(Sender: TObject);
var
  i: integer;
begin
  if openDialog1.Execute then
    assignfile(datei,openDialog1.FileName);
  reset(datei);
  // ...
So wird der Fall nicht behandelt, wenn der Benutzer den OpenDialog abbricht. Besser so:

Delphi-Quellcode:
procedure TForm4.Button3Click(Sender: TObject);
var
  i: integer;
begin
  if not openDialog1.Execute then
    Exit;

  assignfile(datei,openDialog1.FileName);
  reset(datei);
  // ...
Freundliche Grüße

icebreaker 23. Jun 2007 18:09

Re: DBgrid sortieren
 
Tja, schuss in den Ofen.

@marabu: Deine Lösung beszieht sich auf form4 es geht aber um Form5.
Auf Form4 hatte ich zuerst mit nem Stringgrid gearbeitet. Wenn du auf "EINTRAGEN" klickst, dann kommst du zum eigetnlichen Problem.
@DaddyH: Wenn das richtig verknüpft ist gibts weiterhin ein Problem: Die navigation ist nichtmehr funktionsfähig, außerdem kann ich nix in die Edit fenster reinschreiben.

mkinzler 23. Jun 2007 18:12

Re: DBgrid sortieren
 
@icebreaker: du solltest dich mal mit den Grundlagen der Datenbankanbindung von Delphi bekannt machen.
Der Query liefert dir ja die Daten Tabelle, halt nur sortiert.

icebreaker 23. Jun 2007 18:23

Re: DBgrid sortieren
 
^^Klingt komisch is aber so.
Ja das stimmt.
Doch Sobald ich den Navigator mit der ClientDataSource verknüpfeistr dieser nichtmehr funktionsfähig.
Die DBEdit Fenster sind auch nichtmehr funktionsfähig, tut mir echt leid das ich euch die ganze Zeit auf denSack gehe, aber so kompliziert habe ich mir das vorgestellt. :(

mkinzler 23. Jun 2007 18:25

Re: DBgrid sortieren
 
Du mußt natürlich alle datensensitiven Komponenten mit der DataSource1 verbinden.
Den Query verbindest du mit einer TUpdateSQL, in der du die DML-Skripte hinterlegst.


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