Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Bei CommandText Zuweisung Exception (https://www.delphipraxis.net/156959-bei-commandtext-zuweisung-exception.html)

RalfE 22. Dez 2010 08:54

Bei CommandText Zuweisung Exception
 
Hallo,
ich verwende Delphi 7,

bei Zuweisung "ADOSet.CommandText := HlpStr"
kommt Access Violation.

Bei Button Klick soll erstmal nur ein Memo gefüllt werden
(bin noch am Probieren). Hier mal der Code:

Delphi-Quellcode:
procedure TFirstForm.Button2Click(Sender: TObject);
Var ADOConn: TADOConnection;
    ADOSet: TADODataSet;
    Loop : Integer;
    HlpStr : WideString;
begin
  ADOConn := TADOConnection.Create(nil);
  ADOSet := TADODataSet.Create(nil);
  ADOConn.Provider := 'ADsDSOObject';
  ADOConn.ConnectionString := 'Provider=ADsDSOObject;Encrypt Password=False;Integrated Security=SSPI;Data Source=NIS;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648';
  ADOConn.LoginPrompt := false;
  ADOSet.Connection := ADOConn;

  HlpStr := 'SELECT displayName,name,ADsPath,DistinguishedName,Location FROM ';
 HlpStr := Concat(HlpStr,QuotedStr('LDAP://meyer_1'));
  HlpStr := Concat(HlpStr,'WHERE objectClass = ',QuotedStr('user'),'and objectCategory = ');
  HlpStr := Concat(HlpStr,QuotedStr('Person'));
  ADOSet.CommandText := HlpStr; // Exception !!!!
  ADOSet.Open;
  ADOSet.First;
  Memo1.Clear;
  for Loop := 0 to ADOSet.RecordCount -1 do
  begin
    Memo1.Lines.Add(ADOSet.Fields[1].AsString);
    ADOSet.Next;
  end;
end;
Lasse ich das Programme weiterlaufen, so wird das Memo
entsprechend gefüllt.

Danke.

Bummi 22. Dez 2010 11:38

AW: Bei CommandText Zuweisung Exception
 
wenn Du
Delphi-Quellcode:
ADOSet.Connection := ADOConn;
erst nach dem Zuweisen des Commandtextes setzt ist der Fehler weg.

Gollum 22. Dez 2010 13:17

AW: Bei CommandText Zuweisung Exception
 
Hallo,

nachdem Du Connection erzeugt hast, musst Du auch noch einen Verbindung zu Ihr herstellen, bevor Du die Connection dem Dataset zuweist:
Delphi-Quellcode:
ADOConn := TADOConnection.Create(nil);
...
...
ADOConn.LoginPrompt := false;
ADOConn.Connected:=True; // oder ADOConn.Open;
ADOSet.Connection := ADOConn;
Beim Zusammenbau deines SQL-Statements würde ich noch Parameter benutzen:
Delphi-Quellcode:
 HlpStr:='SELECT displayName,name,ADsPath,DistinguishedName,Location FROM ';
 HlpStr:=Concat(HlpStr,QuotedStr('LDAP://meyer_1'));
 HlpStr:=HlpStr+'WHERE objectClass=:Class and objectCategory=:Category';
 ADOSet.Parameters.ParamByName('Class').Value:='user';
 ADOSet.Parameters.ParamByName('Category').Value:='person';
 ADOSet.Open;
 // ADOSet.First; -> diese Zeile kannst Du Dir sparen, weoil der Datensatzzeiger immer auf dem 1. Eintrag steht


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz