Avatar billede sblar Nybegynder
29. august 2003 - 21:24 Der er 13 kommentarer og
2 løsninger

Opdatere view

Jeg har 2 tabeller og 1 view som joiner de 2 tabeller på Nummer så jeg kan trække Nummer, Tæller og Beskrivelse for alle rækker i Table1.

eks.:

Table1:
Nummer  Tæller
12      100
34      150
45      50

Table2:
Nummer  Beskrivelse
12      Nummer12
45      Nummer45

Resultat af view:
Nummer  Tæller  Beskrivelse
12      100      Nummer12
34      150      <NULL>
45      50      Nummer45

Spørgsmålet er så: Hvordan kan jeg opdatere data i Table2, gennem mit view, således at jeg kan angive en beskrivelse for Nummer 34?
Avatar billede sblar Nybegynder
29. august 2003 - 21:27 #1
Viewet ser således ud:

CREATE VIEW dbo.View1
AS
SELECT    dbo.Table1.Nummer, dbo.Table1.Tæller, dbo.Table2.Beskrivelse
FROM      dbo.dbo.Table1 LEFT JOIN
          dbo.Table2 ON dbo.Table1.Nummer = dbo.Table2.Nummer
Avatar billede sblar Nybegynder
29. august 2003 - 21:28 #2
Eller rettere:

CREATE VIEW dbo.View1
AS
SELECT    dbo.Table1.Nummer, dbo.Table1.Tæller, dbo.Table2.Beskrivelse
FROM      dbo.Table1 LEFT JOIN
          dbo.Table2 ON dbo.Table1.Nummer = dbo.Table2.Nummer
Avatar billede cesil Nybegynder
29. august 2003 - 21:30 #3
kan du ikke bare lave en alm. update

update table2 set beskrivelse = 'tekst' where nummer = 34
Avatar billede sblar Nybegynder
29. august 2003 - 21:36 #4
Jo, men brugerens præsentation af data er kun baseret på VIEW1 og det skulle gerne være sådan at ændringer i det grid brugeren ser, afspejles direkte i DB.
Avatar billede cesil Nybegynder
29. august 2003 - 21:43 #5
det kan godt være det er mig der ikke er helt med men i dit view selecter du table2.beskrivelse, så hvis du med din update ændrer table2.beskrivelse vil brugeren da også se den ændring.
Avatar billede sblar Nybegynder
30. august 2003 - 11:44 #6
Det har du helt ret i cesil. Problemet er at jeg forlader mig på at det grid brugeren ser data i, selv står for opdatering af de enkelte rækker. Problemet kan ses ved at åbne viewet i EM og prøve at skrive noget i beskrivelse for nummer 34. Derved fås en fejl der siger at rækken ikke kan opdateres da den ikke længere eksisterer. Rækken har selvfølgelig aldrig eksisteret da der ikke er nogen post i Table2 for nummer 34. Det samme vil være problemet hvis brugeren ser dette view i f.eks. et DBGrid i en Delphi/VB/?? applikation.
Avatar billede cyb Nybegynder
30. august 2003 - 12:59 #7
Ups - det er hvist ikke så lige til med updatable views, det er ikke noget ret mange andre databaser understøtter end Microsoft. Men generelt kan jeg sige at min erfaring er at det plejer at gå hvis man anvender inner joins (dvs. det går ikke at der ikke er en række i tabel 2 for hver række i tabel 1), og der ud over kun laver ændringer i en af tabellerne afgangen (hvis du skal lave ændringer i begge tabeller, så gør det med to updates).
Avatar billede sblar Nybegynder
30. august 2003 - 17:42 #8
jeg har læst noget om at bruge instead of trigger for at opdatere et view. Nogen der kan hjælpe med det?
Avatar billede terry Ekspert
04. september 2003 - 20:14 #9
You dont update via the view! The reason why ther is no Beskrivelse for 34 is because there is NO record in table2. HOW did you get the values
12      Nummer12
45      Nummer45
into table2? You do it for 34 in the same way and they will be visible in the view
Avatar billede terry Ekspert
04. september 2003 - 20:14 #10
.
Avatar billede terry Ekspert
04. september 2003 - 20:17 #11
what puzzles me is you may just as well only have one table!

Table1:
Nummer  Tæller Beskrivelse
12      100    Nummer12
34      150    Nummer34
45      50    Nummer45
Avatar billede terry Ekspert
04. september 2003 - 20:18 #12
what program are you using to enter the data?
Avatar billede terry Ekspert
04. september 2003 - 20:19 #13
Triggers WILL NOT solve your problem! You need to enter the data (Beskrivelse) through some sort of user interface for it to come into table2
Avatar billede sblar Nybegynder
08. september 2003 - 22:20 #14
Jeg gi´r mig. Men terry, jeg har brug for 2 tabeller. Der er jo ingen grund til at gemme beskrivelsen for hver eneste post i table1, der kunne jo være flere poster med samme nummer.
Avatar billede terry Ekspert
09. september 2003 - 16:56 #15
sblar>Your right, if this is a one to many relationship then you will need two tables. An example would be a table containing contact persons. One of the fields would be for example postcode. THis would be related to the postcode table which has the postcode as the primary key and the Town name in a text field. But it is obvious that before you can create a contact with a specific postcode then the postcode record must exist, unless of course you update the contact record AFTER you create the postcode!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester