| |
|
|
rquindt | ¡Hola
Yo möchte en uno SQL Datenbank en el übergebenen Datensätzen automáticamente una Kunden-Nr vergeben dejar. Das funktioniert soweit auch por Generator:
Db("fbSQLExec", hdb&, "CREATE TABLE ADRESSEN \ ( KDNR Integer generated by Default as identity (start With 0) primary key Not NULL,\ NAME CHAR(30),\ VORNAME CHAR(30))",1)
Wenn Yo ahora una Datensatz einfüge, möchte Yo gern esta Kunden-Nr zurück transferencia haben, así Yo ellos en un más Schritt nutzen kann. Das se laut Internet por "RETURNING" trabajo
db("fbSQLExec",hdb&,"INSERT INTO ADRESSEN (NAME,VORNAME) \ VALUES ('Mustermann','Max')" + " RETURNING KDNR",1)
Nur bekomme Yo el Ergebnis no en una variable. Zu el ganzen Yo una DELPHI-Code gefunden, bekomme el pero no en XPROFAN adaptado:
with DBank.IBC_Anschrift do begin Close; SQL.Clear; SQL.Add('INSERT INTO anschrift (AUFTRAG, Name_1, Name_2)'); SQL.Add('VALUES (''87777'', ''Schulze'', ''Nummer 2'')'); SQL.Add('RETURNING ID');
ExecSQL; NewID:= DBank.IBC_Anschrift.ParamByName('RET_ID').Value;
ShowMessage(IntToStr(NewID); end;
Kann me como alguien helfen? Vielen Dank en el vorraus. |
|
|
| |
|
|
|
H.Brill | Yo denke veces, du mußt auch una variable angeben, a el el SQL-Befehl el generierten Inhalt el ersten Spalte KDNR hin triggert.
Declariere veces una variable Valor% y probiere lo veces así :
db("fbSQLExec",hdb&,"INSERT INTO ADRESSEN (NAME,VORNAME) \
VALUES ('Mustermann','Max')" + " RETURNING KDNR INTO :Valor%",1)
Stichpunkt : eingebettete Variables con Doppelpunkt.
In Valor% müßte entonces el Inhalt posición. Auch tal vez veces a la String (wert$) probieren.
So Yo el veces Internet gelesen. Will me aber ahora no wegen dieser una Sache una extra DB bauen.
Probiere lo sólo simplemente veces |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 03.04.2018 ▲ |
|
|
|
|
Michael W. | Meines Wissens geben el db(SQLExec/fbSQLExec/slSQLExec sólo el número el verarbeiteten Datensätze zurück.
Auf el FireBird-Página fehlt en RETURNING el ESQL-Kennung. Also hay en el eingebetteten Versión "fbembedded" el RETURNING auch no. siehe: [...] y: [...]
Also una Función bauen, el el Adresse aufnimmt y el Kundennummer zurück son.
Proc neue_Adresse
Parámetros pName$, pVorname$
Declarar hGrid&
hGrid& = Crear("Grid",3,0)
db("fbSQLExec", hdb&, "INSERT INTO ADRESSEN ( Name,Vorname ) VALUES ( :pName$, :pVorname$ )", 1)
db("fbSQLExec", hdb&, "SELECT KdNr,Name,Vorname FROM ADRESSEN WHERE (Name = ':pName$') AND (Vorname = ':pVorname$')", hGrid&)
' El Werte puede entonces todos kontrolliert werden; benötigt se sólo el erste
' Im Grid landen no Überschriften, el Base es also Línea 0 y Spalte 0
Volver Val( GetText $(hGrid&, 0,0) )
ENDPROC
KdNr& = neue_Adresse( "Mustermann", "Max" )
Das bedeutet zwar zwei SQL-Befehle en el Datenbank loszulassen, aber dadurch dejar el Werte auch igual kontrollieren.
Ein weiterer Vorteil el Función: Meistens braucht uno para Kundennummern cierto Nummernkreise y Bereiche, el dafür nötige Bearbeitung puede ser hay con aufnehmen.
Das puede ser se entonces para Produkt-, Rechnungs- y otro Nummern abschauen y así kapseln. |
|
|
| System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 04.04.2018 ▲ |
|
|
|
|
rquindt | Gracias para el Tips. Como lo häufig veces gleiche Namen y Vornamen oder sonstige Kombinationen son, habe todos veces con nem Generator umgebaut.
Db("fbSQLExec",hdb&,"CREATE GENERATOR KDNR",1) '----- Generator para Daten-Satz Nr se producido ------- Db("fbSQLExec",hdb&,"SET GENERATOR KDNR TO 0",1) '----- KDNR = Daten-Satz-Nr, Valor startet con 0 ------
KdNr& = Datei_SatzNr( hdb& ) ' Nächste SatzNr ermitteln
db("fbSQLExec",hdb&,"INSERT INTO ADRESSEN (KDNR,NAME,VORNAME) \ VALUES (:KdNr&,'Mustermann','Max')",1)
End
'-------------------------------------------------------------------------------- Proc Datei_SatzNr
Parámetros hdb1& Declarar hGrid&
hGrid& = Crear("Grid",3,0)
Db("fbSQLExec",hdb1&,"select gen_id(KDNR,1) from RDB$DATABASE",hGrid&)
Volver Val( GetText$(hGrid&, 0,0) )
' Im Grid landen no Überschriften, el Base es also Línea 0 y Spalte 0
ENDPROC |
|
|
| |
|
|
|
Michael W. | Sí, no bastante.
hGrid& = Crear("Grid",3,0)' <-- producido una Grid con 3 Spalten
' hier se de SELECT aber sólo 1 Valor generiert... (en el Ejemplo waren lo KdNr,Name,Vorname)
Db("fbSQLExec",hdb1&,"select gen_id(KDNR,1) from RDB$DATABASE",hGrid&)
Volver Val( GetText $(hGrid&, 0,0) )
Außerdem se en el meisten SELECT el gesamte Datenbank durchlaufen, lo sei porque uno grenzt el Búsqueda con uno WHERE-Klausel una. Das gen_id() podría aber solch una Begrenzung en una Línea beinhalten. |
|
|
| |
|
|