Autor Beitrag
Khananka
Hält's aus hier
Beiträge: 4

Win 2000, Win XP
D2005 Ent.
BeitragVerfasst: Do 05.05.05 21:42 
Hi,

ich habe ein DataSet mit mehreren Tabellen, die über Fremdschlüssel und Relations verknüpft sind. Ich will daten aus beiden Tabellen im UI anzeigen, in dem der User durch die Datensätze blättert, bekomme aber die Synchronisation nicht hin :cry: . Ich habe es mit Sortierung und Find versucht, aber die Anzeige besteht aus zwei unzusammenhängenden Datensätzen.
Wie bekomme ich das hin ?

Thx, Khananka
feivel3333
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190

W7
Delphi XE prof
BeitragVerfasst: Mo 09.05.05 19:03 
Hallo,

sich jetzt vorzustellen, was du da machen möchtest, ist nicht ganz einfach. Ist es möglich, dass du dein Programm hier mal incl. Quellcode zum Download reinpostest, dann könnten wir uns das vielleicht mal ansehen.

Gruß, AS
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 09.05.05 19:40 
Ich bin mir ziemlich sicher, dass hier eine 1:n-Beziehung gemeint ist.
Ich habe micht damit zwar noch nicht intensiv beschäftigt unter .NET, aber du musst diese Beziehung bei den betroffenen Tabellen auch zwischen den DataSets (glaube ich) definieren.
Khananka Threadstarter
Hält's aus hier
Beiträge: 4

Win 2000, Win XP
D2005 Ent.
BeitragVerfasst: Di 17.05.05 11:13 
Moin,

Thx für die Rückmeldung.
Vorweg: Ich habe das Problem inzwischen anderweitig gelöst, bin mit dieser Lösung allerdings nicht besonders zufrieden (beim Blättern wird eine neue Abfrage gestartet, die genau einen Datensatz liefert - der wird dann angezeigt). Da das ganze nicht sonderlich performant ist (und außerdem gerne Fehler wie offene Cursor hinterherschleppt), bin ich nach wie vor an einer "vernünftigen" Lösung interessiert.

@jasocul: Nein, es liegt eine 1:1-Beziehung vor. Und ich habe zwischen den Tabellen im DataSet schon Relationen angelegt, allerdigs klappt die Durchsetzung dieser Relationen beim Blättern nicht - da liegt das eigentliche Problem.

@feivel3333: Das ganze Programm werde ich nicht posten, das wäre ein bisschen viel :wink: Das Fragment, das das Problem über Find lösen sollte, sah so aus (ich hoffe, der Code spricht für sich):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
      idx := DSTeilnehmer.Tables['TEILNEHMER_ADR'].DefaultView.Find(TBIdent.Text);
      if idx = -1
      then begin
        TACurrencyMgr.AddNew;
        (TACurrencyMgr.Current as DataRowView).Item['IDENT'] := TBIdent.Text;
      end
      else TACurrencyMgr.Position := idx;

Der DefaultView war sortiert, ich habe auch verschiedene Sortierungen getestet und bin recht sicher, das kein "1-off" Problem vorliegt.
Der nächste Versuch war ein RowFilter ...
ausblenden Delphi-Quelltext
1:
2:
3:
  curident := (TeCurrencyMgr.Current as DataRowView).Item['IDENT'].ToString;
  DSTeilnehmer.Tables['TEILNEHMER_ADR'].DefaultView.RowFilter :=
    System.&String.Format('IDENT = ''{0}''', [curident]);

... hat aber ebenfalls nicht funktioniert. Ich habe auch versucht, den RowFilter mit der Relation zu füttern, etwa so:
Ident = Relation.Parent(Ident)
Das lief ebenfalls nicht.

Ich habe verschiedene Bücher konsultiert (DoKo, Delphi 8 für .NET, Grundlagen / Kochbuch; Pacheco, Delpi for .NET Developer's Guide), aber keiner hatte etwas, was mir unmittelbar weitergeholfen hat.

Soweit, so unzufrieden & für jeden Tip dankbar,
Khananka

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 17.05.05 11:47 
user profile iconKhananka hat folgendes geschrieben:
Vorweg: Ich habe das Problem inzwischen anderweitig gelöst, bin mit dieser Lösung allerdings nicht besonders zufrieden (beim Blättern wird eine neue Abfrage gestartet, die genau einen Datensatz liefert - der wird dann angezeigt). Da das ganze nicht sonderlich performant ist (und außerdem gerne Fehler wie offene Cursor hinterherschleppt), bin ich nach wie vor an einer "vernünftigen" Lösung interessiert.

Ich hatte mal ein ähnliches Problem. Dort wurden beim Blättern sehr viele Berechnungen mit DB-Zugriffen, etc. durchgeführt.
Ich habe dann einen Timer eingesetzt, der bei jedem Blättern nue gestartet wurde. Erst wenn das Intervall-Ende erreicht wurde, habe ich dann die Aktionen gemacht. D.h.: wenn man schnell blättert, passiert erstmal nichts. Steht man aber z.B. eine 3/4 Sekunde auf dem Datensatz, geht es los.