AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eine VIEW updaten

Ein Thema von DelphiManiac · begonnen am 6. Mai 2007 · letzter Beitrag vom 7. Mai 2007
Antwort Antwort
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Eine VIEW updaten

  Alt 6. Mai 2007, 13:07
Datenbank: Firebird • Version: 2.0 • Zugriff über: ZEOS Lib
Hallo,

ich habe zurzeit folgendes Problem, bei dem ihr mir hoffentlich helfen könnt:

Fange mal ganz simpel an :

2 Tabellen

1. Mandanten
mit ID, Anrede, Name Vorname,usw

2.Anrede
ID, Anrede

jetzt habe ich ein VIEW deklariert, dass mir einen JOIN über die Mandanten bildet, d.h. das mir die Verbindung von Anrede in Tabelle 1 mit der eigentlichen Anrede aus Tabelle 2 macht.


Das View sieht so aus:

SQL-Code:
CREATE VIEW ALLE_MANDANTEN(
    MANDANTEN_ID,
    ANREDE,
    NAME,
    VORNAME)
AS
select tblMandanten.mandanten_id, tblanrede.anrede, tblmandanten.name,tblmandanten.vorname from tblmandanten,tblanrede
where tblmandanten.anrede = tblanrede.anrede_id
;
Klappt auch alles, nur wie kann ich über diese virtuell gebildete Tabelle meine Daten ändern, oder neue hinzufügen.

Einen Insert Into verweigert meine DB und Delphi sagt:

---------------------------
Controllingsoft
---------------------------
SQL Error: cannot update read-only view ALLE_MANDANTEN. Error Code: -150. The object of the insert, delete or update statement is a view for which the requested operation is not permitted. The SQL: INSERT INTO alle_Mandanten (Mandanten_ID,Anrede,Name,Vorname) VALUES (?, ? , ?, ?);
---------------------------
OK
---------------------------

Wäre super wenn ihr mir sagen könntet wie ich verändernt auf ein View zugreifen kann (falls das überhaupt geht)??

Danke schonmal

Gruß
DelphiManiac
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Eine VIEW updaten

  Alt 6. Mai 2007, 13:14
Der View muß als updatable markiert sein(WITH CHECK OPTION)
Markus Kinzler
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#3

Re: Eine VIEW updaten

  Alt 6. Mai 2007, 13:43
@mkinzler

Mein DB-Helfer

Wo finde ich denn die Möglichkeit, das View updateble zu machen?

P.S.: für den DB-Config nutze ich das IB-Expert Frontend.

Danke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Eine VIEW updaten

  Alt 6. Mai 2007, 13:46
http://www.ibexpert.info/de/documentation/%20%203.%20Datenbankobjekte/%20%202.%20Tabelle/%20%203.%20Tabelleneditor/%2013.%20Erzeuge%20View%20von%20Tabelle%20(Updatab le%20View)/114940.html
Markus Kinzler
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#5

Re: Eine VIEW updaten

  Alt 6. Mai 2007, 13:56
Danke für den Link,

die Dokumentation beantwortet mit Sicherheit viele meiner Fragen

Kannst du den Link noch reparieren?

Dort steht:
Zitat:
Der View basiert auf einer einzigen Tabelle oder einem anderen Updateable View. Aus verknüpften Tabellen resultiert immer ein Read-Only-View. (Gleiches gilt wenn ein Subquery in einem SELECT-Befehl verwendet wird.)
Ich habe ja eine verknüpfte Tabelle, heißt das dann, dass ich diese nicht verändern kann?

Gruß
DelphiManiac
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#6

Re: Eine VIEW updaten

  Alt 6. Mai 2007, 14:47
Um einen View updateable zu machen, mußt Du Trigger auf diesem definieren.
Du benötigst die Trigger BeforeUpdate, BeforeInsert und BeforeDelete.
Ich hänge Dir mal ein Beispiel an. Erzeuge mit dem Script eine neue Datenbank und sieh es Dir an.

Ich hoffe, das hilft Dir weiter.

Gruß

Thomas
Angehängte Dateien
Dateityp: zip updateable_view_demo_204.zip (1,6 KB, 17x aufgerufen)
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#7

Re: Eine VIEW updaten

  Alt 6. Mai 2007, 14:54
@onlinkater

Danke dir, denke aufjeden Fall, das mir das weiterhilft,

ich gucke mir das nachher mal an.

Gruß und Danke Dir!

DelphiManiac
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Eine VIEW updaten

  Alt 6. Mai 2007, 18:28
views die über mehrere tabellen lassen sich in den meisten systemen garnicht updaten.
da die datenbanken meist die schlüssel nicht setzen können.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Eine VIEW updaten

  Alt 7. Mai 2007, 14:09
Hallo,

bei Firebird geht das aber über obengenannte Trigger.


Heiko
Heiko
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Eine VIEW updaten

  Alt 7. Mai 2007, 14:38
[Anmerkung von einem IB-Laien]
Bei MSSL muss man in den Triggern (dort heißen sie 'INSTEAD OF') noch dafür sorgen, das als einzige Meldung ein '(<x> rows affected)' an den Client zurückgeschickt wird. In einem View-update macht man normalerweise mehrere Updates, die -wenn man nicht aufpasst- alle so eine Meldung liefern. ADO z.B. kommt dann gehörig durcheinander.

Ich schaue mir das Egebnis im Query-Analyzer (also eine SQL Konsole) an. Wenn die Update-View-Anweisung genau das gleiche Ergebnis wie eine 'Update Table' Anweisung liefert, dann macht ADO auch mit.
z.B.
Code:
Update MyView Set MyField = 'Foobar'
<Enter>
1 row(s) affected

Update MyTable Set MyField = 'Foobar'
<Enter>
1 row(s) affected
Und so gehts nicht:
Code:
Update MyView Set AnotherField = 'Foobar'
1 row(s) affected <--- z.B. von einem Update auf eine Detail-Tabelle

1 row(s) affected <--- z.B. von einem Update auf einer weiteren Tabelle
Ich denke mir mal, das die anderen Provider ähnliches voraussetzen

[/Anmerkung von einem IB-Laien]
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 01:42 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