Delphi-PRAXiS

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

Chamb 24. Jun 2008 13:25

Datenbank: Access • Zugriff über: Datenzugriff/ADO

DBGrid sortieren
 
hi leutz

ich prog. datenbanken erst seit 2 wochen und jetzt hab ich ein problem. :(

ich hab eine datenbank, in der ist eine "bundesliga tabelle" und ich möchte, dass die sich (per Button oder per klick auf den title) sortiert.

dazu hab ich mir den code von hier gehölt und bei mir eingebunden :-D .

wenn ich das jetzt compiliere und das teste, dann kommt immer so ne doofe fehlermeldung:

Zitat:

Das Microsoft jet-datenbankmodul findet eingangstabelle oder abfrage 'select * from TTabelle(meine tabelle, wo die "bundesliga tabelle drin ist) oder by punkte desc' nicht.
1. ich hab kein plan was das heißt
2. ich wäre froh, wenn mir jemand dabei helfen könnte.
3.(ich weiß das es hier schon mal solche fragen gab, die konnten mir aber nicht weiterhelfen)

mfg

Chamb

mkinzler 24. Jun 2008 13:27

Re: DBGrid sortieren
 
Vielleicht sollte es
SQL-Code:
order by
heißen

Chamb 24. Jun 2008 13:29

Re: DBGrid sortieren
 
hier der Quelltext
Delphi-Quellcode:
procedure TForm1.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 TTabelle ORDER BY ' + sSortColumn;
  end
  else begin
    ADODataSet1.CommandText := 'SELECT * FROM TTabelle ORDER BY '+ sSortColumn + ' DESC';
  end;
  ADODataSet1.Open;
end;
@mkinzler: Ist das "order by" hier falsch gesetzt???

hoika 24. Jun 2008 14:43

Re: DBGrid sortieren
 
Hallo,

sieht richtig aus.
Vielleicht heisst deine Tabelle ja nicht TTabelle ??


Heiko

Chamb 24. Jun 2008 14:47

Re: DBGrid sortieren
 
@hoika:
ich glaube sehr stark daran, das die tabelle "TTabelle" heißt.

shmia 24. Jun 2008 14:53

Re: DBGrid sortieren
 
Häng' doch mal deine Access Datenbank (*.mdb-Datei) an.
Zuvor aber bitte in Access zuerst packen (im Menu Extras ->Datenbank-Dienstprogramme -> Datenbank komprimieren & reparieren) und dann als Zip-Archiv hochladen.

Chamb 24. Jun 2008 14:58

Re: DBGrid sortieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier die datenbank.
@shmia: danke für diesen ratschlag(das mit dem komprimieren)hat die datenbank sehr verkleinert

shmia 24. Jun 2008 15:10

Re: DBGrid sortieren
 
Zitat:

Zitat von Chamb
hier die datenbank.

Ok, die Datenbank heisst Kreuztabelle(1.).mdb und enthält keine einzige Tabelle.
Sie ist also komplett leer!
Du musst zuerst in Access eine neue Tabelle anlegen, um sie benützen zu können.
Später kannst du das auch mit CREATE TABLE aus dem Programm raus erledigen.

Du solltest deine Datenbank nicht Kreuztabelle(1.).mdb nennen, sondern z.B. Bundesliga2008.mdb.
Man muss mit den Worten "Datenbank" und "Tabelle" sehr genau aufpassen; eine Datenbank kann mehrere Tabellen enthalten.

stifflersmom 24. Jun 2008 15:13

Re: DBGrid sortieren
 
Zitat:

Zitat von shmia
Zitat:

Zitat von Chamb
hier die datenbank.

Ok, die Datenbank heisst Kreuztabelle(1.).mdb und enthält keine einzige Tabelle.
Sie ist also komplett leer!

Nö, stimmt nicht.
Die TKreuztabelle sieht doch nett aus...

Chamb 24. Jun 2008 15:17

Re: DBGrid sortieren
 
Zitat:

Zitat von shmia
Ok, die Datenbank heisst Kreuztabelle(1.).mdb und enthält keine einzige Tabelle.
Sie ist also komplett leer!

??? versteh ich net, bei mir hat die "2" Tabellen.
@stifflersmom: Danke für das Lob.

Zitat:

Zitat von shmia
Du musst zuerst in Access eine neue Tabelle anlegen, um sie benützen zu können.
Später kannst du das auch mit CREATE TABLE aus dem Programm raus erledigen.

Bitte könntest du das näher erklären

Zitat:

Zitat von shmia
Du solltest deine Datenbank nicht Kreuztabelle(1.).mdb nennen, sondern z.B. Bundesliga2008.mdb.

Nochmals danke für den Ratschlag.(allesdings hatte ich die so genannt, weil das Programm 1. und 2. Bundesliga beinhaltet.)

Zitat:

Zitat von shmia
Man muss mit den Worten "Datenbank" und "Tabelle" sehr genau aufpassen; eine Datenbank kann mehrere Tabellen enthalten.

Das war mir bewusst, danke für den auffrischenden Hinweis.

Privateer3000 25. Jun 2008 10:36

Re: DBGrid sortieren
 
Stimmt der Connectionstring?

Chamb 25. Jun 2008 10:41

Re: DBGrid sortieren
 
in wie weit??

Was sollte das stehen??

Also mom. steht da
Zitat:

Provider=MSDASQL.1;Password="";Persist Security Info=True;Data Source=Liga
(soweit ich weiß sollte das stimmen)

Privateer3000 25. Jun 2008 11:00

Re: DBGrid sortieren
 
damit meinte ich,ob auch die richtige mdb connectiert wird.
da offensichtlich die tabelle nicht gefunden wird und
du den richtigen namen angegeben hast.
Oder hast du vllt. einen alten String in der Registry stehen?

shmia 25. Jun 2008 11:10

Re: DBGrid sortieren
 
Zitat:

Zitat von stifflersmom
Zitat:

Zitat von shmia
Sie ist also komplett leer!

Nö, stimmt nicht

Oh, hoppla, ich war in Access nur auf Seite "Abfragen" und habe so die Tabellen übersehen.

Der ConnectionString müsste so aussehen:
Code:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Fussball2008.mdb;Persist Security Info=False
Die Tabelle TKreuztabelle gefällt mir allerdings überhaupt nicht, da sie als Feldnamen die Namen der Vereine trägt.
Ich würde eine TSpiel Tabelle einführen:
Code:
SpielNr|VereinA      |VereinB       | ToreA | ToreB | Datum     | Bemerkung
=====================================================================
     23|VFB Stuttgart |Bayern München |   5   | 1     | 05.08.2007 | 5 Min Nachspielzeit
     24| ....

Chamb 25. Jun 2008 12:18

Re: DBGrid sortieren
 
Zitat:

Zitat von shmia
Der ConnectionString müsste so aussehen:
Code:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Fussball2008.mdb;Persist Security Info=False

okay, sehe ich ein, dass der etwas anders sein soll.

Zitat:

1:0 für programmierer
jetzt ist allerdings ein neuer Fehler aufgetretten.

Jetzt konnt zwar nicht mehr die Fehlermeldung, aba es wird auch nix sortiert!

Zitat:

1:1 ausgleich
Allerdings habe ich den Source ertwas verändert.

Der sieht jetzt so aus:

Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin

  if Column.FieldName <> sSortColumn then begin
    sSortColumn := Column.FieldName;
  end
  else begin
    bSortOrder := not bSortOrder;
  end;

  ADODataSet1.Close;

  ADODataSet1.CommandText := 'SELECT * FROM TTabelle ORDER BY ' + sSortColumn;

  if not bSortOrder then begin
    ADODataSet1.CommandText := ADODataSet1.CommandText + ' DESC';
  end;
 
  ADODataSet1.active := true;

end;
Könnte es vllt. jetzt daran liegen, das ich den Code etwas verändert habe, dass jetzt nichts sortiert wird?

Zitat:

Die Tabelle TKreuztabelle gefällt mir allerdings überhaupt nicht, da sie als Feldnamen die Namen der Vereine trägt.
Ich würde eine TSpiel Tabelle einführen:
Code:
SpielNr|VereinA      |VereinB       | ToreA | ToreB | Datum     | Bemerkung
=====================================================================
     23|VFB Stuttgart |Bayern München |   5   | 1     | 05.08.2007 | 5 Min Nachspielzeit
     24| ....

ich hab mir eine "Kreuztabelle"(so ähnlich sah die auch im Kicker letztes jahr aus und so sieht die auch bei wikipedia aus) so vorgestellt.

Allerdings find ich, es ist geschmackssache, wie die aussieht.

stifflersmom 25. Jun 2008 12:27

Re: DBGrid sortieren
 
Zitat:

Zitat von Chamb
Allerdings find ich, es ist geschmackssache, wie die aussieht.

Nö,das ist nicht wirklich eine Geschmacksfrage.
Du solltest schon aus Gründen der Flexibilität (stell Dir eine neue Saison mit neuen/anderen Vereinen vor)
schon mit Zuordnungstabellen arbeiten:

Deine Manschaftstabelle könnte folgendermaßen aussehen:
ID Name Ort Trallala (und was noch an Detailfeldern so interessan sein könnte)

Deine Spieltabelle so
ID Manschaft1 Manschaft2 Datum Ergebnis_zur_Halbzeit Endergebnis

Dann die Manschaften aus der Manschaftstabelle ind der Spieltabelle referenzieren und schon
bist Du wesentlich unabhängiger und flexibler.
Irgendwo findest Du hier bestimmt ein Tutorial zum (sinnvollen) Einsatz/Aufbau von Datenbanken

Moin

hoika 25. Jun 2008 12:32

Re: DBGrid sortieren
 
Hallo,



Delphi-Quellcode:

var
  sComamndText: String;
begin
  if Column.FieldName <> sSortColumn then
  begin
    sSortColumn := Column.FieldName;
    bSortOrder := True; // das hier ist neu
  end
  else
  begin
    bSortOrder := not bSortOrder;
  end;

  sCommandText := 'SELECT * FROM TTabelle ORDER BY ' + sSortColumn;

  if not bSortOrder then
  begin
    sCommandText:= sCommandText + ' DESC';
  end;

  ADODataSet1.CommandText:= sCommandText;  // mit F5 breakpoint drauf uns sCommandText ansehen

  ...
Das ist aber nicht die Ursache.
Sorgt nur dafür das eine neu ausgewählte Spalte immer aufsteigend sortiert wird
und ausserdem kannst du den CommandString besser debuggen


Ausserdem würde ich das

bSortOrder := True;

auch ins FormCreate packen.


Heiko

Chamb 25. Jun 2008 12:56

Re: DBGrid sortieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
@stifflersmom:
kann ich verstehen das argument von dir, aba!!:(Bitte das hier nicht als kritik auffassen)Es ist ein programm für mich, das ich mir selbst schreibe und es aus sehr warscheinlich selber benutzen werde.

@hoika:

ich glaube, es ist besser, wenn ich jetzt mal das programm mit source reinstelle, damit man mir sagen kann, wo ich genau fehler mache, den trotz deinem bemühens(wo ich mich hier bedanke) hat das an der situation leider nicht viel geändert.

(bitte wegen dem aussehen und dem ausbau nicht beschweren(Typs zur verbesserung werden immer danken angenommen :-D )

hoika 25. Jun 2008 13:26

Re: DBGrid sortieren
 
Hallo,

der Grund ist

1. kein AdoDataSet1.Close / Open mehr

ich hatte dir da noch ... angegeben

Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
  sCommandText : String;
begin

  if Column.FieldName <> sSortColumn then
  begin
    sSortColumn := Column.FieldName;
    bSortOrder := True;
  end
  else
  begin
    bSortOrder := not bSortOrder;
  end;

  sCommandText := 'SELECT * FROM TTabelle ORDER BY ' + sSortColumn;

  if not bSortOrder then
  begin
    sCommandText:= sCommandText + ' DESC';
  end;

  ADODataSet1.Close;

  ADODataSet1.CommandText:= sCommandText;

  ADODataSet1.Open;
end;
Das ist aber nur die Spitze des Eis-Berges .. ;)

DBGrid1.DataSource -> DataSource1.DataSet -> TAdoDataSet

So muss es aussehen.
Bei dir steht TADoTable1 statt dem AdoDataset

Bei der Gelegenheit kannst du auch im OI einen
ersten CommandText eintragen und dann das Active auf true setzen.


Heiko

PS:
Falls das AdoDataSet nicht als DataSet angezeigt wird,
mache das erst mal mit em ComamndText und dem Active True

Chamb 25. Jun 2008 13:57

Re: DBGrid sortieren
 
Zitat:

Zitat von hoika
Das ist aber nur die Spitze des Eis-Berges .. ;)

Tja, daran kann ich nix mom. ändern. Ich möcht ja noch lernen.

Zitat:

Zitat von hoika
DBGrid1.DataSource -> DataSource1.DataSet -> TAdoDataSet
So muss es aussehen.
Bei dir steht TADoTable1 statt dem AdoDataset

das versteh ich nicht ganz.

Heißt das:
Das DBGrid bei "Eigentschaften" im Feld "datasource" datasource1 stehen hat,wodann im Feld "DataSet" Adodataset1 drinsteht?

PS: Entschuldige wenn ich das net sofort verstehe, es ist mom. noch totales neuland für mich.

hoika 25. Jun 2008 14:28

Re: DBGrid sortieren
 
Hallo,

ja, ist nicht einfach ... ;(

Also
Hintergrund, dem DBGrid ist es egal, woher es seine Daten bakommt
(TTable, Query, AdoDataSet).
Das DataSource "versteckt" die Quelle

also

DBGrid.DataSource -> DataSource1 (bei dir) -> im OI schon richtig gesetzt

Dem DataSource ist es auch egal, woher es seine Daten bekommt,
es muss nur ein Nachkomme von TDataSet sein (TTable, Query, AdoDataSet).

DataSource.DataSet -> AdoDataSet1 (bei dir) im OI noch zu setzen


Falls du bei den DataSets dein AdoDataSet nicht findest,
liegt das daran, dass es nicht Active=True ist (muss es aber weil die
darüberliegende Eigenschaft "AutoEdit" oder so ähnlich das so haben will).

Also muss das AdoDaset auf Active=True und jetzt will er nicht,
weil dein CommandText kein sinnvolles SQL enthält
-> Ändern siehe oben (Select * From TTable order by was_weiss_ich)

Dann active auf True, im OI DataSource1 für DataSet das AdoDataSet auswählen

-->> *freu*


Heiko

Chamb 25. Jun 2008 14:37

Re: DBGrid sortieren
 
@hoika

Danke für diese erkläreung :thumb: .

:dancer: :dancer: Jetzt klappt es :dancer: :dancer:

Vielen, vielen dank für deine gedult und hilfe.

@all

Vielen dank auch euch, für eure zeit, die ihr verwendet hab, mir zu helfen. :thumb:

hoika 25. Jun 2008 16:03

Re: DBGrid sortieren
 
Hallo,

tja, so sind wir,
wir helfen auch Anfängern auch ohne ein Anfänger-Forum ... :cheers:


Heiko


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