Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ungültiger Spaltenname 'test' (https://www.delphipraxis.net/100642-ungueltiger-spaltenname-test.html)

daniel71 1. Okt 2007 21:31

Datenbank: MSSQL Server • Zugriff über: ADOConnection / ADOQuery

Ungültiger Spaltenname 'test'
 
Hallo

Ich bin da ein bisschen am rumexperimentiern und komme auf keinen grünen zweig.

Diese Abfrage:

Delphi-Quellcode:
y:= 'test';

with ADOQuery1 do Begin
  SQL.Text:= 'SELECT '+
              '* '+
             'FROM '+
              '[GROUP_] '+
             'WHERE '+
              'NAME_ = "'+y+'" ';
  Open;
end; x:= ADOQuery1.RecordCount;
Ergibt mir eine Exeption: Ungültiger Spaltenname 'test'

Die Tabelle "GROUP_" hat die Spalten:
ID
NAME_
TYPE_
GROUPI4_ID
...


Die hersteller der Datenbank haben von Paradox (BDE) auf MSSQL gewechselt :pale: , ich möchte mein tool das logischer weise so nicht mehr funktioniert umschreiben. Leider habe ich noch nicht soviel erfahrung mit ADO.

Gruss Daniel

Dax 1. Okt 2007 21:32

Re: Ungültiger Spaltenname 'test'
 
Die " sind in SQL Spaltenstring-Begrenzer. Versuch es statt dessen mal mit einem ', also '' im String.

daniel71 1. Okt 2007 21:39

Re: Ungültiger Spaltenname 'test'
 
Hallo Dax

Vielen Dank, klapt wunderbar :-D

daniel71 1. Okt 2007 21:55

Re: Ungültiger Spaltenname 'test'
 
Hallo

Habe mich zu früh gefreut...

Es gibt zwar keine exeption mehr, aber ein ergebniss auch nicht :(

"ADOQuery1.RecordCount;" ergibt 0, müste aber 1 ergeben.

Delphi-Quellcode:
'NAME_ = ''+y+'' ';
kann mir jemand diese query richtig aufschreiben?

FBrust 1. Okt 2007 22:01

Re: Ungültiger Spaltenname 'test'
 
Hallo,

versuch mal
Delphi-Quellcode:
'NAME_ = ' + QuotedStr('y');

Das vermindert zumindest den Verhau mit den Anführungszeichen :)


Gruß
Frank

Dax 1. Okt 2007 22:12

Re: Ungültiger Spaltenname 'test'
 
Zitat:

Zitat von daniel71
Delphi-Quellcode:
'NAME_ = ''+y+'' ';

Du meinst sicher
Delphi-Quellcode:
'NAME_ = '''+y+''' ';
Um ein ' in einen String zu bringen, Bedarf es zweier '' im String, wenn das ' dann am Anfang/Ende des Strings sein soll, eben drei ': der Stringbegrenzer und das '' für ein ' im String.

daniel71 1. Okt 2007 23:00

Re: Ungültiger Spaltenname 'test'
 
Hallo

Der fehler muss wohl woanders liegen, aber nur wo?

Mit einer selbst erstellten db kriege ich mit dieser abfrage ein ergebniss:

Delphi-Quellcode:
y:= 'hallo';

with ADOQuery1 do Begin
  SQL.Text:= 'SELECT '+
              '* '+
             'FROM '+
              '[test01] '+
             'WHERE '+
              'd = '+ QuotedStr(y);
  Open;
end;
x:= ADOQuery1.RecordCount;
natürlich auch mit der syntax von Dax, vielen dank für die hinweise


mit der db des herstellers aber nicht...

Die tabelle heisst "GROUP_" mit "GROUP" gäbe es einen fehler, kann ich auch nicht ändern, da es nicht meine db ist.
Die Spalte heisst "NAME_" auch hier dürfte es nicht am spaltennamen liegen.

mit diese abfrage kriege ich ein ergebniss:
Delphi-Quellcode:

with ADOQuery1 do Begin
  SQL.Text:= 'SELECT '+
              '* '+
             'FROM '+
              '[GROUP_] ';
  Open;
end;
x:= ADOQuery1.RecordCount;
der zugriff auf die db scheint zu funktionieren, auch mit dem "mssql server management studio express" sehe ich alle einträge der tabelle.

Die Spalte NAME_ ist nvarchar(50), NULL

hat da noch jemand eine idee?

peschai 2. Okt 2007 05:47

Re: Ungültiger Spaltenname 'test'
 
Hallo
versuch doch mal ohne die eckigen Klammern [].
Da gibt es nämlich Unterschiede von Provider zu Provider (z.b. Access, Oracle, DB2 ...)

marabu 2. Okt 2007 10:41

Re: Ungültiger Spaltenname 'test'
 
Hallo,

MSSQL kommt standardmäßig mit begrenzten Bezeichnern zurecht, aber sie werden hier nicht benötigt. Der reservierte Bezeichner GROUP wurde durch das zulässige Zeichen _ (Underscore) entschärft und auch bei NAME_ scheint es ja ein Underscore zu sein. Wenn nicht, dann müsste man den beim Open zurückgelieferten Feldnamen mal genau inspizieren.

Grüße vom marabu

peschai 2. Okt 2007 10:47

Re: Ungültiger Spaltenname 'test'
 
Hallo

Noch ne idee:
1.) Der richtige User/Schema (Gibt es die tabelle 'GROUP_' eventuell mehrmals in der DB unter verschiedenen User)?
2.) AdoQuery1 vorher nochmal closen ?

daniel71 2. Okt 2007 20:49

Re: Ungültiger Spaltenname 'test'
 
Hallo

Erstmal vielen dank für die tips.

Ich glaube ich konnte mein problem eingrenzen, aber noch nicht beheben.

Ich glaube es ist ein typen problem.
In der Spalte NAME_ befindet sich ein eintrag mit dem Zeichen "é"

Wenn ich so suche
Delphi-Quellcode:
with ADOQuery1 do Begin
  SQL.Text:= 'SELECT '+
              '* '+
             'FROM '+
              '[GROUP_] '+
             'WHERE '+
              'NAME_ = ''é'' ';
  Open;
...
dann ist RecordCount = 0

wenn aber in der zelle nur ein 'e' ist und ich in der query nach 'é' suche ist RecordCount = 1

Sorry, ich hatte aus datenschutzgünden geschrieben dass ich nach "hallo" suche :oops:

Die spalte ist vom typ: nvarchar

Welcher typ entspricht dem und wie binde ich das in die abfrage ein?
Kann ich irgendwie aufzeichenen welche query an den sqlserver geschickt wird?

Gruss Daniel

daniel71 2. Okt 2007 21:30

Re: Ungültiger Spaltenname 'test'
 
Jeh

Ich habs! :-D

Ich musste im Delphy unter Tools -> Umgebungsoptionen -> Umgebungsvariabeln
blos die Variable: NLS_LANG mit dem wert GERMAN_GERMANY einfügen, und schon läufts...

Tja, was man nicht alles lernt... :)

Gruss Daniel


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