Autor Beitrag
DoubleM
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 31.07.13 12:40 
Hallo liebe Gemeinde,

ich arbeite mich langsam in die Thematik ein und bin auf ein Hindernis gestoßen.
Ich habe vor über mein GridView eine Störungsübersicht darzustellen.
Dazu habe ich 2 Tabellen (Stoerungen, Mitarbeiter)

Im SQL Server habe ich schon eine Beziehung zwischen beiden Tabellen hergestellt.
Meine Select-Anweisung im GRID funktioniert tadellos.

ausblenden SQL-Anweisung
1:
2:
3:
SELECT Stoerungen.S_ID, Mitarbeiter.Name, Stoerungen.S_device, Stoerungen.S_desc, Stoerungen.S_Filiale, 
Stoerungen.S_status, Stoerungen.S_creationdate, Stoerungen.S_Ursache, Stoerungen.S_Bearbeiter, 
Stoerungen.S_lastdate FROM Stoerungen INNER JOIN Mitarbeiter ON Stoerungen.S_Mitarbeiter = Mitarbeiter.M_ID


Zu einer SELECT-Anweisung braucht man clevererweise auch eine UPDATE Anweisung.
An diesem Punkt hakt es gerade, vielleicht habe ich auch einfach nur einen fehlerhaften Ansatz.

Rein gedanklich sollte er anhand des Namens aus der Tabelle Mitarbeiter die Mitarbeiter.M_ID mit dem Wert Stoerungen.S_Mitarbeiter gleichsetzen.
Ich habe die Namen mittels DropDownList aus der Tabelle Mitarbeiter entnommen.

Vielen Dank schonmal für Eure Hilfe.

Moderiert von user profile iconTh69: SQL-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 31.07.13 14:01 
Hier fehlt irgendwie die konkrete Frage.
Was ist jetzt dein Problem beim Update?
DoubleM Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 31.07.13 15:43 
Die konkrete Frage lautet:

Wie würde die entsprechende UPDATE Anweisung lauten, damit die Werte korrekt gepeichert werden

Tabelle1: Mitarbeiter

M_ID int (FK mit Stoerungen.Mitarbeiter)
Name nvarchar

Tabelle2: Stoerungen
S_ID bigint
Mitarbeiter (FK mit Mitarbeiter.M_ID)
Filiale
S_device
S_desc
...

Mein GridView greift auf alle Werte der Stoerungen-Tabelle zu.
Statt des Mitarbeiter int Werts wird in dem GridView der Name aus Tabelle Mitarbeiter angezeigt.

Beim Update muss natürlich der Int-Wert (M_ID) genommen werden und in das Feld Mitarbeiter der Tabelle Stoerungen geschrieben werden.
Derzeit hänge ich genau dort fest und benötige bei der Umsetzung Hilfe!!!

Ich hoffe, dass mein Problem somit ausführlich dargelegt wurde.

Vielen Dank vorab schon einmal für Eure Mühen!
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mi 31.07.13 16:04 
Moin,

meinst du soetwas?

ausblenden SQL-Anweisung
1:
UPDATE t1, t2 SET t1.c1 = 1, t2.c1 = 2, t1.c2 = 4 WHERE (t1.id = t2.id)					
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 31.07.13 16:24 
Ich vermute mal du willst nur die Stoerungen Tabelle updaten und S_ID ist der primäre Schlüssel richtig? Die Mitarbeiterdetails an dieser Stelle mitzuändern wäre wohl unfug.
Du willst vielleicht die Zuordnung des Mitarbeiters zu einer Störung ändern aber bestimmt nicht den Namen des Mitarbeiters.

Wenn du die M_ID(oder S_Mitarbeiter -die wäre ja gleich) brauchst mußt du die auch mit in die Select Liste aufnehmen. Man kann nur verwenden und ändern was man auch mit aus der DB geholt hat ;)

Eine Update wäre dann der übliche Aufbau wie bei jedem Update in ADO.Net (so wie ihn eine DataAdapter oder CommandBuilder automatisch generieren würde).
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
UPDATE Stoerungen SET S_device = @S_device_neuerWert, 
                      S_desc = @S_desc_neuerWert, 
                      S_Filiale = @S_Filiale_neuerWert,
                      -- und noch viele mehr
                      S_Mitarbeiter = @S_Mitarbeiter_neuerWert
WHERE S_ID = @S_ID
  AND S_device = @S_device_alterWert
  AND S_desc= @S_desc_alterWert
  AND S_Filiale = @S_Filiale_alterWert,
  -- und noch viele mehr
  AND S_Mitarbeiter = @S_Mitarbeiter_alterWert


Je nachdem wie du die Daten anzeigst ist es vielleicht ratsam gar keinen Join zu verwenden sondern nur die Stoerungen Tabelle anzuzeigen. Den Namen des Mitarbeiters anstatt S_Mitarbeiter anzuzeigen könnte man dann z.b. per Lookup Column in einem Grid.
DoubleM Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 07.08.13 14:17 
Hallo liebe Gemeinde,

erst einmal vielen Dank an alle, die mir so fleißig geholfen haben.

Ich war gerade dabei, das Bsp. von Ralf zu übertragen, leider klappt es nicht oder ich habe mich falsch angestellt.
Bei meiner recherche bin ich nun soweit, dass ich in meiner Gridview alle Werte der einen Tabelle Stoerungen abbilde.

Beim Editieren wird eine 2. SQL Source angezapft, die wiederum meine Mitarbeiter und ID zuordnet und als Dropdownlist anzeigt.

ausblenden XML-Daten
1:
2:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:cpInternConnectionString %>" 
        SelectCommand="SELECT DISTINCT [Name], [M_ID] FROM [Mitarbeiter]"></asp:SqlDataSource>


Nur wenn diese Werte übernommen werden sollen, bspw. Mitarbeiter ändert sich, wird der Wert nicht übernommen.

Ich hoffe, dass es das war was gemeint war Ralf mit der Lookup Column??

Moderiert von user profile iconTh69: XML-Tags hinzugefügt
mmgg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 06.07.14 23:15 
müsste der WHERE Abschnitt nicht auch auf 'NULL' checken?