AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken row cannot be located for update... wenn eine View benutzt wird
Thema durchsuchen
Ansicht
Themen-Optionen

row cannot be located for update... wenn eine View benutzt wird

Ein Thema von seb83 · begonnen am 20. Jun 2022 · letzter Beitrag vom 21. Jun 2022
Antwort Antwort
seb83

Registriert seit: 25. Jun 2015
9 Beiträge
 
#1

row cannot be located for update... wenn eine View benutzt wird

  Alt 20. Jun 2022, 15:19
Datenbank: SQL Server • Version: 2017 • Zugriff über: AdoQuery
Ich habe die Anbindung eines DBGrids auf eine andere View ändern müssen, da hier ein Union gebraucht wurde.
Diese View wurde mit View_Metadata erstellt und hat Instead of Trigger für alle Operationen.

Problem ist das manchmal nun bei ganz einfach Sachen, wie einen Feld ändern und dann Post, ich die Fehlermeldung "row cannot be located for update..." bekomme.
Query.Properties['Update Criteria'].value :...; Hab hier schon alle Versionen mal probiert um BeforePost, aber hat nichts geholfen.
Nehme ich die alte View ohne das alles gehts problemlos.
Was kann ich tun?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: row cannot be located for update... wenn eine View benutzt wird

  Alt 20. Jun 2022, 15:26
Mit

UNION

wird das nicht gehen.
Woher soll der SQL Server wissen in welche UNION-Teil er das Update machen soll.
Der Server wird sich nicht gemerkt haben welche Zeile von welchen Teil-Query kommt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
seb83

Registriert seit: 25. Jun 2015
9 Beiträge
 
#3

AW: row cannot be located for update... wenn eine View benutzt wird

  Alt 20. Jun 2022, 15:30
Die Zeilen, die durch Union kommen, werden nie geändert, die sind nur "readonly", es klappt alles bis auf manche Situation, wo der oben genannte Fehler kommt.
Erkenne nur keine Logik dahinter, warum es meistens geht und dann wieder nicht. Und für das echte Update ist ja der INSTEAD OF Trigger da.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: row cannot be located for update... wenn eine View benutzt wird

  Alt 20. Jun 2022, 15:37
man könnte in die SELECTSs der UNION eine Spalte aufnehmen, wo man die Quelle reinschreibt
und dann wird ein UPDATE-Statement geschrieben, was je nach Quelle (im WHERE geprüft) in die richtige Tabelle schreibt.

Oder man schaut, ob sich das Problem mit einem Updatable-View lösen lässt.
$2B or not $2B
  Mit Zitat antworten Zitat
seb83

Registriert seit: 25. Jun 2015
9 Beiträge
 
#5

AW: row cannot be located for update... wenn eine View benutzt wird

  Alt 20. Jun 2022, 15:38
Die View ist ja ansich durch die Trigger updatebar, was auch zu 98% der Fälle funktioniert. Nur manchmal eben nicht.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: row cannot be located for update... wenn eine View benutzt wird

  Alt 20. Jun 2022, 19:25
Woher weiß denn der User, das Programm, der Instead Of Trigger, wann um die 98% geht und wann nicht?
Vielleicht ist der Instead Of Trigger nicht 100% korrekt?

Ich würde sowas eher mit SP machen. Dann kannst Du die wildesten Views bauen, brauchst keine Trigger, nur eine (einzige) Update SP.
Und wenn Du es schön machen willst, vielleicht noch eine Prüffunktion, die vorhersagen kann, ob der Datensatz updateble ist (sprich editierbar).
Gruß, Jo
  Mit Zitat antworten Zitat
seb83

Registriert seit: 25. Jun 2015
9 Beiträge
 
#7

AW: row cannot be located for update... wenn eine View benutzt wird

  Alt 21. Jun 2022, 11:57
Woher weiß denn der User, das Programm, der Instead Of Trigger, wann um die 98% geht und wann nicht?
Vielleicht ist der Instead Of Trigger nicht 100% korrekt?

Ich würde sowas eher mit SP machen. Dann kannst Du die wildesten Views bauen, brauchst keine Trigger, nur eine (einzige) Update SP.
Und wenn Du es schön machen willst, vielleicht noch eine Prüffunktion, die vorhersagen kann, ob der Datensatz updateble ist (sprich editierbar).
Wie kann ich den ein Grid an eine SP binden mit ADO?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: row cannot be located for update... wenn eine View benutzt wird

  Alt 21. Jun 2022, 20:51

Wie kann ich den ein Grid an eine SP binden mit ADO?
An ein Grid würdest Du gar nicht binden, wenn dann das Dataset, an dem das Grid (Datasource) hängt.
Du könntest eine TADOQueury nehmen und ein Update Statement abschicken.
Das machst Du im BeforePost vom TDataset und danach brichst Du das Post ab (dataset.cancel oder Abort).
Die TADOQuery mit dem Update Statement kannst Du als reines Update machen oder eine SP aufrufen, die irgendwelche Logik abarbeitet, falls notwendig.
Das Updatestatemen (oder die SP) gehen natürlich nur auf den "echten" Tabellenteil "diesseits" des Union.

Der Mechanismus vermeidet an sich erstmal keine unlogischen Aufrufe (update auf Union Daten, die nicht aktualsierbar sind). Geschieht dies wirklich, -es ist ja offenbar nicht klar, wann- kann es aber in der SP alles abgefangen werden. Wenn die SP Logik in Zustände kommt, die nicht erwünscht sind, sollte ein Fehler geworfen werden und vielleicht ein Log mit Detailangaben geschrieben werden.
Gruß, Jo
  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 21:36 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