Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Create View gibt Fehler zurück (https://www.delphipraxis.net/118523-create-view-gibt-fehler-zurueck.html)

okoeller 9. Aug 2008 12:31

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

Create View gibt Fehler zurück
 
Hallo

ich erzeuge mit
SQL-Code:
IF NOT EXISTS (SELECT * FROM sysobjects WHERE NAME = 'access_rights' AND xtype = 'V')
exec ('Create view dbo.access_rights as
select sys.name as login_name,
       ben.benutzer_id as benutzer_id,
       ben.name as name,
       ben.std_kundenstamm as std_kundenstamm,
       ben.access_rights as access_rights,
       ben.beschreibung as beschreibung
from sysusers sys
LEFT OUTER JOIN benutzer ben ON (ben.login_name = sys.name)
where hasdbaccess = 1
')
erfolgreich eine view.

Jetzt ändere ich die Zeile 10 wie folgt:
SQL-Code:
LEFT OUTER JOIN benutzer ben ON (ben.login_name = sys.name) and (ben.access_rights <> 'Deaktiviert' )
und bekomme den Fehler:
"Falsche Syntax in der Nähe von Deaktiviert".

Wenn ich aber
SQL-Code:
select sys.name as login_name,
       ben.benutzer_id as benutzer_id,
       ben.name as name,
       ben.std_kundenstamm as std_kundenstamm,
       ben.access_rights as access_rights,
       ben.beschreibung as beschreibung
from sysusers sys
LEFT OUTER JOIN benutzer ben ON (ben.login_name = sys.name) and (ben.access_rights <> 'Deaktiviert' )
where hasdbaccess = 1
mit TOAD ausführe bekomme ich auch Ergenisse ohne Fehlermeldung.

Was mach ich hier falsch?

oliver

marabu 9. Aug 2008 13:23

Re: Create View gibt Fehler zurück
 
Hallo Oliver,

wäre es so nicht besser?

SQL-Code:
select sys.name as login_name,
       ben.benutzer_id as benutzer_id,
       ben.name as name,
       ben.std_kundenstamm as std_kundenstamm,
       ben.access_rights as access_rights,
       ben.beschreibung as beschreibung
from sysusers sys
LEFT OUTER JOIN benutzer ben ON (ben.login_name = sys.name)
where hasdbaccess = 1 
and ben.access_rights <> 'Deaktiviert'
Freundliche Grüße

okoeller 9. Aug 2008 13:40

Re: Create View gibt Fehler zurück
 
Hallo marabu

leider bekomme ich mit
SQL-Code:
IF NOT EXISTS (SELECT * FROM sysobjects WHERE NAME = 'access_rights' AND xtype = 'V')
exec ('Create view dbo.access_rights as
select sys.name as login_name,
       ben.benutzer_id as benutzer_id,
      ben.name as name,
      ben.std_kundenstamm as std_kundenstamm,
      ben.access_rights as access_rights,
      ben.beschreibung as beschreibung
from sysusers sys
LEFT OUTER JOIN benutzer ben ON (ben.login_name = sys.name)
where hasdbaccess = 1 and ben.access_rights <> 'Deaktiviert'
')
immer noch den Fehler:
"Falsche Syntax in der Nähe von Deaktiviert"

oliver

marabu 9. Aug 2008 13:45

Re: Create View gibt Fehler zurück
 
Wie sieht denn das DDL Statement von Tabelle BENUTZER aus?

okoeller 9. Aug 2008 14:02

Re: Create View gibt Fehler zurück
 
Hall marabu,

also ich hab inzwischen herausgefunden was DDL bedeutet (google sei dank),
aber leider weis ich nicht wo ich in Toad die Info bekommen kann welche DDL für benutzer verwendet wird.
Ich hab die Tabelle benutzer ausgewählt und bin alle Karteikarten durchgegangen die für benutzer zur Verfügung stehen.

Nach welchen Informationen zur DataDefinitionLanguage muß ich ausschau halten?

oliver

marabu 9. Aug 2008 14:41

Re: Create View gibt Fehler zurück
 
Ich wollte von dir wissen welchen Datentyp das Feld BENUTZER.ACCESS_RIGHTS hat. Das entsprechende DDL-Statement ist CREATE TABLE BENUTZER ... - du hast es als Script irgendwo liegen oder kannst es vom DBMS erzeugen lassen. Auch TOAD sollte die Bereitstellung von DDL Statements unterstützen.

Mein Verdacht ist, dass dein Feld keinen passenden Typ hat, der mit dem String-Literal 'Deaktiviert' verglichen werden könnte.

okoeller 9. Aug 2008 14:54

Re: Create View gibt Fehler zurück
 
Hallo marabu,

das Feld access_rights ist vom Typ varchar(30) NOT NULL siehe Script

SQL-Code:
IF NOT EXISTS (SELECT * FROM sysobjects WHERE NAME = 'benutzer' AND xtype = 'U')
CREATE TABLE dbo.[benutzer] (
[benutzer_id] int IDENTITY(1,1) NOT NULL,
[login_name] varchar(20) NOT NULL,
[name] varchar(80) NOT NULL,
[access_rights] varchar(30) NOT NULL,
[beschreibung] varchar(300) NOT NULL,
[std_kundenstamm] varchar(50) NOT NULL,
PRIMARY KEY ([benutzer_id]),
UNIQUE (login_name)
)
oliver

Phoenix 9. Aug 2008 15:14

Re: Create View gibt Fehler zurück
 
Genau das ist das DDL nach dem gefragt wurde ;-)

marabu 9. Aug 2008 15:20

Re: Create View gibt Fehler zurück
 
Kann es sein, dass du beim Eintragen deines Statements als CommandText vergessen hast die beiden Apostrophe rund um Deaktiviert zu verdoppeln?

SQL-Code:
IF NOT EXISTS (SELECT * FROM sysobjects WHERE NAME = 'access_rights' AND xtype = 'V')
exec ('Create view dbo.access_rights as
select sys.name as login_name,
       ben.benutzer_id as benutzer_id,
       ben.name as name,
       ben.std_kundenstamm as std_kundenstamm,
       ben.access_rights as access_rights,
       ben.beschreibung as beschreibung
from sysusers sys
LEFT OUTER JOIN benutzer ben ON (ben.login_name = sys.name)
where hasdbaccess = 1
and ben.access_rights <> ''Deaktiviert''
')

okoeller 9. Aug 2008 15:29

Re: Create View gibt Fehler zurück
 
Hallo marabu,

es hat funktioniert mit den doppelten Anführungzeichen.
Hab schon einige Variationen ausprobiert, aber nicht diese.
Ich hatte auch vermutet dass es mit der Syntax zu tun hat.

Nochmals vielen Dank.

Oliver


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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