![]() |
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 ? |
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:
dann ist RecordCount = 0
with ADOQuery1 do Begin
SQL.Text:= 'SELECT '+ '* '+ 'FROM '+ '[GROUP_] '+ 'WHERE '+ 'NAME_ = ''é'' '; Open; ... 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 |
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