Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO Stored Procedure (https://www.delphipraxis.net/5328-ado-stored-procedure.html)

toyoman 2. Jun 2003 07:02


ADO Stored Procedure
 
hallo :D

kennt sich jemand aus auf dieser welt mit stored procedures?
wir versuchen bereits vorhandenen stored procedures auf einem SQL Server 2000 mit Delphi 7 Enterprise die parameter fürs ausführen der stored procedure mitzugeben.
wie die syntax lauten sollte haben wir mitlerweile rausgefunden, irgendwie so:
adostoredproc1.parameters.parambyname('parameterna me').value:=
die parameter auf dem SQL Server sind benamst mit einem @-Zeichen zu beginn: also zum beispiel so: @getPruefCode
unser Programmcode wird kompiliert alles scheint zu funzen, wir können auch daten auslesen aus der stored procedure.
versuchen wir allerdings den parameter zu übergeben meldet delphi, der Parameter würde nicht gefunden werden.
im kleinen dialogfenster der komponente (adostoredproc1) kann man die parameter aber tip top anschauen und bearbeiten.

was kann das für ein problem sein? :roll:

gruss

Domo Sokrat 2. Jun 2003 11:17

Hallo toyoman,

was ADO betrifft bin ich nicht so sehr "beleckt". Du schreibst, dass die Parameter der SP auf dem SQL-Server mit "@" anfangen. Es kann sein, dass sich Delphi daran stört. Object Pascal identifiziert Variablen, die ein "@" vorangestellt haben, als Adressoperatoren. Vielleicht ist das das Problem, auch wenn der Parametername als String übergeben wird ... Probier's doch einfach mal, die SP ohne "@"-Variablen zu definieren.

Weisheit Ende ...

toyoman 2. Jun 2003 14:10

negativ
 
Liste der Anhänge anzeigen (Anzahl: 1)
:(

funzt leider auch mit "normalen" namen nicht (ohne @).

hab noch ein attachment von der genauen fehlermeldung angehängt!

:shock:

frankg 3. Jun 2003 10:45

Re: negativ
 
Zitat:

Zitat von toyoman
:(

funzt leider auch mit "normalen" namen nicht (ohne @).

hab noch ein attachment von der genauen fehlermeldung angehängt!

:shock:

Hi Toyoman!

Unter ADO funktioniert das mit den Parametern ein bisschen anders als bei Datenbankaufrufen über die BDE. Innerhalb von ADO werden Parameter durch ein ? im SQL-String und die Position des Parameters in der Parameters-Liste des Command-Objektes definiert. Ich benutze immer folgenden Code, der ganz gut funktioniert (angenommen wir haben einer Prozedur spDoSomething mit dem Parameter Param1 dann kann man die Prozedur wie folgt aufrufen (ich gehe über direkte ADO-Programmierung weil in dbGO der ein oder andere Fehler drin ist. Wenn man ADO direkt anspricht läuft auch das Programm selbst schneller (frag mich nicht...) genaueres hierzu kannst Du in dem sehr guten Buch "ADO und Delphi" von Andreas Kosch finden (u.a. auch eine Art Benchmark...sehr interessant!)). Damit der Code funktioniert musst Du die Unit ADOInt in deine Uses-Klausel aufnehmen:

Delphi-Quellcode:
procedure CallSP;
var
  myCommand : ADOInt.Command;
  myParam : ADOInt.Parameter;
  RowsAffected : OleVariant;
begin
  // Command-Objekt erzeugen
  myCommand := CoCommand.Create;
  with myCommand do
    begin
      // Command-Objekt initialisieren
      CommandType := adCmdStoredProcedure;
      CommandText := 'spDoSomething';
      // Parameter erzeugen und an das Command-Objekt hängen
      myParam := CreateParameter('Param1',adChar,adParamInput,30);
      Parameters.Append(myParam);
      // Parameterwert setzen
      Parameters[0].Value := 'Hallo';
      // Connection setzen, über die der Befehl abgesetzt wird,
      // irgendwo im Programm muss es die Connection myADOConnection
      // geben, diese muss auch (soweit ich weiss) offen sein
      Set_ActiveConnection (myADOConnection);
      // In RowsAffected steht drin, auf wie viele Zeilen sich die
      // Prozedur ausgewirkt hat. Wenn es Records zurück gibt, dann
      // muss natürlich der letzte Parameter anders sein.
      Execute (RowsAffected,EmptyParam,adExceuteNoRecords);
    end;
  // Command-Objekt wieder freigeben
  myCommand.Free;
end;
Ich hoffe ich konnte Dir weiterhelfen

Viele Grüsse

Frank

toyoman 3. Jun 2003 10:50

dankschön
 
hallo frank

du glaubst nicht wie super es ist so eine antwort zu bekommen nach 2 wochen suchen :)

muss es aber zuerst austesten, bin aber zuversichtlich sieht gut aus!

danke!!!!

toyoman

frankg 3. Jun 2003 11:10

Re: dankschön
 
Zitat:

Zitat von toyoman
hallo frank

du glaubst nicht wie super es ist so eine antwort zu bekommen nach 2 wochen suchen :)

toyoman

Hi Toyoman!

Klar weiss ich das :D . Leider habe ich auf meine Frage (Intraweb) bisher noch keine Antwort bekommen :( . Naja, das wird schon noch. Also der Code funzt bei mir. Wenn Du Dich intensiv mit ADO beschäftigen möchtest, dann hol Dir auf jeden Fall mal das Buch von Andreas Kosch. Ist wirklich klasse. Nachdem ich das gelesen habe habe ich erstmal einen grossen Teil meiner Datenzugriffsobjekte für mein aktuelles Projekt umgeschrieben, so dass dbGO gar nicht mehr verwendet wird.

Viele Grüsse

Frank

toyoman 3. Jun 2003 11:37

intraweb
 
:?
hab mir deinen beitrag/frage über Intraweb gerade angeguckt.. aber leider kenn ich mich damit auch nicht aus. :(
hab noch nie was mit intraweb oder so gemacht...

sorry :angle2:

toyoman 7. Jun 2003 10:00

Hilfe
 
hallo frank

Dein Beispielcode funktioniert nicht.
wir kriegen einen kompilierungsfehler bei der Zeile:

commandtype:=adCmdStoredProcedure;

Delphi sagt er kenne den Begriff adCmdStoredProcedure nicht!

die Unit adoint haben wir eingefügt.

weisst du an was das liegen kann?

Gruss und danke :coder:

frankg 10. Jun 2003 09:51

Re: Hilfe
 
Hallo Toyoman!

Zitat:

Zitat von toyoman
hallo frank

Dein Beispielcode funktioniert nicht.
wir kriegen einen kompilierungsfehler bei der Zeile:

commandtype:=adCmdStoredProcedure;

Delphi sagt er kenne den Begriff adCmdStoredProcedure nicht!

die Unit adoint haben wir eingefügt.

weisst du an was das liegen kann?

Gruss und danke :coder:

Irgendjemand (wir nennen hier natürlich keine Namen :D). Hat sich wohl beim Zusammenhacken des Codes vertan... Die korrekte Zeile muss natürlich lauten

Delphi-Quellcode:
commandtype := adCmdStoredProc;
Tut mir leid, dass ich mich da vertippt habe. Wenn Du selbst so etwas rausfinden möchtest, guck Dir doch einfach mal den Source von ADOInt.pas an. Da steht alles drin.

Viele Grüsse

Frank

ahachmann 9. Mär 2004 11:26

Re: dankschön
 
Zitat:

Zitat von frankg
Zitat:

Zitat von toyoman
hallo frank

du glaubst nicht wie super es ist so eine antwort zu bekommen nach 2 wochen suchen :)

toyoman

Hi Toyoman!

Klar weiss ich das :D . Leider habe ich auf meine Frage (Intraweb) bisher noch keine Antwort bekommen :( . Naja, das wird schon noch. Also der Code funzt bei mir. Wenn Du Dich intensiv mit ADO beschäftigen möchtest, dann hol Dir auf jeden Fall mal das Buch von Andreas Kosch. Ist wirklich klasse. Nachdem ich das gelesen habe habe ich erstmal einen grossen Teil meiner Datenzugriffsobjekte für mein aktuelles Projekt umgeschrieben, so dass dbGO gar nicht mehr verwendet wird.

Viele Grüsse

Frank

Darf ich kurz fragen, was dbGO ist? Sind das die Objekte unter dem Reiter ADO? Die benutze ich nämlich und bin mit der Geschwindigkeit garnicht zufreiden.
Bei 10000 Datensätzen warte ich für das Darstellen der Tabelle bis zu 10 Sekunden.
In der DB selber geht es ratz fatz.

thx
Alexander


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr.
Seite 1 von 2  1 2      

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