![]() |
Re: Mehr Benutzer Primary Key Insert in Tabelle
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 |
Re: Mehr Benutzer Primary Key Insert in Tabelle
Zitat:
|
Re: Mehr Benutzer Primary Key Insert in Tabelle
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...
|
Re: Mehr Benutzer Primary Key Insert in Tabelle
Wie gesagt, ich kann kein
SQL-Code:
benutzen, da hier das Ergebnis im Parameter zurückkommt und der mit mStoredProcedure nicht gefüllt wird.
exec generator_id 'meinetabelle'
Gruß |
Re: Mehr Benutzer Primary Key Insert in Tabelle
Dann mach doch einen select auf die SP
|
Re: Mehr Benutzer Primary Key Insert in Tabelle
Versuch doch mal so ein script:
SQL-Code:
Declare @r int
exec MyProcedure @r output select @r as Ergebnis |
Re: Mehr Benutzer Primary Key Insert in Tabelle
@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:
SQL-Code:
Ergebnis: Ungültiger Objektname 'generator_id'.
select * from generator_id('meinetabelle')
SQL-Code:
Ergebnis: Falsche Syntax in der Nähe von 'meinetabelle'
select * from generator_id 'meinetabelle'
Gruß |
Re: Mehr Benutzer Primary Key Insert in Tabelle
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 |
Re: Mehr Benutzer Primary Key Insert in Tabelle
@alzhaimar
Ups, sorry. Irgendwie dachte ich er benutzt Firebird... :gruebel: btw: Kannst du keine Warnungen schreiben bevor du TSQL Sourcen zeigst? Ich habe gerade gegessen, da kommt das nicht so gut! :shock: |
Re: Mehr Benutzer Primary Key Insert in Tabelle
@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:
Das Ergebnis war der Fehler: 24000:[Microsoft][ODBC Cursor Library] Ungültiger Cursorstatus
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; Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 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 by Thomas Breitkreuz