Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeos - Insert-Problem (https://www.delphipraxis.net/74527-zeos-insert-problem.html)

trashcandesign 4. Aug 2006 15:23

Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOS

Zeos - Insert-Problem
 
Moin,

ganz kurz:


Ich habe eine DB, darin eine Tabelle mit 2 Feldern: ID und Text

ID ist PK und ein AutoInc-Feld.

Eingebunden habe ich die DB mit den Zeos-Komponenten.

Will ich jetzt einen neuen Datensatz einfügen bekomme ich eine Fehlermeldung, dass das Feld ID einen Wert haben muss.
Muss ich bei den Zeos-Kompos was bestimmtes einstellen, dass das Feld als AutoInc akzeptiert wird?

Das Feld hat den DataType ftAutoInc.


Danke für eure Hilfe *g*


Gruß
trashcandesign

mkinzler 4. Aug 2006 15:46

Re: Zeos - Insert-Problem
 
In IB/FB mußt du ein Generator/eine Sequenz erzeugen, welche für den "autoinc" sorgt. Entweder über TSequence oder DB-Trigger.

trashcandesign 4. Aug 2006 16:27

Re: Zeos - Insert-Problem
 
ich habe in meiner DB einen Trigger für die Tabelle erzeugt, mit den MDO-Komponenten hab ich den Insert auch ohne probleme geschafft. Ich habe aber jetzt auf die Zeos-Kompos umgestellt und da will er plötzlich einen Wert für das Feld.

Kann ich den Trigger da irgendwo noch angeben? Wird der nicht automatisch aufgerufen, wie bisher auch?

mkinzler 4. Aug 2006 18:40

Re: Zeos - Insert-Problem
 
Zitat:

Kann ich den Trigger da irgendwo noch angeben? Wird der nicht automatisch aufgerufen, wie bisher auch?
Ob der Trigger aufgerufen wird liegt nicht in der Hand der Komponente.
Zeig mal den Query.

trashcandesign 7. Aug 2006 07:22

Re: Zeos - Insert-Problem
 
Na in diesem Fall:

TZQuery
-SQL
SQL-Code:
SELECT ID, Text FROM Tabelle WHERE ID = :ID
-Params: Keine Parameter eingestellt
-UpdateObject = dbUpdate


dbUpdate: TZUpdateSQL
-DeleteSQL
SQL-Code:
DELETE FROM Tabelle WHERE ID = :OLD_ID
-InsertSQL
SQL-Code:
INSERT INTO Tabelle (Text) VALUES (:Text)
-ModifySQL
SQL-Code:
UPDATE Tabelle SET ID= :ID, Text=:Text WHERE ID = :OLD_ID
-ParamData
Delphi-Quellcode:
item
  DataType = ftAutoInc
  Name = 'ID'
  ParamType = ptInputOutput
end
item
  DataType = ftUnknown
  Name = 'Text'
  ParamType = ptUnknown
end

Ich kenn mich ja in Zeos nicht aus und weiß deshalb nich, ob ich vllt. irgendwo einen EIntrag vergessen hab?!

Domo Sokrat 7. Aug 2006 10:41

Re: Zeos - Insert-Problem
 
Hi Ihr beiden,

in der "neuen" Version von ZEOS (also ab der 6.5.1 alpha CVS as of 13/10/2005) gibt es die Komponente "TZSequence" (Danke Stevie!), über die man (momentan nur(!) für Firebird realisiert) einen Generator einbinden und nutzen kann, so wie es hier diskutiert wird.

Ich habe die Sache mal kurz anhand der CARGO-Beispieltabelle von ZEOS auf meinem FB 1.5 nachgespielt und das Feld C_ID (INTEGER und PK-Feld) als Ziel der generierten Sequenznummer angegeben und es funzt ohne Probleme.

Die Vorgehensweise ist hierbei folgende:

TZSequence einfügen und Connection zuweisen. Die Property "SequenceName" muss den Namen des Generators haben, der angesprochen werden soll (z. B. IDGEN). Die BlockSize der TZSequence gibt die Schrittweite bei der Generierung der Nummern an (default: 1). Somit ist schon mal der Generator eingerichtet.

Btw: die Liste der Generatoren kann über
SQL-Code:
SELECT rdb$generator_name FROM rdb$generators
ermittelt werden.

In meinem Beispiel habe ich ein simples TZQuery genutzt und das Resultset mit einem "SELECT * FROM cargo" ermittelt. Die Verknüpfung zwischen Generator und Zielattribut der Cargo-Tabelle wird nun über die Property 1) "Sequence" und 2) "SequenceField" des TZQuery hergestellt. Hier wird 1) das ZSequence-Objekt ausgewählt (z. B. ZSequence1) und 2) das Tabellenattribut gewählt, welches die generierte ID empfangen soll (z. B. C_ID).

Hoffentlich hilft's.

Grüße!

sancho1980 7. Aug 2006 15:06

Re: Zeos - Insert-Problem
 
Zitat:

Zitat von trashcandesign
Muss ich bei den Zeos-Kompos was bestimmtes einstellen, dass das Feld als AutoInc akzeptiert wird?

Wenn du meinst, dass das AutoInc auf Datenbankseite geschieht, dann weis ID einfach -1 zu, der Server korrigiert das dann schon automatisch...

trashcandesign 7. Aug 2006 15:28

Re: Zeos - Insert-Problem
 
Das AutoInc geschieht auf jeden Fall auf DB-Seite, aber wenn ich einen Wert mitgebe, wird der für gewöhnlich genommen, so bin ich es zumindest aus MySQL gewohnt.

Aber der Tip von Domo Sokrat hat funktioniert, jetzt hoff ich nur, das alles klappt auch, wenn ich weitere DBs hinzufüge (MSSQL, Access)

Danke für eure Hilfe

Domo Sokrat 7. Aug 2006 17:10

Re: Zeos - Insert-Problem
 
:warn: Achtung! :warn:

Zitat:

Zitat von Domo Sokrat
... momentan nur(!) für Firebird realisiert...

Mal sehen, ob wir demnächst den Rest auch noch realisiert bekommen ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 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