Entwickler-Ecke
Datenbanken - Access und ADO
littlemike1005 - Sa 26.02.05 11:32
Titel: Access und ADO
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 - 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...
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...
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)= 0) then Sort := Column.Field.FieldName + ' DESC' else Sort := Column.Field.FieldName + ' ASC'; end; end; |
littlemike1005 - 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 - Sa 26.02.05 22:06
littlemike1005 hat folgendes geschrieben: |
EIN DICKES DANKE |
:oops: nana, das muß doch nicht sein....
littlemike1005 - Sa 26.02.05 22:22
Warum den nicht? :lol: :lol: :lol: :lol:
NetSpider - 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.
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)= 0) then 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
NetSpider - 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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!