![]() |
Re: INSERT INTO sonst UPDATE!
Nein, so meinte ich das nicht. Der Anwender soll gerade nicht die SP erstellen. Ich möchte in Delphi eine SP programmieren und diese dann an den Server übermitteln. Das Thema SP ist für mich noch neu, ich muss mich also noch zurecht finden bzw. anhand von Beispielen diese ausarbeiten.
|
Re: INSERT INTO sonst UPDATE!
War zu erwarten. 8) Aber ich sage dir gleich : die SP liegt in der Datenbank und nicht in Delphi :!: Also mußt du dich entscheiden, ob du nun einen Nagel mit einem Schraubenzieher (Delphi) in die Wand haust oder mit dem geeigneten Werkzeug.
|
Re: INSERT INTO sonst UPDATE!
Das die SP in der Datenbank liegt ist klar. Nur wie bekomme ich Sie dort rein ohne Hilfsmittel wie SQL Query Analyzer?
|
Re: INSERT INTO sonst UPDATE!
Zitat:
|
Re: INSERT INTO sonst UPDATE!
Hihi, ob ich es noch erlebe, dass jemand Hansas Beiträge versteht? :lol:
@Peeters Was dir Hansa auf seine so direkte und unglaublich unmissverständliche Art ( :mrgreen: ) sagen will, ist, dass du die Prozedur mit einer IDE für deine DB entwickeln solltest. Wenn sie passt kannst du den Code imme noch dynamisch per Delphi absetzen. ;) |
Re: INSERT INTO sonst UPDATE!
Wenn du den Code zum Erstellen der Stored Procedure aus Delphi absetzt, dann solltest du vorder prüfen ob diese eventuell schon in der DB existiert.
Das geht so ...
SQL-Code:
Den SQL Code kannst du bequem über TAdoCommand an den MSSQL schicken.
IF EXISTS (SELECT Name FROM SysObjects
WHERE Name = 'Meine_SP' AND TYPE = 'P') -- P = Stored Procedure ... BEGIN ALTER PROCEDURE ... -- Procedure in DB aktualisieren END ELSE BEGIN CREATE PROCEDURE ... -- Procedure in DB erstellen END Zu beachten ist jedoch, das der User, der diesen Code aus deinem Programm an den SQL-Server sendet, das Recht zum Erstellen, Ändern und Löschen von Datenbankobjekten hat. Jeder darf das nicht ... [Zusatz] Hier noch eine komplette Liste der TYPE Kennungen in SYSOBJECTTS ... Falls mal jemand einen anderen Objekttyp suchen möchte ... Objekttyp. Kann einer der folgenden Objekttypen sein: C = CHECK-Einschränkung D = Standard- oder DEFAULT-Einschränkung F = FOREIGN KEY-Einschränkung L = Protokoll FN = Skalarfunktion IF = Inlinetabellenfunktion P = Gespeicherte Prozedur PK = PRIMARY KEY-Einschränkung (Typ ist K) RF = Gespeicherte Replikationsfilterprozedur S = Systemtabelle TF = Tabellenfunktion TR = Trigger U = Benutzertabelle UQ = UNIQUE-Einschränkung (Typ ist K) V = Sicht X = Erweiterte gespeicherte Prozedur [/Zusatz] :hi: |
Re: INSERT INTO sonst UPDATE!
Delphi-Quellcode:
Habe mal diese kleine SP geschrieben. Frage dazu, warum gibt er mir keine Datensätze raus? Bei beiden Varianten gibt es min. einen Datensatz.
CREATE PROCEDURE SP_IMPORT_FORM
@FormNr VARCHAR(5) = NULL AS IF @FormNr < 10000 BEGIN SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr END ELSE BEGIN SELECT * FROM MPK_PREIS WHERE FORMNR = @FormNr END GO P.S.: Welches Buch könnt Ihr empfehlen in bezug auf Delphi, ADO und MS-SQL? |
Re: INSERT INTO sonst UPDATE!
Hast du deine SP schon mal in einem SQL Editor (Query Analyzer, OSQL o.Ä) ausprobiert ?
SQL-Code:
Kommen dann die gewünschten Daten ?
EXEC SP_IMPORT_FORM @FormNr= '1234'
GO - Wenn ja, nehme ich an, das du dich an meinem obigen Beispiel origentiert hast, um die SP aus Delphi heraus auszuführen ... Im Unterschied zu INSERT oder UPDATE soll die SP jetzt ja Datensätze zurückliefert. Dann musst du anstatt ExecProc "Open" und "Close" verwenden wie bei jedem anderen Dataset, von dem Du eine Result-Datenmenge erwartest, auch ... - Wenn nicht dann teste mal die beiden Select's per Hand aus und schau mal wo es klemmt ... Wirklich gute Bücher habe ich auch noch nicht gefunden. Entweder sind sie zu oberflächlich oder es sind reine Syntax Referenzen. Kapitel wie Optimierung, Troubleshooting usw fehlen oft ganz ... Beim MSSQL kannst du im MSDN recht gute Erklärungen finden oder im Entwicklerforum oder hier in der DP :hi: |
Re: INSERT INTO sonst UPDATE!
Ich habe das mit einen DBGrid an Datasource und das an ADOSP gehangen. Mit
Delphi-Quellcode:
hat er eine Ergebnissmenge angezeigt. Nur jetzt mit der "IF" Variante kommt nichts mehr raus. Am Grid erkenne ich das er wenigstens die Feldnamen ausgelesen hat.
CREATE PROCEDURE SP_IMPORT_FORM
AS SELECT * FROM MPK_FORM GO |
Re: INSERT INTO sonst UPDATE!
Könnte ein Problem bei der Parameterübergabe sein.
Wann und wie füllst du @FormNr mit einen Wert ? Versuch es mal so ...
Delphi-Quellcode:
Procedure TForm1.button1Click(Sender:TObject);
begin ADOSP.Close; ADOSP.Procedurename='SP_IMPORT_FORM '; ADOSP.Parameters.refresh; ADOSP.Parameters[1].value:='EIN_GÜLTEGER_WERT_FÜR_@FORMNR'; ADOSP.Open; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 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-2025 by Thomas Breitkreuz