Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird / UniDac - Insert über Query? (https://www.delphipraxis.net/147488-firebird-unidac-insert-ueber-query.html)

daywalker9 5. Apr 2010 17:41

Re: Firebird / UniDac - Insert über Query?
 
Oder frag auf 0 ab.
SQL-Code:
New."ID" = 0
Edit: ich meine frage neben NULL auch 0 ab.

mkinzler 5. Apr 2010 17:49

Re: Firebird / UniDac - Insert über Query?
 
Dann muss es aber auch 0 sein

norwegen60 5. Apr 2010 20:07

Re: Firebird / UniDac - Insert über Query?
 
Schön, dass an Ostern auch noch jemand schafft

Leider haben mir die Tips nicht weiter geholfen ich habe beides probiert:
SQL-Code:
BEGIN
  NEW."ID" = GEN_ID("GEN_DIAS_ID",1);
END
und
SQL-Code:
BEGIN
  IF ((NEW."ID" IS NULL) or (NEW."ID" = 0)) THEN NEW."ID" = GEN_ID("GEN_DIAS_ID",1);
END
und beide male blieb es bei der Meldung "Feld 'ID' muss einen Wert haben". Mir ist noch nicht ganz klar, wie dem Feld ID der neu generierte Wert zugewiesen wird, bzw. wie meine UniQuerry den Wert bekommt und bei Post auch mit abspeichern kann. Denn so einfach wie bei Paradox und MsSQL scheint es nicht zu funktionieren.

mkinzler 5. Apr 2010 20:09

Re: Firebird / UniDac - Insert über Query?
 
SQL-Code:
BEGIN
  NEW.ID = GEN_ID('GEN_DIAS_ID',1);
END

norwegen60 5. Apr 2010 20:19

Re: Firebird / UniDac - Insert über Query?
 
Nein, leider nicht. FlameRobin verwendet ". Bei ' gibts ne Fehlermeldung. Und wenn ich direkt in FlameERobin einen neuen Satz anlege, bekomme ich ja auch eine neue ID. Nur aus Delphi raus funktioniert es nicht. Irgendwie bekommt die UniQuerry die neue ID nicht mit. Am liebsten wäre es mir sowieso, ich könnte diese auch gleich in einem Edit- oder Label-Feld anzeigen

mkinzler 5. Apr 2010 20:24

Re: Firebird / UniDac - Insert über Query?
 
Wie sind die Felder deklariert ( case sensitiv)?
Wie rufst du den Insert auf?
Zitat:

Am liebsten wäre es mir sowieso, ich könnte diese auch gleich in einem Edit- oder Label-Feld anzeigen
Du könntest den Wert auch in einem Select vorher holen
SQL-Code:
select GEN_ID( ...
oder die Funktionlität der Komponente verwenden
Den Wert kanst du dir durch das returning zurückgeben lassen:
SQL-Code:
insert .... into ... returning id;

norwegen60 5. Apr 2010 20:53

Re: Firebird / UniDac - Insert über Query?
 
Wenn ich einen neuen Satz anlegen will rufe ich
Delphi-Quellcode:
UniQuery.Insert
auf.
Die Werte selber werden direkt in dbEdit-Feldern mit Werten gefüllt.
Zum sichern rufe ich
Delphi-Quellcode:
UniQuery.post
auf.
Die UniQuerry selber ist mit dem SQL
SQL-Code:
select * from dias order by nr
definiert.
In der DB selber habe ich keine Casesensitivtät deklariert sondern ich arbeite bei der Abfrage mit upper....

Den SQL-Aufbau
SQL-Code:
SELECT gen_ID(Gen_Dias_ID,0) FROM DIAS
habe ich ja noch gefunden, aber wie stehts hier mit der Kompatibilität zu MsSQL? Ist das mit Firebird "für einen Anfänger" wirklich so kompliziert? Habe ich eventuell in UniQuery vergessen irgendeinen Parameter zu setzen? Die verwende ich nämlich auch zum ersten mal.

Als ich durch die diversen Foren bin musste ich feststellen dass einige das Problem mit der Meldung "Feld ID muss einen Wert haben" aber leider fand ich nirgends eine Lösung.

mkinzler 5. Apr 2010 21:06

Re: Firebird / UniDac - Insert über Query?
 
Wie sieht Query.InsertSQL aus?
Zitat:

In der DB selber habe ich keine Casesensitivtät deklariert sondern ich arbeite bei der Abfrage mit upper....
Wenn du die Feldnamen aber mit "" angibst wird es casesensitiv (Wenn bei der Anlage angegeben für immer: id ist dann was anderes als Id oder ID)
Mit
SQL-Code:
select GEN_ID( GEN_DIAS_ID,1) from RDB$DATABASE;
kanst du den nächsten Wert holen, dieser ist dann reserviert (GEN_ID ist eine Semaphorenfunktion)
Du kannst natürlich auch die Funktionalität der Komponente verwenden
Zitat:

Wie muss ich das ganze gestalten, dass ich den Code für alle Tabellen einer DB verwenden kann ohne mich jedes mal aufs neue damit auseinanderzusetzen.
Für alle Tabellen den gleichen Generator(Sequenz) verwenden
Zitat:

Ist das mit Firebird "für einen Anfänger" wirklich so kompliziert?
Eigentlich nicht
Zitat:

Habe ich eventuell in UniQuery vergessen irgendeinen Parameter zu setzen?
Ich vermute eher es liegt an der Groß-/Kleinunterscheisung

norwegen60 5. Apr 2010 21:57

Re: Firebird / UniDac - Insert über Query?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Markus,

wenn das eigentlich nicht so kompliziert ist, komme ich irgendwie nicht weiter. Ich habe jetzt eine ganz einfache Anwendung mit D2010 und UniDac erstellt die auf die Firebird-Beispiel-DB Employees zugreift. Da habe ich genau das Problem, das ich auch bei meiner DB habe. Ich habe das Beispiel im Anhang als ZIP. Wäre es möglich, dass du dir das mal anschaust.

Gibt es eigentlich auch eine Möglichkeit, UniConnection vom Ablagepfad der DB unabhängig zu machen, im Grunde so wie mit den Alias bei Paradox?

Vielen Dank
Gerd

mkinzler 5. Apr 2010 22:00

Re: Firebird / UniDac - Insert über Query?
 
Es fehlt das .InsertSQL


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.
Seite 2 von 3     12 3      

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-2025 by Thomas Breitkreuz