Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TADOQuery und IndexFieldnames (https://www.delphipraxis.net/16200-tadoquery-und-indexfieldnames.html)

ahachmann 12. Feb 2004 12:49


TADOQuery und IndexFieldnames
 
Hallo,
Ich möchte eine in einem DatabaseGrid dargestellte TADOTable zur Laufzeit nach den Feldern sortieren. Hierfür möchte ich keine TADOQry nutzen, da ich die TADOTable in dem Form brauche.
Wenn ich zur Entwicklungszeit die IndexFieldNames auf das zu sortierende Feld setze, dann sortiert die Tabelle Korrekt.
Nu habe ich aber das Problem, daß in dem Formulra über das DBGrid die Propertdie Indexfieldname nicht zu erreichen ist.

Delphi-Quellcode:
  dbgrRoehrchen.DataSource.DataSet.IndexFieldNames := 'article_id';
Wie kann ich diese Property trotzdem ändern, ohne die TADOTable selber mit dan das Formular zu übergeben.

Vielen Dank,
ALexander

r_kerber 12. Feb 2004 13:39

Re: TADOQuery und IndexFieldnames
 
Hallo Alexander,

hast Du in deinem Formular in der uses-Klausel die Unit mit der Tabel angegeben?

ahachmann 12. Feb 2004 14:06

Re: TADOQuery und IndexFieldnames
 
Nein, habe ich nicht.
Aber das soll auch nicht. Das Formular soll nur über das DBGrid auf die Daten zugreifen können. Mit den Feldern Funktioniert das auch. Ich versuche die Uses verknüpfungen aus übersichts Gründen so gering wie möglich zu halten.
Letztendlich muß ich für die Objektklasse ja nur ADODB einbinden und das ist auch drinne.
Hmmm, noch ne Idee?
Thx
Alexander

ahachmann 13. Feb 2004 13:31

Re: TADOQuery und IndexFieldnames
 
Hallo,
Ich habe jetzt folgenden Code erstellt. Da das Dataset ja ein TDataset ist, dachte ich ,daß ich einen Cast auf TADOTable machen könnte. Das klappt aber nicht.
Muß ich wirklich direkt über die Unit auf die Tabelle zugreifen? Eigentlich möchte ich dem Formular die Tabelle übergeben und nicht Direkt drauf zugreifen.

Delphi-Quellcode:
procedure TfrmVerpackung.lcmbCustomerCloseUp(Sender: TObject);
  var tblToFilter: TADOTable;
begin
  tblToFilter := lcmbProduct.DataSource.DataSet AS TADOTable;
  if lcmbCustomer.KeyValue <> 0 then
  begin
    tblToFilter.Filter := 'Where customer_id = '+ inttostr(lcmbCustomer.KeyValue) +'';
    tblToFilter.Filtered := true;
  end
  else
    tblToFilter.Filtered := false;
end;
THX
Alexander

HolyCow 14. Feb 2004 21:56

Re: TADOQuery und IndexFieldnames
 
Ich würde bei solchen Anwendungen (Umsortieren nach beliebigen Spalten etc., Unabhängigkeit vom tatsächlichen DataSet) über ein TClientDataSet im Form nachdenken. TClientDataSet dann über einen TDataSetProvider mit dem TADOTable verbinden - Nachteil/Vorteil: die Verarbeitung/Sortierung etc. findet komplett clientseitig statt ...

ahachmann 16. Feb 2004 11:01

Re: TADOQuery und IndexFieldnames
 
Ok, das klingt vernünftig. Habe das jetzt mal so aufgebaut:

DataSetPrivider->ClientDataset->DataSource->DBGrid.

Beim ersten Test hatte das auch fonktioniert. Aber jetzt beim zweiten, kann ich zwar das Clientdataset auf active:= True setzen. Beim ausführen des Programmes bekomme ich aber leider einen "Eigenschaft für Dataset Fehlt".
Aber es sind alle Objects mit einander verknüpft.
Woran kann das leigen?
Gruß,
Alexander

Robert_G 16. Feb 2004 11:28

Re: TADOQuery und IndexFieldnames
 
Das ClientDataSet macht eigentlich nur Sinn, wenn der User auch "Offline" Daten ändern & synchronisieren will oder der DB-Server 'ne Schnecke (= Single- / Uralt-CPU) ist.

ahachmann 16. Feb 2004 12:21

Re: TADOQuery und IndexFieldnames
 
1 Frage:
Bedeutet das, daß das Clientdataset dann die Tabelle in eine Angegebene XML Datei sichert?

2 Frage:
Wie kann ich das geschilderte Problem mit den fehlenden Datasetinfos lösen? Hab ja wie gesagt den Provider angegeben, und so hat es auch vorher schon mal funktioniert :-|

thx,
Alexander

Hat sich geklärt. Das Formular mit dem referenzierten Dataset muß natürlich im Projektmanager in der Form-Reihenfolge über das bearbeitete Form gesetzt werden, damit es schon existiert. :idea:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.

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