AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Mehr Benutzer Primary Key Insert in Tabelle
Thema durchsuchen
Ansicht
Themen-Optionen

Mehr Benutzer Primary Key Insert in Tabelle

Ein Thema von etom291272 · begonnen am 15. Feb 2005 · letzter Beitrag vom 1. Nov 2007
Antwort Antwort
Seite 2 von 3     12 3      
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 10:28
Du kannst mit Hilfe von Rdb$Database Pseudo-Selects ausführen.
Also Selects, die immer eine Zeile liefern:
SQL-Code:
SELECT Gen_ID(DeinGenerator, 1)
FROM Rdb$Database
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 11:17
Zitat von Elvis:
Du kannst mit Hilfe von Rdb$Database Pseudo-Selects ausführen.
Also Selects, die immer eine Zeile liefern:
SQL-Code:
SELECT Gen_ID(DeinGenerator, 1)
FROM Rdb$Database
Sieht aber sehr nach Firebird aus, er verwendet aber MSSQL.
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 11:34
Wir verwenden auch Generatoren in MSSQL, also die von shmia propagierte Lösung. Wichtig ist nur der Transaktionslevel, der garantiert, das wirklich nie zwei Prozesse den gleichen Wert bekommen...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Brainshock

Registriert seit: 26. Nov 2004
Ort: 37345
214 Beiträge
 
Delphi 7 Professional
 
#14

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 12:20
Wie gesagt, ich kann kein exec generator_id 'meinetabelle' benutzen, da hier das Ergebnis im Parameter zurückkommt und der mit mStoredProcedure nicht gefüllt wird.

Gruß
Matthias
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 12:29
Dann mach doch einen select auf die SP
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 12:39
Versuch doch mal so ein script:
SQL-Code:
Declare @r int
exec MyProcedure @r output
select @r as Ergebnis
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Brainshock

Registriert seit: 26. Nov 2004
Ort: 37345
214 Beiträge
 
Delphi 7 Professional
 
#17

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 13:53
@alzaimar: Wie soll ich das Skript ausführen, über eine Query?

@mkinzler: Ein Select auf die SP haut nicht hin bzw. ich weiß nicht genau wie dieses aussehen muß. Hab folgendes probiert:
select * from generator_id('meinetabelle') Ergebnis: Ungültiger Objektname 'generator_id'.

select * from generator_id 'meinetabelle' Ergebnis: Falsche Syntax in der Nähe von 'meinetabelle'

Gruß
Matthias
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 14:05
Yup über eine TQuery oder ein TDataset. Die BDE unterstützt leider keine Skripte, aber ADO...

Ich würde vielleicht auch einfach die StoredProcedure so umschreiben, das sie genau eine Tabelle liefert (eine Zeile, eine Spalte). Dann geht's auf jeden Fall mit einer TQuery, auch unter der BDE.

SQL-Code:
Create procedure generator_id ( @IdGenerator varchar(20))
as
begin
      declare @ID integer

      SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
      BEGIN TRANSACTION SP_GEN_ID

      select @ID = CurrentValue from Generators where IdGenerator =@IdGenerator
      IF @@ERROR <> 0 GOTO LBL_ERROR
      update Generators set CurrentValue =CurrentValue + 1 where IdGenerator=@IdGenerator
      IF @@ERROR <> 0 GOTO LBL_ERROR

      COMMIT TRANSACTION SP_GEN_ID
      select @ID as NewID -- Statt return @ID
      return (0) -- fehlte sowieso

LBL_ERROR:
      ROLLBACK TRANSACTION SP_GEN_ID
      select 0 as NewID -- Statt return 0
      return (1)
end
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#19

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 14:12
@alzhaimar
Ups, sorry. Irgendwie dachte ich er benutzt Firebird...

btw: Kannst du keine Warnungen schreiben bevor du TSQL Sourcen zeigst? Ich habe gerade gegessen, da kommt das nicht so gut!
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Brainshock

Registriert seit: 26. Nov 2004
Ort: 37345
214 Beiträge
 
Delphi 7 Professional
 
#20

Re: Mehr Benutzer Primary Key Insert in Tabelle

  Alt 29. Okt 2007, 15:13
@alzaimar: Danke für das umschreiben, habs noch nicht so mit den Funktionen in T-SQL.

Die Funktion aus #18 hab ich erstmal übernommen und sie funktioniert wie gewünscht im SQL Management Studio.
Die Frage ist nur wie das Ganze über die Query funktionieren soll. Mein Test war der:

Delphi-Quellcode:
procedure TMainForm.test1Click(Sender: TObject);
var
  TmpQuery: TmQuery;
begin
  TmpQuery:= DatabaseModule.GetTemporaryQuery;
  try
    TmpQuery.SQL.Text('exec generator_id ''meinetabelle''');
    TmpQuery.Open;
    ShowMessage(TmpQuery.FieldByName('NewID').AsString);
  finally
    TmpQuery.Free;
  end;
end;
Das Ergebnis war der Fehler: 24000:[Microsoft][ODBC Cursor Library] Ungültiger Cursorstatus

Gruß
Matthias
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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