AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi INSERT INTO sonst UPDATE!
Thema durchsuchen
Ansicht
Themen-Optionen

INSERT INTO sonst UPDATE!

Ein Thema von Peeters · begonnen am 14. Apr 2005 · letzter Beitrag vom 20. Okt 2005
Antwort Antwort
Seite 3 von 3     123   
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#21

Re: INSERT INTO sonst UPDATE!

  Alt 19. Apr 2005, 19:28
Ich habe direkt in den Eigenschaften einen Wert eingetragen um das Verhalten erst einmal zu testen. Ich habe das auch mit einer einfachen SELECT Anweisung ausprobiert, und es kam zu einen Ergebnis.

Delphi-Quellcode:
CREATE PROCEDURE SP_IMPORT_FORM
@FormNr VARCHAR(5) = NULL
AS
SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr
GO
Peeters
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#22

Re: INSERT INTO sonst UPDATE!

  Alt 19. Apr 2005, 22:09
Hm...

ausser das du bei deinem bedingten SELECT den Datentyp (INT) verwendest, aber @FormNr als VARCHAR deklarierst finde ich keine Fehler ...

SQL-Code:
@FormNr VARCHAR(5) = NULL -- hier sollte INT = NULL stehen
AS
IF @FormNr < 10000 -- wenn du hier den Parameter gegen eine Integer vergleichst

Der MSSQL ist zwar meistens kulant bei unterschiedlichen Datentypen (insofern die Daten richtig interpretiert werden können), aber es ist der letzte offensichtliche Fehler ...
Probier doch mal deinen Parameter in der SP anzupassen ...


  @FormNr INT = NULL Nachdem du die SP gespeichert hast, musst du deine ADOSP im Delphi disconnecten, neu connecten und die Parameter neu auslesen sonst bekommt ADO nicht mit, das sich die Parameterdeklaration geändert hat ...

  Mit Zitat antworten Zitat
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#23

Re: INSERT INTO sonst UPDATE!

  Alt 20. Apr 2005, 16:41
Ich habs, ich depp, habe nicht daran gedacht das @FormNr VARCHAR ist. Jetzt geht es.
Delphi-Quellcode:
CREATE PROCEDURE SP_IMPORT_FORM
@FormNr VARCHAR(5) = NULL
AS
IF @FormNr = '00475'
BEGIN
SELECT * FROM MPK_FORM WHERE FORMNR = @FormNr
END
ELSE
BEGIN
SELECT * FROM MPK_PREIS WHERE FORMNR = QFormNr
END
GO
Langsam steige ich dahinter. Mal schauen wie es weiter geht.
Peeters
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#24

Re: INSERT INTO sonst UPDATE!

  Alt 18. Okt 2005, 23:24
Hallo, liebe DPler.

Bin grad über die Suche auf den thread hier gestoßen, und da mein Problem ein ähnliches ist und ich (mal wieder) etwas festhänge, dachte ich, ich poste mal:

Ich greife auf eine Interbase DB zu, in der ich folgende stored procedure habe:

SQL-Code:
begin
  select count(*)
    from mcsc_parameter
    where upper(parameter_id) = upper(:pi_parameter_id)
    into par_found;
  if (par_found = 0) then
    insert into mcsc_parameter
      values (:pi_parameter_id, :pi_parameter_value);
  else
    update mcsc_parameter
      set parameter_value = :pi_parameter_value
      where parameter_id = :pi_parameter_id;
  po_ret_val = par_found;
  suspend;
end
Die beiden I_ Variablen sind meine Input-Parameter, O_ entsprechend der Output-Parameter. par_found ist eine integer-Variable der Procedure. Das ganze hab ich im IB-Expert schon getestet und es scheint auch soweit korrekt zu laufen.
Diese Procedure rufe ich in Delphi in einer Funktion wie folgt auf:

Delphi-Quellcode:
  function TDataModule2.MCSC_Put_Param_Value(par_id, par_val: string): String;
  var par_ind: integer;
  begin;
    if par_id = 'then par_id := 'DUMMY';
    par_id := Uppercase(par_id);
    self.MCSC_StoredProc_IB_1.StoredProcName := 'MCSC_PUT_PARAMETER';
    par_ind := self.MCSC_StoredProc_IB_1.ParamByName('PI_PARAMETER_ID').Index;
    self.MCSC_StoredProc_IB_1.Params[par_ind].Value := par_id;
    par_ind := self.MCSC_StoredProc_IB_1.ParamByName('PI_PARAMETER_VALUE').Index;
    self.MCSC_StoredProc_IB_1.Params[par_ind].Value := par_val;
    self.MCSC_StoredProc_IB_1.ExecProc;
    par_val := self.MCSC_StoredProc_IB_1.Params.ParamValues['PO_RET_VAL'];
    Result := par_val;
  end;
Rufe ich jetzt (z.B. in einem Button-Pressed Event) diese Funktion mit zwei Parametern auf und laß mir das Ergebnis ausgeben, so erhalte ich erwartungsgemäß das Ergebnis der stored Proc, nämlich die Anzahl der vorhandenen Parameter in der Tabelle, die dem ersten Parameter entsprechen (im Normalfall 0 oder 1). Schaue ich jedoch dann in die DB, wurde weder Update noch Insert ausgeführt (was im IB Expert aber funktioniert hat). Commit kann ich aus der Procedure nicht aufrufen und das Commit der default transaction ändert auch nichts... irgendeine Idee, woran das liegen kann?

mfg

Ty
God is integer - until declared real...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#25

Re: INSERT INTO sonst UPDATE!

  Alt 19. Okt 2005, 00:11
wie wärs hiermit ?
into :par_found;
Gruß
Hansa
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#26

Re: INSERT INTO sonst UPDATE!

  Alt 19. Okt 2005, 21:43
Aber was ändert da das :par_found? Wie gesagt: der Rückgabewert scheint ja korrekt zu sein, aber es wird halt nichts committed, wenn ich die proc aus delphi heraus ausführe...
God is integer - until declared real...
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#27

Re: INSERT INTO sonst UPDATE!

  Alt 20. Okt 2005, 06:42
Woran kann es denn nun liegen, daß nicht commited wird??? Wie gesagt: im IB-Expert funzt die stored procedure! Nur beim Aufruf über Delphi nicht! ( Muß man explizit ein Commit absetzen? Wenn ja, welches? Das Commit der Standard Transaktion hat nichts bewirkt... ich kapiers einfach nich!
God is integer - until declared real...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#28

Re: INSERT INTO sonst UPDATE!

  Alt 20. Okt 2005, 07:40
Nicht, dass ich deinen Code ausprobiert hätte - oder gar meinen - aber müsste er nicht so aussehen?

SQL-Code:
begin
  select count(*)
    from mcsc_parameter
    where upper(parameter_id) = upper(:pi_parameter_id)
    into :po_ret_val;
  if (po_ret_val = 0) then
    insert into mcsc_parameter
      values (:pi_parameter_id, :pi_parameter_value);
  else
    update mcsc_parameter
      set parameter_value = :pi_parameter_value
      where parameter_id = :pi_parameter_id;
  suspend;
end
Grüße vom marabu
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#29

Re: INSERT INTO sonst UPDATE!

  Alt 20. Okt 2005, 08:04
Hm... klingt plausibel - werd ich nachher mal ausprobieren. Aber hat das was mit dem Commit bzw. dem Fehlen des selbigen zu tun?
Beispiel: in meiner DB hab einen Parameter dummy mit dem Wert test. Führe ich im IB Expert die Procedure mit den Parametern dummy und test5 aus, steht hinterher in der DB dummy und test5. Starte ich das ganze aus Delphi und schaue danach per IB Expert in die DB steht da immernoch dummy und test
God is integer - until declared real...
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#30

Re: INSERT INTO sonst UPDATE!

  Alt 20. Okt 2005, 16:29
AAAARGHS: So etwas triviales! Das ganze hätte schon wesentlich früher richtig gefunzt, wenn ich nicht

 where parameter_id = :pi_parameter_id; sondern

 where upper(parameter_id) = upper(:pi_parameter_id); geschrieben hätte... im IBExpert hatte ich wohl zufällig die ID groß eingegeben...

thx trotzdem für alle Tips! Hab auch das Into entsprechend angepaßt...
God is integer - until declared real...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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