![]() |
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 |
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 ... |
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: |
Re: negativ
Zitat:
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:
Ich hoffe ich konnte Dir weiterhelfen
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; Viele Grüsse Frank |
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 |
Re: dankschön
Zitat:
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 |
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: |
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: |
Re: Hilfe
Hallo Toyoman!
Zitat:
Delphi-Quellcode:
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.
commandtype := adCmdStoredProc;
Viele Grüsse Frank |
Re: dankschön
Zitat:
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 07:49 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 by Thomas Breitkreuz