AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO Stored Procedure
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Stored Procedure

Ein Thema von toyoman · begonnen am 2. Jun 2003 · letzter Beitrag vom 24. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#1

ADO Stored Procedure

  Alt 2. Jun 2003, 07:02
hallo

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?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Domo Sokrat
Domo Sokrat

Registriert seit: 14. Mai 2003
Ort: Wehrheim / Ts.
235 Beiträge
 
Delphi 2006 Professional
 
#2
  Alt 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 ...
Michael Seeger
Vergesst nicht: Es wird überall nur mit Wasser gekocht
ZEOSLib - Admin-Team
ZeosLib-Forum
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#3

negativ

  Alt 2. Jun 2003, 14:10


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

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

Miniaturansicht angehängter Grafiken
ado.gif  
  Mit Zitat antworten Zitat
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#4

Re: negativ

  Alt 3. Jun 2003, 10:45
Zitat von toyoman:


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

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

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
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#5

dankschön

  Alt 3. Jun 2003, 10:50
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
  Mit Zitat antworten Zitat
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#6

Re: dankschön

  Alt 3. Jun 2003, 11:10
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 . 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
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#7

intraweb

  Alt 3. Jun 2003, 11:37

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
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#8

Hilfe

  Alt 7. Jun 2003, 10:00
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
  Mit Zitat antworten Zitat
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#9

Re: Hilfe

  Alt 10. Jun 2003, 09:51
Hallo Toyoman!

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
Irgendjemand (wir nennen hier natürlich keine Namen ). Hat sich wohl beim Zusammenhacken des Codes vertan... Die korrekte Zeile muss natürlich lauten

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
  Mit Zitat antworten Zitat
ahachmann

Registriert seit: 15. Sep 2003
Ort: Hamburg
54 Beiträge
 
Delphi 7 Professional
 
#10

Re: dankschön

  Alt 9. Mär 2004, 11:26
Zitat von frankg:
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 . 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 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