AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SP - UPSERT: Verständnisfrage zu Param nicht bereitgestellt
Thema durchsuchen
Ansicht
Themen-Optionen

SP - UPSERT: Verständnisfrage zu Param nicht bereitgestellt

Ein Thema von Piro · begonnen am 18. Apr 2011 · letzter Beitrag vom 18. Apr 2011
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

SP - UPSERT: Verständnisfrage zu Param nicht bereitgestellt

  Alt 18. Apr 2011, 09:08
Datenbank: MS SQL 2005 • Version: Express • Zugriff über: ADO
Moin zusammen,

ich habe mir heute die Stored Procedures angesehen, da ich demnächst einen Datenimport von mehr als 1.000.000 Datensätzen vornehmen muss.

Meine Test "UPSERT" Prozedure sieht wie folgt aus.
Delphi-Quellcode:
USE [KECDB_TEST]
GO
/****** Objekt: StoredProcedure [dbo].[sp_upsert] Skriptdatum: 04/18/2011 08:11:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_upsert]

   -- Add the parameters for the stored procedure here
   @snr nvarchar(9),
   @b_ftag nvarchar(4),
   @b_datum nvarchar(8)
AS
SET transaction isolation level SERIALIZABLE
SET NOCOUNT ON
BEGIN TRANSACTION Upsert
   
   update mat_beweg set snr = @snr,
                         b_ftag = @b_ftag,
                         b_datum = @b_datum
               where snr = @snr

   if @@rowcount = 0 and @@error=0
   begin
      insert into mat_beweg (snr, b_ftag, b_datum)
                    values (@snr, @b_ftag, @b_datum)
   end
COMMIT TRANSACTION Upsert
Wenn ich die Prozedure im MS SQL Server Management Studio ausführe, funktioniert alles besten. Wenn ich es die Prozedure im Program aufrufe, siehe Quellcode unten, kam ein Fehler.
Zitat:
Die Prozedur oder Funktion 'sp_upsert' erwartet den '@snr'-Parameter, der nicht bereitgestellt wurde.
Dazu habe ich folgenden Artikel hier im Forum gefunden, der mein Problem erklärt.
http://www.delphipraxis.net/107836-f...tgestellt.html

Mein Program sieht jetzt wie folgt aus und funktioniert.
Delphi-Quellcode:

ConnectToSQLServer; // Funktion zum Aufbau der SQL Verbindung
...
with sp_upsert do
begin
  ProcedureName := 'sp_upsert';
  Prepared;

// ---> 1. Versuch: Resultat: Fehler
// Parameters.ParamByName('snr').Value := '210210210';
// Parameters.ParamByName('b_ftag').Value := '6272';
// Parameters.ParamByName('b_datum').Value := '20110418';

// ---> 2. Versuch: Resultat: Fehler
// Parameters.ParamValues['@snr'] := '210210210';
// Parameters.ParamValues['@b_ftag'] := '6272';
// Parameters.ParamValues['@b_datum'] := '20110418';

// ---> 3. Versuch: alles OK
  for i := 0 to 10000 do
  begin
    Parameters.Clear;
    Parameters.CreateParameter('@snr', ftString, pdInput, 9, IntToStr(i));
    Parameters.CreateParameter('@b_ftag', ftString, pdInput, 4, '6272');
    Parameters.CreateParameter('@b_datum', ftString, pdInput, 8, FormatDateTime('hh:nn:ss', now));
    ExecProc;
  end;
end;
Was ich nicht verstehe, warum muss man die Parameter erstellen? Sie sind doch schon laut sp_upsert Prozedure definiert und man müsst doch ohne weiteres darauf zu greifen können, wie Versuch 1-2 zeigen.
Wäre nett, wenn mir dazu einer eine kleine Erklärung geben könnte. Eventuell ist ja der Quellcode aus dem 3. Versuch nicht wirklich die Lösung und es geht noch besser.

Danke im Voraus.
Sven
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: SP - UPSERT: Verständnisfrage zu Param nicht bereitgestellt

  Alt 18. Apr 2011, 09:54
Versuch es mal so
Delphi-Quellcode:
ConnectToSQLServer; // Funktion zum Aufbau der SQL Verbindung
...
with sp_upsert do
begin
  ProcedureName := 'sp_upsert';

  // Parameter-Liste aktualisieren
  Parameters.Refresh;

  // So wird Prepared :o)
  Prepared := True;

  for i := 0 to 10000 do
  begin
    Parameters.ParamValues['@snr'] := '210210210';
    Parameters.ParamValues['@b_ftag'] := '6272';
    Parameters.ParamValues['@b_datum'] := '20110418';
    ExecProc;
  end;

  //
  Prepared := False;
end;
Ansonsten musst du das halt durch ParseSQL laufen lassen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (18. Apr 2011 um 09:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#3

AW: SP - UPSERT: Verständnisfrage zu Param nicht bereitgestellt

  Alt 18. Apr 2011, 10:15
Vielen Dank. Das hat geklappt.

Schönen Tag noch.
  Mit Zitat antworten Zitat
Antwort Antwort


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