AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBGrid und mehrere Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid und mehrere Tabellen

Ein Thema von BackOrifice · begonnen am 9. Jan 2009 · letzter Beitrag vom 9. Jan 2009
Antwort Antwort
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#1

DBGrid und mehrere Tabellen

  Alt 9. Jan 2009, 15:13
Datenbank: MS SQL Server • Version: 2000 • Zugriff über: dbExpress
Hallihallo,

ich nutze zum Anzeigen und - und das ist das Problem - zum Editieren von Datensätzen in Tabellen ein DBGrid. Folgender Verbindungsaufbau:

SQLConnection -> SimpleDataSet -> DataSource -> DBGrid

Ich hole mir die Datensätze: SimpleDataSet.CommandText :=
SQL-Code:
SELECT t.anfang, t.ende, ti.titel, ti.inhalt, g.name_grp
FROM termin t, termin_inhalt ti, gruppe g
WHERE t.inhalt_id = ti.inhalt_id
AND ti.gruppen_id = g.gruppen_id
Jetzt ist die Options des DBGrids auch mit goEditing gesetzt und ich möchte zbs. den Titel in dem Grid ändern.

Der springende Punkt dabei ist, dass anscheinend das DataSet beim Updaten nicht mit mehreren Tabellen zurecht kommt. Egal wie der CommandText aussieht, bei mehr als einer Tabelle schmeisst beim ApplyUpdates(0) die Runtime eine Exception: "Ungültiger Spaltenname xy"
Ich hab bis jetzt absolut keine Ahnung, wie ich das Problem umgehen/verhindern kann. Ein InnerJoin behebt die Sache auch nicht.

Hat irgendeiner von euch eine Idee dazu? Ich wäre um jeden Tipp dankbar.
Henning
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: DBGrid und mehrere Tabellen

  Alt 9. Jan 2009, 15:52
Hallo,

benutzt Du immer dieses eine SQL oder auch schon mal unterschiedliche?
Mach mal vor dem Öffnen der Datenmenge ein DBGrid.Columns.Clear, dann werden die Spalten neu erstellt und passen zur Datenmenge. Die Spaltentitel muss Du dann jedesmal neu machen, wenn sie nicht mit den Spaltennamen übereinstimmen sollen.
Mit Tabellenalias zu arbeiten ist zwar schön und macht das alles etwas kürzer, aber versuch doch mal, ob es ohne Alias funktioniert:
SQL-Code:
SELECT termin.Anfang, termin.Ende, termin_inhalt.Titel, termin_inhalt.Inhalt, gruppe.Name_Grp
FROM termin, termin_inhalt, gruppe
WHERE termin.inhalt_id = termin_inhalt.inhalt_id
AND termin_inhalt.gruppen_id = gruppe.gruppen_id
Heißt die Fehlermeldung wirklich Spalte xy?
Wenn Du im SQL bei den Spaltennamen ein bisserl auf Groß-/Kleinschreibung achtest, sieht es im DBGrid auch ohne explizites Setzen der Spaltentitel ein bisserl schöner aus, eventuell sind die Anwender dann ja damit schon zufrieden und Du kannst Dir das Ändern der Spaltentitel sparen
  Mit Zitat antworten Zitat
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#3

Re: DBGrid und mehrere Tabellen

  Alt 9. Jan 2009, 16:19
Hi, danke für die Antwort.

Das Statement ist immer das Selbe, statisch also. Die Columns erstell ebenfalls statisch, in devTime. Dort setze ich dann auch Eigenschaften, die ich dringend brauche.
Das Ändern des Aliases auf den Tabellennamen selbst bringt leider gar keine Besserung.

Prinzipell geht es mir nur ums Ändern. Alles andere funktioniert tiptop.
Henning
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: DBGrid und mehrere Tabellen

  Alt 9. Jan 2009, 16:31
Hallo,
dann verate uns doch mal, welche Spalte er meint nicht zu finden, sicherlich nicht die Spalte xy, eventuell kommt ja dann der aha-Effekt.

Zum Nichtfinden kommen (meiner Meinung nach) infrage:

termin.Anfang
termin.Ende
termin_inhalt.Titel
termin_inhalt.Inhalt
gruppe.Name_Grp
termin.inhalt_id
termin_inhalt.inhalt_id
termin_inhalt.gruppen_id
gruppe.gruppen_id

was eigentlich erstmal unwahrscheinlich zu sein scheint. Ist es wirklich eine Spalte, die hier nicht aufgeführt ist, so liegt entweder ein Fehler bei der Konfigurations des DBGrids vor oder die Datenbank will mehr aktualisieren, als Du in der Abfrage an Daten holst.
  Mit Zitat antworten Zitat
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#5

Re: DBGrid und mehrere Tabellen

  Alt 9. Jan 2009, 17:41
Exception 1) Klasse TDBXError mit der Meldung
'SQL State 42S22 SQL Error Code: 207'
Ungültiger Spaltenname 'name_grp'
42S22 SQL Error Code: 207
Ungültiger Spaltenname 'titel'
42S22 SQL Error Code: 207
Ungültiger Spaltenname 'titel' (wohlgemerkt, Titel 2x)

Exception 2) Klasse TDatabaseError mit der Meldung
'Datensatz wurde nicht gefunden, es wurde kein Schlüssel angegeben'



....
Henning
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: DBGrid und mehrere Tabellen

  Alt 9. Jan 2009, 18:01
Hallo,

bitte mal die Strukturen aller Tabellen posten, haben mehrere 'ne Spalte Titel?

Eventuell (eher sicherlich) musst Du die ID's der Tabellen mit ins DBGrid nehmen, da die Datenbank anscheinend mit den selektierten Spalten keine eindeutige Zuordnung hinbekommt. Was soll letztendlich aktuallisiert werden? Alle selektierte Spalten oder nur Anfang und Ende. Sind das 1:1-Beziehungen oder 1:n, im zweiten Fall kann es Dir ja passieren, das mehr Datensätze aktualisiert werden, als Du möchtest. name_grp klinkt mir jedenfalls so, als wäre das eine Bezeichnung, die für eine Gruppe von Terminen infrage kommen könnte und eine Änderung ja dann für die gesamte Gruppe durchgeführt würde.

Die ID-Spalten musst Du dann auf die Breite 0 setzen bzw. das DBGrid hat im Attribut Columns ja auch ein Visible, damit kannst Du die dann ausblenden. Nicht änderbare Spalten kannst Du dann auch noch auf ReadOnly setzen.

Eventuell kommt das Problem aber auch daher, dass dem Grid ja nur die "reinen" Spaltennamen bekannt sind und nicht die zugehörigen Tabellen und dann die Datenbank bei der Änderung nicht weiß, zu welcher Tabelle die Spalten gehören, halte das aber eher für unwahrscheinlich.

Alternative: Mache eine View mit Deinem SQL und lese die Daten aus der View ins DBGrid, dann könnte die Datenbank anhand der Viewdefinitionen ermitteln, was in welche Tabelle soll. Aber ohne das jetzt auszuprobieren, kann ich Dir nicht sagen, ob's 'ne Lösungsmöglichkeit ist.

[OT]Bin jetzt gleich weg, eine Antwort von mir kommt dann frühestens Montag.[/OT]
  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 00:43 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