Autor Beitrag
littlemike1005
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187



BeitragVerfasst: Sa 26.02.05 11:32 
Hallo Leute!!!

Habe ein Probelm mit der ADO Kompo. und einer Access Datenbank.
Habe alles soweit am laufen kann meine Daten im DBGrid sehen und bearbeiten nur das Sortieren nach index geht nicht.
Wenn ich ADOTable1 auf MasterSource gehe steht nicht drin und wenn ich MasterFields anwähle kommt ein fenster in dem
steht >> ADOTable1 Fehlende MasterSource oder DataSoure << gehe ich auf IndexName kommt ein Fenster der AktuelleProvider unterstützt nicht die erforderliche Schnittstelle für die Indexfunktion << der OLE DB provider ist Microsoft Jet 4.0

Könnt ihr mir Helfen?
Dominique
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 92



BeitragVerfasst: Sa 26.02.05 11:56 
Die properties Mastersource und Masterfields sind ja auch für die herstellung einer 1:n - Relation zwischen 2 Tabellen gedacht und haben mit sortieren nix zu tun :?
setze Stattdessen IndexFieldnames auf die Feldnamen, nach denen sortiert werden soll, TableDirect muß in diesem Fall (frag nicht wieso, bei Access gings nicht anders) auf true gesetzt sein.
Du kannst auch TAdoTable.Sort verwenden, wenn du willst z.Bsp. um zur Laufzeit zu sortieren, wenn man auf die Spaltenüberschriften des Grids klickt, hierzu ein paar Code-Schnipsel:

Zuerst prüfen, ob der Mauszeiger über einer Spaltenüberschrift im Grid ist...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.DBGrid1MouseMove
  (Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  pt: TGridcoord;
begin
  pt:= DBGrid1.MouseCoord(x, y);

  if pt.y=0 then
    DBGrid1.Cursor:=crHandPoint
  else
    DBGrid1.Cursor:=crDefault;
end;


Dann - bei einem klick auf eine Spaltenüberschrift - wird der Font der Spaltenüberschrift
geändert und die Tabelle nach dem entsprechenden Feld sortiert...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
 const PreviousColumnIndex : integer = -1;
{$J-}
begin
  if DBGrid1.DataSource.DataSet is TCustomADODataSet then
  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  begin
    try
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
    except
    end;

    Column.title.Font.Style := 
    Column.title.Font.Style + [fsBold];
    PreviousColumnIndex := Column.Index;

    if (Pos(Column.Field.FieldName, Sort) = 1)
    and (Pos(' DESC', Sort)= 0then
      Sort := Column.Field.FieldName + ' DESC'
    else
      Sort := Column.Field.FieldName + ' ASC';
  end;
end;
littlemike1005 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187



BeitragVerfasst: Sa 26.02.05 12:12 
EIN DICKES DANKE

Das hat mir 100% geholfen jetzt kann es weiter gehen.
:D :D :D :D :D :D :D :D :D
Dominique
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 92



BeitragVerfasst: Sa 26.02.05 22:06 
littlemike1005 hat folgendes geschrieben:
EIN DICKES DANKE


:oops: nana, das muß doch nicht sein....
littlemike1005 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187



BeitragVerfasst: Sa 26.02.05 22:22 
Warum den nicht? :lol: :lol: :lol: :lol:
NetSpider
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123

Windows XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Do 01.02.07 11:20 
Hi, genau das hat mir auch weitergeholfen... Auch nochmal Danke von mir.

Ich hab das ganze etwas umgebaut, da ich mehrere DBGrids verwende und diese auf den selben Quelltext verweisen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TMainForm.DBGridBookingTitleClick(Column: TColumn);
begin
  if TDBGrid(MainForm.FindComponent('DBGrid' + DBTab.ActivePage.Name)).DataSource.DataSet is TCustomADODataSet then
  with TCustomADODataSet(TDBGrid(MainForm.FindComponent('DBGrid' + DBTab.ActivePage.Name)).DataSource.DataSet) do
  begin

  TDBGrid(MainForm.FindComponent('DBGrid' + DBTab.ActivePage.Name)).Columns[TDBGrid(MainForm.FindComponent('DBGrid' + DBTab.ActivePage.Name)).Tag].Title.Color := clBtnFace;
  TDBGrid(MainForm.FindComponent('DBGrid' + DBTab.ActivePage.Name)).Columns[TDBGrid(MainForm.FindComponent('DBGrid' + DBTab.ActivePage.Name)).Tag].Title.Font.Color := clNavy;

  Column.Title.Color := $00C08000;
  Column.Title.Font.Color := clWhite;
  TDBGrid(MainForm.FindComponent('DBGrid' + DBTab.ActivePage.Name)).Tag := Column.Index;

    if (Pos(Column.FieldName, Sort) = 1)
    and (Pos(' DESC', Sort)= 0then
      Sort := Column.FieldName + ' DESC'
    else  
      Sort := Column.FieldName + ' ASC';  
  end;

end;


Allerdings hab ich jetzt ein Problem. Sobald ich auf spezielle Titles klicke erscheint bei mir eine Fehlermeldung (vgl Screenshot). Allerdings tritt er nur bei speziellen Feldern auf. Ich habe z.B. drei Datums-Felder. Die ersten zwei Columns sortiert er korrekt und es kommt auch keine Fehler-Meldung - bei der dritten Column erscheint der Fehler - auch erscheint er bei manchen String/Currency-Columns.
Meine Access-DB besteht aus 5 Tabellen - bei 3 Tabellen funktioniert alles reibungslos, bei den anderen beiden kommt es immer bei den selben Columns zu diesem Fehler.

Hat jemand eine Ahnung, warum das so sein koennte? Ich denke nicht, dass es an der Struktur der Datenbank liegt oder an der Groesse der Felder...

MfG

NetSpider
Einloggen, um Attachments anzusehen!
_________________
Wer in die Fußstapfen anderer tritt hinterlässt keine eigenen Spuren!
NetSpider
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123

Windows XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Do 01.02.07 20:54 
Oh man!

Ich glaub ich habs jetzt selber gefunden. Das Problem liegt in der Datenbank. Wenn ein DB-Feld ein Leerzeichen enthaelt, dann funktioniert der SQL-Befehl "Sort" nichtmehr...

Toll, jetzt darf ich zwei meiner fuenf Tabellen umstrukturieren...!!!

Tipp: NIEMALS LEERZEICHEN BEI TABELLEN BENUTZEN!!! SPART TIPPEREI UND NACHTRAEGLICHE ARBEIT!

(Die Rede ist hier vom Namen der Column. Natuerlich koennen Leerzeichen in die Tabelle eingegeben werden, allerdings sollte der Name des Feldes keine enthalten).

Das Problem ist geloest - die Fehlermeldung tritt nichtmehr auf!

_________________
Wer in die Fußstapfen anderer tritt hinterlässt keine eigenen Spuren!