[Delphi 7 + Firebird 2.1] Problem z IBQuery.ExecSQL

0

Witajcie!

Chciałbym poruszyć pewien dziwny problem. Zerknijcie na kod:

IBDatabase.Connected := false;
IBDatabase.Connected := true;
IBQuery.Close;
IBQuery.SQL.Clear;
IBQuery.SQL.Text := 'INSERT INTO Wojewodztwa (IDwoj,nazwa) VALUES (gen_id(GENWOJ,1), NAZWA);';
IBQuery.ParamByName('NAZWA').AsString := 'test';
IBTransaction.StartTransaction;
IBQuery.ExecSQL;
IBTransaction.Commit;

Generator jest ustawiany jako:
CREATE GENERATOR GENWOJ;
SET GENERATOR GENWOJ TO 0;

Załóżmy, że powyższy kod jest uruchamiany podczas kliknięcia przycisku Button1. Według tego, do tablicy Wojewodztwa powinien dodać się wpis (1, 'test'). Po kliknięciu przycisku, włączam konsolę ISQL oraz wpisuję zapytanie: SELECT * FROM WOJEWODZTWA; Okazuje się, że pomimo tego, iż podczas kliknięcia przycisku żadnego błędu nie było, wpis do bazy nie zostaje dodany.
Ciekawe jest natomiast zachowanie generatora... włączam ISQL i wpisuję ręcznie INSERT INTO WOJEWODZTWA VALUES (gen_id(GENWOJ,1), 'lalala'); Skoro po akcji przycisku wpis się nie dodał, generator powinien ustawić wartość do wpisywanego ręcznie zapytania jako 1 (1, 'lalala'). Do bazy dodaje się jednak (2, 'lalala'), tak jakby częściowo kod z akcji przycisku się wykonał...
Nic z tego nie rozumiem, bardzo proszę o pomoc!

0

Proszę, niech ktoś pomoże... to jest dość pilna sprawa.. :/

0

A gdzie tu masz parametr "nazwa"?

IBQuery.SQL.Text := 'INSERT INTO Wojewodztwa (IDwoj,nazwa) VALUES (gen_id(GENWOJ,1), NAZWA);';

Poza tym - spróbuj NIE podawać IDwoj w insercie - wtedy unikniesz podwójnego inkrementowania.

0
  1. parametry są z : (dwukropkiem) przed nazwą
  2. od wstawiania wartości z generatora są wyzwalacze albo procedury

1 użytkowników online, w tym zalogowanych: 0, gości: 1