![]() |
Datenbank: Firebird • Version: 2.0 • Zugriff über: ZEOS Lib
Eine VIEW updaten
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:
Klappt auch alles, nur wie kann ich über diese virtuell gebildete Tabelle meine Daten ändern, oder neue hinzufügen.
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 ; Einen
SQL-Code:
verweigert meine DB und Delphi sagt:
Insert Into
--------------------------- 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 |
Re: Eine VIEW updaten
Der View muß als updatable markiert sein(WITH CHECK OPTION)
|
Re: Eine VIEW updaten
@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 |
Re: Eine VIEW updaten
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
|
Re: Eine VIEW updaten
Danke für den Link,
die Dokumentation beantwortet mit Sicherheit viele meiner Fragen :-) Kannst du den Link noch reparieren? Dort steht: Zitat:
Gruß DelphiManiac |
Re: Eine VIEW updaten
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Re: Eine VIEW updaten
@onlinkater
Danke dir, denke aufjeden Fall, das mir das weiterhilft, ich gucke mir das nachher mal an. Gruß und Danke Dir! DelphiManiac |
Re: Eine VIEW updaten
views die über mehrere tabellen lassen sich in den meisten systemen garnicht updaten.
da die datenbanken meist die schlüssel nicht setzen können. |
Re: Eine VIEW updaten
Hallo,
bei Firebird geht das aber über obengenannte Trigger. Heiko |
Re: Eine VIEW updaten
[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:
Und so gehts nicht:
Update MyView Set MyField = 'Foobar'
<Enter> 1 row(s) affected Update MyTable Set MyField = 'Foobar' <Enter> 1 row(s) affected
Code:
Ich denke mir mal, das die anderen Provider ähnliches voraussetzen
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 [/Anmerkung von einem IB-Laien] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz