Archiv verlassen und diese Seite im Standarddesign anzeigen : HILFE! ADOQuery beachtet Groß-/Kleinschreibung nicht!
Rainer Steinfeldt
15.08.2000, 12:39
Es sollen nur bestimmte Datensätze in einem DbGrid angezeigt werden. Der Benutzer wählt den Spalten Titel in einer TComboBox aus und gibt den Wert in ein Tedit Feld ein. Aber die Groß-/Kleinschreibung wird nicht beachtet. Wer kann mir die Lösung sagen?
Hier das Beispiel:<pre>
st1 := 'Select * from IMAGES ';
st1 := st1 + ' Where ' + cbColumn2.Text + ' = "'
+ edtValue2.Text + '" ;';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add (st1);
ADOQuery1.Open;
</pre>
Im Voraus vielen Dank<br>
Rainer
Bernhard Geyer
16.08.2000, 07:37
Das Problem wird nicht an der Komponente ADOQuery liegen, sondern an der Datenbank. Z. B. kann bei der Installation einer MS-SQL 7.0 angegeben werden, ob und wie Groß- und Kleinschreibung unterschieden werden soll.
Meine Vermutung kannst Du ganz einfach überprüfen, wenn du z.B. mit Hilfe des Datenbank-Explorers von Delphi oder dem mitgelieferten Query-Tool der Datenbank diese SQL-Anweisung an die Datenbank sendest
Also: Mit dem Delphi Datenbank Explorer (SQL-Explorer) wird auch Groß- / Kleinschreibung nicht unterschieden. Ich habe verstanden, daß es an der Datenbank liegt. Ich benutze eine ACCESS Datenbank, die entsprechend folgendem Beispiel (auch aus diesem Forum) erzeugt ist:
<pre>
uses ADOX_TLB;
<p>
resourcestring
cCONNECTSTRING = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
cCONNECTSTRING2 = ';Jet OLEDB:Engine Type=4;';
<p>
procedure TFormMain.ButtonCreateClick(Sender: TObject);
var
aCatalog : _Catalog;
aTable : _Table;
aColumn : _Column;
sDBPath : String;
sDS : String;
begin
MemoLog.Lines.Clear;
sDBPath := EditMDB.Text;
if FileExists(sDBPath) then
begin
DeleteFile(sDBPath);
MemoLog.Lines.Add(Format('Datenbankdatei %s gelöscht',[sDBPath]));
end;
aCatalog := CoCatalog.Create;
MemoLog.Lines.Add('Catalog...');
sDS := aCatalog.Create(Format('%s%s%s',[cCONNECTSTRING, sDBPath,
cCONNECTSTRING2]));
MemoLog.Lines.Add(sDS);
aTable := CoTable.Create;
MemoLog.Lines.Add('Table...');
aTable.ParentCatalog := aCatalog;
aTable.Name := 'Kunden';
aCatalog.Tables.Append(aTable);
MemoLog.Lines.Add('Column...');
aTable.Columns.Append('eMail', adVarWChar, 20);
MemoLog.Lines.Add('Spalte 2 hinzugefügt...');
aTable.Columns.Refresh;
MemoLog.Lines.Add('.... Fertig!');
end;
</pre>
<b>Ich bin ratlos, wo die Unterscheidung aktiviert werden müßte.</b>
Mit freundlichen Grüßen <br>
Raine
Bernhard Geyer
16.08.2000, 11:30
Bei Access kann ich leider nichts definitifes sagen. Aber ein Test mit einer Access-97 DB läßt vermuten, daß Access evtl. zwischen groß/kleinschreibung nicht unterscheidet.
Aber falls Du in diesem Forum keine Antwort bekommst, probiers mal hier: http://www.spotlight.de/foren/msa/forum_msa.ht
... aber vielen Dank für den "spotlight" Tip. Diese Forum kannte ich noch nicht.<br>
Raine
Andreas Kosch
17.08.2000, 14:01
Hallo,
das Problem liegt nicht an TADOQuery und auch nicht an ADO, denn ADO ist nur der Überbau über die OLE DB-Treiber. Analog zur BDE unterstützt auch ADO viele OLE DB-Provider, so dass das Verhalten von ADO sehr stark vom eingebundenen Treiber abhängt (also wie bei der BDE auch). Und TADOQuery ist nur der VCL-Überbau über die COM-Objekte von ADO, aber TADOQuery mischt sich niemals in die SQL-Auswertung ein.
Ein kurzer Test in Microsoft ACCESS2000 mit einer ACCESS2000-Datenbank zeigt auf, das bei der Suche die Gross/Kleinschreibweise völlig egal ist. Die zusammen mit Delphi 5 ausgelieferte Beispieldatenbank dbdemos.mdb wird dazu im ACCESS2000-Format als dbdemo2k.mdb abgespeichert. Dann reicht ein kurzer Test aus, um dieses Verhalten auch für die JET ENGINE als zuständige Provider für ADO zu verifizieren:
<pre>
object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 16
Top = 72
Width = 633
Height = 297
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\Da' +
'ten\Database\dbdemo2k.mdb;Mode=Share Deny None;Extended Properti' +
'es="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Je' +
't OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:D' +
'atabase Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet O' +
'LEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=' +
'"";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Data' +
'base=False;Jet OLEDB:Don'#39't Copy Locale on Compact=False;Jet OLED' +
'B:Compact Without Replica Repair=False;Jet OLEDB:SFP=False'
LoginPrompt = False
Mode = cmShareDenyNone
Provider = 'Microsoft.Jet.OLEDB.4.0'
Left = 16
Top = 32
end
object ADOQuery1: TADOQuery
Active = True
Connection = ADOConnection1
CursorType = ctStatic
Parameters = <>
SQL.Strings = (
'SELECT country.Name, country.Capital, country.Continent, country' +
'.Area, country.Population'
'FROM country'
'WHERE country.Name='#39'CHILE'#39)
Left = 56
Top = 32
end
object DataSource1: TDataSource
DataSet = ADOQuery1
Left = 88
Top = 32
end
end
</pre>
Man müsste nun im MDAC-SDK nachlesen, welche <b>dynamischen Properties</b> die JET ENGINE unterstützt, mit denen das Laufzeitverhalten geändert werden kann. Aber dort tauchen über 100 Eigenschaften auf, dazu bin ich Heute zu faul ;-
vBulletin® v3.8.1, Copyright ©2000-2010, Jelsoft Enterprises Ltd.