![]() |
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:
Ergibt mir eine Exeption: Ungültiger Spaltenname 'test'
y:= 'test';
with ADOQuery1 do Begin SQL.Text:= 'SELECT '+ '* '+ 'FROM '+ '[GROUP_] '+ 'WHERE '+ 'NAME_ = "'+y+'" '; Open; end; x:= ADOQuery1.RecordCount; 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 |
Re: Ungültiger Spaltenname 'test'
Die " sind in SQL Spaltenstring-Begrenzer. Versuch es statt dessen mal mit einem ', also '' im String.
|
Re: Ungültiger Spaltenname 'test'
Hallo Dax
Vielen Dank, klapt wunderbar :-D |
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:
kann mir jemand diese query richtig aufschreiben?
'NAME_ = ''+y+'' ';
|
Re: Ungültiger Spaltenname 'test'
Hallo,
versuch mal
Delphi-Quellcode:
'NAME_ = ' + QuotedStr('y');
Das vermindert zumindest den Verhau mit den Anführungszeichen :) Gruß Frank |
Re: Ungültiger Spaltenname 'test'
Zitat:
Delphi-Quellcode:
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.
'NAME_ = '''+y+''' ';
|
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:
natürlich auch mit der syntax von Dax, vielen dank für die hinweise
y:= 'hallo';
with ADOQuery1 do Begin SQL.Text:= 'SELECT '+ '* '+ 'FROM '+ '[test01] '+ 'WHERE '+ 'd = '+ QuotedStr(y); Open; end; x:= ADOQuery1.RecordCount; 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:
der zugriff auf die db scheint zu funktionieren, auch mit dem "mssql server management studio express" sehe ich alle einträge der tabelle.with ADOQuery1 do Begin SQL.Text:= 'SELECT '+ '* '+ 'FROM '+ '[GROUP_] '; Open; end; x:= ADOQuery1.RecordCount; Die Spalte NAME_ ist nvarchar(50), NULL hat da noch jemand eine idee? |
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 ...) |
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 |
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 ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 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