AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken DBGrid Datensätze doppelt angezeigt / Sybase
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid Datensätze doppelt angezeigt / Sybase

Ein Thema von bluesky70 · begonnen am 27. Jul 2011 · letzter Beitrag vom 1. Aug 2011
Antwort Antwort
bluesky70

Registriert seit: 26. Apr 2007
35 Beiträge
 
Delphi XE5 Enterprise
 
#1

DBGrid Datensätze doppelt angezeigt / Sybase

  Alt 27. Jul 2011, 12:38
Datenbank: Sybase SQL Anywhere • Version: 12 • Zugriff über: ODBC/BDE
Hallo,

ich habe folgendes Problem:

Ich benutze in Delphi 7 ein DBGrid in Verbindung mit einer Sybase
SQL-Anywhere Datenbank. Das Problem ist, daß unter bestimmten Umständen
einige Datensätze doppelt bzw. mehrfach im Datengitter angezeigt werden.

In der Tabelle, eine TTable-Komponente, die zurückgeliefert wird über
den ODBC-Treiber, scheinen die Datensätze aber korrekterweise nur einmal
zu sein.

Das Problem scheint nur dann aufzutreten, wenn die Sortierung der Daten
nicht nach dem Primärschlüssel der Tabelle in der Sybase
Datenbank sondern nach einem anderen Index ist.
Wenn man im Datengitter scrollt ist die Anzeige auch oft wieder
plötzlich korrekt.

Hat jemand eine Idee, was das sein kann? Liegt das am DBGrid, daß dieses
an der TTable irgendwie vorbei arbeitet?

Vielen Dank für Hinweise.

Grüße

Andy
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: DBGrid Datensätze doppelt angezeigt / Sybase

  Alt 30. Jul 2011, 03:19
In der Tabelle, eine TTable-Komponente, die zurückgeliefert wird über
den ODBC-Treiber, scheinen die Datensätze aber korrekterweise nur einmal
zu sein.
Bist du da sicher?
Ich würde mir dazu eine Procedure schreiben, die die Daten als CSV in eine Datei rausschreibt
dann kann du in aller Ruhe kontrollieren ob das stimmt.
So ganz grob als Anregung:
Delphi-Quellcode:
// TTable oder TQuery sowie eine TStringliste übergeben
// danach Stringliste mit SaveToFile() speichern
procedure DumpDatasetAsCSV(ds:TDataset; list:Strings);
var
  i : Integer;
  s : string;
begin
  ds.First;
  while not ds.Eof do
  begin
    s := '';
    for i := 0 to ds.Fields.Count-1 do
    begin
      if i <> 0 then
        s := s + '|';
      s := s + ds.Fields[i].AsString;
    en;
    list.Add(s);
    ds.next;
  end;
end;
Das Problem scheint nur dann aufzutreten, wenn die Sortierung der Daten
nicht nach dem Primärschlüssel der Tabelle in der Sybase
Datenbank sondern nach einem anderen Index ist.
Verwendest du denn kein SQL um deine Daten zu sortieren?
Ich frage das weil du oben ja geschrieben hast du würdest TTable verwenden.
  Mit Zitat antworten Zitat
bluesky70

Registriert seit: 26. Apr 2007
35 Beiträge
 
Delphi XE5 Enterprise
 
#3

AW: DBGrid Datensätze doppelt angezeigt / Sybase

  Alt 1. Aug 2011, 16:48
Hallo sx2008,

danke schon mal für deine Antwort.

Ja ich kann inzwischen ganz sicher sagen, daß die Datensätze in der Datenbank und damit der TTable nur einmal vorhanden sind. Wenn ich die Daten wie von Dir beschrieben in eine CSV schrieben lasse, dann sind die da nur einmal drin.

Es scheint wirklich ein Problem in der Kombination einer TTable mit dem TDBGrid zu sein. Irgendwie kommt das TDBGrid nicht mit der Darstellung der Datensätze klar, siehe auch den Hinweis mit dem scrollen.

Wie gesagt es scheint immer zu funktionieren, wenn die TTable nach einem eindeutigen Index sortiert ins (Indexfieldnames). Auch taucht es bei mehrdeutigen Indizes nicht immer auf.

Ich hoffe es gibt noch Hilfe.

Vielen Dank und Grüße

Andy
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#4

AW: DBGrid Datensätze doppelt angezeigt / Sybase

  Alt 1. Aug 2011, 16:54
Ich hatte das Problem bei MSSQL 6.5, welches auf (Code)Basis von Sybase entwickelt wurde.
Prüfe doch mal (=googeln), ob das ein known feature ist.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: DBGrid Datensätze doppelt angezeigt / Sybase

  Alt 1. Aug 2011, 18:11
Hat die Tabelle einen (eindeutigen) Primärschlüssel?
Falls nicht, wäre das die Ursache der Probleme.
Grundsätzlich sollte jede Tabelle in einer relationalen Datenbank einen Primärschlüssel haben.

PS:
Ups - das steht doch schon im 1. Betrag.
Ok, damit das DBGrid richtig funktioniert müssen folgende Bedingungen erfüllt sein:
1.) eindeutiger PK vorhanden
2.) Treiberschicht muss der VCL den Namen des PK-Feldes mitteilen
3.) und davon abhängig muss die Mehode GotoBookmark() funktionieren

Könnte also ein Problem des Treibers sein.

Geändert von sx2008 ( 1. Aug 2011 um 18:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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