Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ADO Fehler beim laden von CommandText (https://www.delphipraxis.net/179387-ado-fehler-beim-laden-von-commandtext.html)

hesch21 4. Mär 2014 11:00

ADO Fehler beim laden von CommandText
 
Hat mir bitte jemand einen Blindenstock?
ich suche nun seit Stunden einen vermutlich absolut dämlichen Fehler und komme nicht dahinter. Folgender Code:
Code:
             Memo1.Lines.Clear;
             Memo1.Lines.Add('SELECT sAMAccountName, givenName, sn, displayName, physicalDeliveryOfficeName, telephoneNumber, mail, facsimileTelephoneNumber, department, company, profilePath');
             Memo1.Lines.Add('FROM ''LDAP://' + OUTxt + 'DC=' + Edit4.Text + ',DC=' + Edit5.Text + '''');
             hit := 'WHERE objectClass=''user'' and objectCategory=''person''';
             if Edit2.Text <> '' then
                hit := hit + ' and sAMAccountName=''' + Edit2.Text + '''';
             Memo1.Lines.Add(hit);
             ADODataSet1.CommandText := '';
             ADODataSet1.CommandText := Memo1.Text;
             ADODataSet1.Open;
Auf der vorletzten Zeile bekomme ich eine Exception C000000005 Access Violation.
ADODataSet1 ist sicher noch nicht geöffnet und habe sicherheitshalber auch mal versucht, die ganze Connection erst nach diesem Code zu öffnen. Der CommandType von ADODataSet1 ist cmdText. Und wenn ich in etwa das, was da im Memo aufbereitet wird, direkt ins ADODataSet1.CommandText pflanze und die dritt- und vorletzte Codezeile auskommentiere, funktioniert die Geschichte. Also an der Länge des SQL-Statements sollte es eigentlich auch nicht liegen.

Wer hat bitte den gesuchten Blindenstock?

mkinzler 4. Mär 2014 11:08

AW: ADO Fehler beim laden von CommandText
 
Ich würde sehr zur Verwendung von Parametern raten.

Perlsau 4. Mär 2014 11:19

AW: ADO Fehler beim laden von CommandText
 
Offensichtlich erzeugst du mit Add LineBreaks in deinem Memo. CommandText erwartet aber keine LineBreaks. Hier könnte der Fehler liegen.

Wieso stellst du den SQL-Text nicht gleich in CommandText zusammen, wieso der Umweg über das Memo? Und wieso weist du dem CommandText erst einen leeren String zu? Das macht doch keinen Sinn!

hesch21 4. Mär 2014 11:44

AW: ADO Fehler beim laden von CommandText
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo mkinzler
ja, ist nicht sehr schön, dass da so ziemlich viel fest verdrahtet ist, sollte aber bei diesem Fehler keinen Einfluss haben. Wenn da ein Wert falsch wäre, dürfte erst beim Open ein Fehler kommen.

Hallo Perkau
Deine Aussage stimmt nicht. Ich kann problemlos im CommandText-Parameter des ADODataSet Multiline erfassen. Siehe angefügter ScreenShot.
Der Umweg über das Memo ist darin begründet, dass dem User das SQL-Statement angezeigt werden muss (und deshalb auch die Multilines).
Den CommandText auf blank setzen kommt von meinem 200'000 Versuchen her, dem Fehler auf die Schliche zu kommen, macht aber tatsächlich keinen Sinn.

Ich habe es übrigens inzwischen noch versucht, indem ich das Memo zeilenweise in den CommandText geladen habe, einmal mit und einmal ohne #13#10 am Ende jeder Zeile. Der Effekt ist derselbe. Bereits beim Laden der ersten MemoZeile bekomme ich die Exception.

Perlsau 4. Mär 2014 12:04

AW: ADO Fehler beim laden von CommandText
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von hesch21 (Beitrag 1250521)
Hallo Perkau
Deine Aussage stimmt nicht. Ich kann problemlos im CommandText-Parameter des ADODataSet Multiline erfassen. Siehe angefügter ScreenShot.
Der Umweg über das Memo ist darin begründet, dass dem User das SQL-Statement angezeigt werden muss (und deshalb auch die Multilines).
Den CommandText auf blank setzen kommt von meinem 200'000 Versuchen her, dem Fehler auf die Schliche zu kommen, macht aber tatsächlich keinen Sinn.

Das war eine Verwechslung: Ich hatte gedanklich eine Ado-Connection vor Augen, obwohl in deinem Post doch ganz deutlich AdoDataset steht. Sorry :duck:
Mich wundert in deiner geposteten Grafik, daß dort keine Tabellen und Felder zur Auswahl stehen. Ist vielleicht die Connection nicht zugewiesen? Wenn ich ein Ado-Dataset einrichte, finde ich im Anweisungstext-Editor immer alle in der verbundenen Datenbank existierenden Tabellen mit ihren jeweils verfügbaren Feldern vor (siehe angehängte Grafik).

Zitat:

Zitat von hesch21 (Beitrag 1250521)
Ich habe es übrigens inzwischen noch versucht, indem ich das Memo zeilenweise in den CommandText geladen habe, einmal mit und einmal ohne #13#10 am Ende jeder Zeile. Der Effekt ist derselbe. Bereits beim Laden der ersten MemoZeile bekomme ich die Exception.

Das kann ich hier im Augenblick nicht nachvollziehen, obwohl ich auch gerade mit Ado arbeite. Bei mir wird die Zeile, in welcher ich einem Dataset einen CommantText zuweise, anstandslos ausgeführt, auch wenn in diesem Dataset das Property Connection nicht zugewiesen wurde.

Allerdings verwende ich meist Queries statt Datasets. Dort wird der SQL-Befehl im Property SQL abgelegt.

Übrigens: Mein Nick lautet Perlsau, nicht Perkau ... :stupid:

Jumpy 4. Mär 2014 12:11

AW: ADO Fehler beim laden von CommandText
 
Zitat:

Zitat von hesch21 (Beitrag 1250521)
Der Umweg über das Memo ist darin begründet, dass dem User das SQL-Statement angezeigt werden muss (und deshalb auch die Multilines).

Aber kannst du nicht trotzdem das Statement im CommandText zusammen bauen und das dann am Ende dem Memo zuweisen? Wenn das doch angeblich klappt...

hesch21 4. Mär 2014 12:30

AW: ADO Fehler beim laden von CommandText
 
Sorry für den Verschreiber bei deinem Nick
Da ich Ado nur für den Zugriff über LDAP auf das Active Directory benötige, habe ich gar keine 'wirkliche' Datenbank mit Tabellen und Feldern. Respektive, da ist was ganz anderes hinten dran (TurboDB).

Was ich aber eben erst jetzt festgestellt habe, ist die Tatsache, dass die Exception nur unter die IDE auftaucht. Wenn ich das Programm als EXE laufen lassen, passiert nichts. Und auch unter der IDE wird der Befehl ausgeführt!!!! Ich habe keine Ahnung, was das soll, aber für den Moment habe ich mich lange genug mit etwas herum geschlagen, was eigentlich funktioniert.


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