Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi INSERT INTO sonst UPDATE! (https://www.delphipraxis.net/44175-insert-into-sonst-update.html)

Peeters 15. Apr 2005 17:34

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.

Hansa 15. Apr 2005 17:50

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.

Peeters 15. Apr 2005 17:54

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?

Hansa 15. Apr 2005 18:27

Re: INSERT INTO sonst UPDATE!
 
Zitat:

Zitat von Peeters
..ich Sie dort rein ohne Hilfsmittel wie SQL Query Analyzer?

Sage doch der Datenbank, daß der Editor sie heute noch kurz vorbei bringt. :lol:

Robert_G 15. Apr 2005 18:39

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. ;)

jensw_2000 15. Apr 2005 19:19

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:
  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
Den SQL Code kannst du bequem über TAdoCommand an den MSSQL schicken.
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:

Peeters 18. Apr 2005 17:47

Re: INSERT INTO sonst UPDATE!
 
Delphi-Quellcode:
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
Habe mal diese kleine SP geschrieben. Frage dazu, warum gibt er mir keine Datensätze raus? Bei beiden Varianten gibt es min. einen Datensatz.

P.S.: Welches Buch könnt Ihr empfehlen in bezug auf Delphi, ADO und MS-SQL?

jensw_2000 18. Apr 2005 19:51

Re: INSERT INTO sonst UPDATE!
 
Hast du deine SP schon mal in einem SQL Editor (Query Analyzer, OSQL o.Ä) ausprobiert ?
SQL-Code:
  EXEC SP_IMPORT_FORM @FormNr= '1234'
  GO
Kommen dann die gewünschten Daten ?

- 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:

Peeters 18. Apr 2005 22:13

Re: INSERT INTO sonst UPDATE!
 
Ich habe das mit einen DBGrid an Datasource und das an ADOSP gehangen. Mit

Delphi-Quellcode:
CREATE PROCEDURE SP_IMPORT_FORM
AS
SELECT * FROM MPK_FORM
GO
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.

jensw_2000 18. Apr 2005 22:55

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.
Seite 2 von 3     12 3      

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