Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mit ADOCommand auf SQL2000 eine SP erzeugen? (https://www.delphipraxis.net/82937-mit-adocommand-auf-sql2000-eine-sp-erzeugen.html)

sveni2211 22. Dez 2006 13:21

Datenbank: MS-SQL • Version: 2000 • Zugriff über: ADO

Mit ADOCommand auf SQL2000 eine SP erzeugen?
 
Hallo.

Ich habe eine MS-SQL 2000 Datenbank. Diese wird per ADO unter Delphi 7 angesprochen.

Jetzt habe ich das Problem, dass aus einer Zuarbeit zwei Stored Procedures mittels des Programms erzeugt werden müssen in der Datenbank. Ich habe die beiden SP's in zwei Dateien *.PRC bekommen. Ich haben nun Versucht mittel einer Instanz von TAdoCommand diese einzuspielen. Dazu setze ich den Typ auf cmdText. Und den Inhalt der Dateien lade ich über TStringList auf AdoCommand.SQL.Text. Wenn ich das nun Ausführe, kommt nur eine Fehlermeldung mit dem Inhalt "Konsens stimmt nicht oder ist unvollständig".

Wie kann ich diese SP importieren? Ich will sie also nicht ausführen sondern erst einmal reinkommen.

NormanNG 22. Dez 2006 13:45

Re: Mit ADOCommand auf SQL2000 eine SP erzeugen?
 
Hi,

SP kann man in SQL mit
SQL-Code:
Create Procedure ...
erstellen.

Was steht denn in den RPC-Dateien drin?

sveni2211 22. Dez 2006 15:36

Re: Mit ADOCommand auf SQL2000 eine SP erzeugen?
 
Beispiel:

SQL-Code:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_ChangeMasterID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_x_D3000SV_MietEig]
GO

CREATE Procedure sp_ChangeMasterID
Wenn ich das Script im Query Analyzer lade und ausführe, dann funktioniert es. Lade ich es hingegen in die Command- Komponenten und versuche es auszuführen, kommt eine Fehlermeldung, dass der Kontext nicht stimmen würden und er die Operation nicht ausführen kann. Also irgendwie unterscheidet sich das ausführen mit der Delphi- Komponente noch von der mit dem Query Analzer.

NormanNG 22. Dez 2006 15:44

Re: Mit ADOCommand auf SQL2000 eine SP erzeugen?
 
Hi,

Zitat:

Zitat von sveni2211
Wenn ich das Script im Query Analyzer lade und ausführe, dann funktioniert es.

Das kann mit dem obigen SQL nicht sein. Der Befehl [Create Procedure] ist oben zumindest nicht vollständig. Da fehlt der eigendliche Prozedur-Text. Oder steht da noch mehr drin? :gruebel:

sveni2211 26. Dez 2006 17:21

Re: Mit ADOCommand auf SQL2000 eine SP erzeugen?
 
Da kommen noch etwa 300 Zeilen. Die habe ich weg gelassen, weil sie in dem Fall unwichtig sind (und Betriebsintern).

Für mich ist ja das Problem, das dieses Script im QA durchläuft. Ich aber diesen Durchlauf in Delphi nicht sauber hin bekomme.

HolgerX 26. Dez 2006 20:35

Re: Mit ADOCommand auf SQL2000 eine SP erzeugen?
 
Aus der Delphi-Hilfe
Zitat:

Die Komponente führt den in ihrer Eigenschaft CommandText angegebenen Befehl aus. Es kann immer nur ein Befehl aufgerufen werden. Die Parameter des Befehls werden in der Eigenschaft Parameters übergeben. Die eigentliche Ausführung wird von Methode Execute durchgeführt.
Query Analyzer:
- Kann Batch-Skripte ausführen, sprich mehrere Befehle in einem Skript hintereinander!
TADOCommand:
- Immer nur ein Befehl !!

Zitat:

Zitat von sveni2211
Beispiel:

SQL-Code:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_ChangeMasterID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_x_D3000SV_MietEig]
GO

CREATE Procedure sp_ChangeMasterID
Wenn ich das Script im Query Analyzer lade und ausführe, dann funktioniert es. Lade ich es hingegen in die Command- Komponenten und versuche es auszuführen, kommt eine Fehlermeldung, dass der Kontext nicht stimmen würden und er die Operation nicht ausführen kann. Also irgendwie unterscheidet sich das ausführen mit der Delphi- Komponente noch von der mit dem Query Analzer.

Wie im Ausschnitt des SQL-Skripts zu sehen, sind es mindestens 2 Befehle:
Nr. 1:
SQL-Code:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_ChangeMasterID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_x_D3000SV_MietEig]
Nr. 2:
SQL-Code:
CREATE Procedure sp_ChangeMasterID
Das 'GO' wird und kann nur im Query Analyzer verwendet, aus explizierter Befehl zum Ausführen!

Trenne die Befehle und es wird Klappen !

Schauiii..

Holger

sveni2211 4. Jan 2007 16:06

Re: Mit ADOCommand auf SQL2000 eine SP erzeugen?
 
Danke erst einmal. Ich habe da nun eine Funktion hinzugesetzt, die eine Trennung an den GO's macht. Dafür habe ich jetzt ein neues Problem.

Wenn ich das ausführe kommt eine Fehlermeldung, das ein Parameter nicht richtig definiert sei. Mit etwas lesen hab ich nun rausgefunden, das ADOCommand in Parameters die Variablen aus dem Script erwartet. Nur kenne ich die ja vorher. Wenn ich Parametercheck auf False setzte kommt das selbe. Vermutlich erwartet der das von Anfang an. Ich will ja aber die SP nicht ausführen, ich will sie nur erstellen.

Wie kann ich dem ADOCommand mitteilen, das er keine Parameter zu erwarten hat? Oder muss ich das Script vorher durchgehen und die Variablen ermitteln?


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