Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема завершения транзакции / 21 сообщений из 21, страница 1 из 1
23.02.2004, 12:48
    #32418300
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Здравствуйте, уважаемые колеги. :)

У меня серёзная проблема.
Работаю с InterBase'om в Delphi, после того как я делаю Post запросу у меня
данные не сохраняются в базе.
Сохранение происходит, только после закрытия программы.

Пытался на событие afterpost сделать Commit - пишет, что запрос закрыт и не возможно провести операцию.

Код компонентов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
object qAdress: TIBQuery
  Database = DB
  Transaction = trAdress
  Active = True
  BufferChunks =  1000 
  CachedUpdates = False
  SQL.Strings = (
    'select * from "Adress"'
    'order by "aFullName"')
  UpdateObject = upAdress
end
object trAdress: TIBTransaction
  Active = True
  DefaultDatabase = DB
  AutoStopAction = saNone
end


Зарание спасибо.
...
Рейтинг: 0 / 0
23.02.2004, 13:04
    #32418318
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Видать ты хочешь сделать REFRESH, тогда тебе стоит потрогать CommitRetaining...
...
Рейтинг: 0 / 0
23.02.2004, 13:09
    #32418321
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
на какое событие?

Я сделал тестовую програмку.
Два одинаковых запроса.
В первом, я что-то меняю, потом делаю рефреш первому - все супер.
Делаю второму, там ничего не изменилось и данные в таблице(БД) не поменялись.
...
Рейтинг: 0 / 0
23.02.2004, 13:13
    #32418322
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Например на то же, где висит Commit (предполагаю, что это AfterPost). А вообще, afaik, refresh обновляет только те данные, которые УЖЕ закачаны, если кто-то добавил запись она при refresh'е другого датасета не закачается - делай close, open и рули... ;)
...
Рейтинг: 0 / 0
23.02.2004, 13:14
    #32418323
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Делаю именно. Сlose;Open;
Нихрена не меняется. :) Сори.
...
Рейтинг: 0 / 0
23.02.2004, 13:18
    #32418326
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
У меня нет справки по IB.
Подскажитке пожалуйста.
Что указывается в
a: TIBTransaction
begin
a. Params= ????
...
Рейтинг: 0 / 0
23.02.2004, 13:19
    #32418328
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Не бывает такого... На втором датасете тоже транзакцию коммитить надобно... А вообще, я не телепат... Код давай! ;)
...
Рейтинг: 0 / 0
23.02.2004, 13:20
    #32418329
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Я щас со стула упаду... Как это в делфях нету справки???
...
Рейтинг: 0 / 0
23.02.2004, 13:22
    #32418331
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Батенька, вы часом не путаете ли запуск транзакции вызовом StartTransaction и включением компоненты вызовом в Active:=true ?
Если уж на то пошло, то надо бы в BeforeInsert/Edit/delete сказать так:
Код: plaintext
1.
2.
with Transaction do
  if not InTransaction then
    StartStransaction
...
Рейтинг: 0 / 0
23.02.2004, 13:25
    #32418332
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
в обрезаной нет.



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TForm1.Button2Click(Sender: TObject);
begin
IBQuery1.Close;
IBQuery1.Open

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
qAdress.Close;
qAdress.Open
end;

и


вот тебе весь код.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
object qAdress: TIBQuery
  Database = DB
  Transaction = trAdress
  AfterPost = qAdressAfterPost
  Active = True
  BufferChunks =  1000 
  CachedUpdates = False
  SQL.Strings = (
    'select * from "Adress"'
    'order by "aFullName"')
  UpdateObject = upAdress
  Left =  200 
  Top =  85 
end
object trAdress: TIBTransaction
  Active = True
  DefaultDatabase = DB
  DefaultAction = TACommitRetaining  
  AutoStopAction = saNone
  Left =  174 
  Top =  35 
end
object IBQuery1: TIBQuery
  Database = DB
  Transaction = IBTransaction1
  Active = True
  BufferChunks =  1000 
  CachedUpdates = False
  SQL.Strings = (
    'select * from "Adress"'
    'order by "aFullName"')
  UpdateObject = IBUpdateSQL1
  Left =  245 
  Top =  85 
end
object IBTransaction1: TIBTransaction
  Active = True
  DefaultDatabase = DB
  DefaultAction = TACommitRetaining
  AutoStopAction = saNone
  Left =  214 
  Top =  35 
end




вот и всё
...
Рейтинг: 0 / 0
23.02.2004, 13:25
    #32418333
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
А, блин, торможу я... Прально, у него же все датасеты закрываються
Тут да, надо или CommitRetaining сделать, или переоткрыть после этого все запросы, сказав Open.
...
Рейтинг: 0 / 0
23.02.2004, 13:29
    #32418335
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
куда что сделать ничего не понимаю...CommitRetaining на afterpost?
...
Рейтинг: 0 / 0
23.02.2004, 13:32
    #32418337
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Или CommitRetaining всутнуть в AfterPost, или там же вызывать процедуру, которая будет заново открывать транзакцию и переоткрывать все наборы данных. Для тебя, мне кажется, первый вариант будет лучше :)
...
Рейтинг: 0 / 0
23.02.2004, 13:34
    #32418339
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Ты наверное хотел сказать, для моего случая.
Сейчас проверю.
...
Рейтинг: 0 / 0
23.02.2004, 13:36
    #32418343
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Бэзпалензно....
...
Рейтинг: 0 / 0
23.02.2004, 13:49
    #32418349
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Dim GrishinЧто указывается в
a: TIBTransaction
begin
a. Params= ????
read_committed
rec_version
nowait

IBX по умолчанию стартует транзакцию concurrency, а такая транзакция видит только те данные которые " были committed на момент ее запуска ". В отличии от read_committed которая видит все committed-данные
...
Рейтинг: 0 / 0
23.02.2004, 13:49
    #32418351
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGridEh, IBDatabase, IBCustomDataSet, IBUpdateSQL, DB,
  IBQuery, StdCtrls;

type
  TForm1 = class(TForm)
    DB: TIBDatabase;
    dsAdress: TDataSource;
    qAdress: TIBQuery;
    trAdress: TIBTransaction;
    DBGridEh1: TDBGridEh;
    DataSource1: TDataSource;
    IBQuery1: TIBQuery;
    IBTransaction1: TIBTransaction;
    DBGridEh2: TDBGridEh;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    upAdress: TIBUpdateSQL;
    IBUpdateSQL1: TIBUpdateSQL;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure qAdressAfterPost(DataSet: TDataSet);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
IBQuery1.Close;
IBQuery1.Open

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
qAdress.Close;
qAdress.Open

end;


procedure TForm1.qAdressAfterPost(DataSet: TDataSet);
begin
///trAdress.commit
//  trAdress.CommitRetaining
end;



и

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
object DB: TIBDatabase
  Connected = True
  DatabaseName = 'D:\DataBase\Oblik\REINSUR.GDB'
  Params.Strings = (
    'lc_ctype=WIN1251'
    '')
  LoginPrompt = true
  IdleTimer =  0 
  SQLDialect =  3 
  TraceFlags = []
  Left =  30 
  Top =  15 
end
object dsAdress: TDataSource
  DataSet = qAdress
  Left =  620 
  Top =  110 
end
object qAdress: TIBQuery
  Database = DB
  Transaction = trAdress
  AfterPost = qAdressAfterPost
  BufferChunks =  1000 
  CachedUpdates = False
  SQL.Strings = (
    'select * from "Adress"'
    'order by "aFullName"')
  UpdateObject = upAdress
  Left =  200 
  Top =  85 
end
object trAdress: TIBTransaction
  Active = False
  DefaultDatabase = DB
  AutoStopAction = saNone
  Left =  199 
  Top =  50 
end
object DBGridEh1: TDBGridEh
  Left =  10 
  Top =  140 
  Width =  341 
  Height =  256 
  DataSource = dsAdress
  FooterColor = clWindow
  FooterFont.Charset = DEFAULT_CHARSET
  FooterFont.Color = clWindowText
  FooterFont.Height = - 11 
  FooterFont.Name = 'MS Sans Serif'
  FooterFont.Style = []
  TabOrder =  0 
  TitleFont.Charset = DEFAULT_CHARSET
  TitleFont.Color = clWindowText
  TitleFont.Height = - 11 
  TitleFont.Name = 'MS Sans Serif'
  TitleFont.Style = []
end
object DataSource1: TDataSource
  DataSet = IBQuery1
  Left =  500 
  Top =  80 
end
object IBQuery1: TIBQuery
  Database = DB
  Transaction = IBTransaction1
  BufferChunks =  1000 
  CachedUpdates = False
  SQL.Strings = (
    'select * from "Adress"'
    'order by "aFullName"')
  UpdateObject = IBUpdateSQL1
  Left =  300 
  Top =  85 
end
object IBTransaction1: TIBTransaction
  Active = False
  DefaultDatabase = DB
  AutoStopAction = saNone
  Left =  299 
  Top =  50 
end
object DBGridEh2: TDBGridEh
  Left =  355 
  Top =  145 
  Width =  316 
  Height =  231 
  DataSource = DataSource1
  FooterColor = clWindow
  FooterFont.Charset = DEFAULT_CHARSET
  FooterFont.Color = clWindowText
  FooterFont.Height = - 11 
  FooterFont.Name = 'MS Sans Serif'
  FooterFont.Style = []
  TabOrder =  1 
  TitleFont.Charset = DEFAULT_CHARSET
  TitleFont.Color = clWindowText
  TitleFont.Height = - 11 
  TitleFont.Name = 'MS Sans Serif'
  TitleFont.Style = []
end
object Button1: TButton
  Left =  50 
  Top =  95 
  Width =  75 
  Height =  25 
  Caption = 'Button1'
  TabOrder =  2 
  OnClick = Button1Click
end
object Button2: TButton
  Left =  355 
  Top =  100 
  Width =  101 
  Height =  26 
  Caption = 'Button2'
  TabOrder =  3 
  OnClick = Button2Click
end
object upAdress: TIBUpdateSQL
  RefreshSQL.Strings = (
    'Select     '
    'GEN_ID("GEN_Adress_ID",0),'
    '"aFullName",'
    '  "aAdress" '
    'from "Adress" '
    'where '
    '"ID_Adr" = :ID_Adr ')
  ModifySQL.Strings = (
    'update "Adress"'
    'set'
    '   "aFullName" = :aFullName ,'
    '  "aAdress" = :aAdress'
    'where'
    '  "ID_Adr" = :OLD_ID_Adr')
  InsertSQL.Strings = (
    'insert into "Adress"'
    '  ( "aFullName", "aAdress")'
    'values'
    '  (  :aFullName,  :aAdress )'
    ''
    '')
  DeleteSQL.Strings = (
    'delete from "Adress"'
    'where'
    '  "ID_Adr" = :OLD_ID_Adr '
    
      'and not "ID_Adr" in (SELECT DISTINCT "ID_Adr"  FROM  "Negotiatio' +
      'n")')
  Left =  495 
  Top =  35 
end
object IBUpdateSQL1: TIBUpdateSQL
  RefreshSQL.Strings = (
    'Select     '
    'GEN_ID("GEN_Adress_ID",0),'
    '"aFullName",'
    '  "aAdress" '
    'from "Adress" '
    'where '
    '"ID_Adr" = :ID_Adr ')
  ModifySQL.Strings = (
    'update "Adress"'
    'set'
    '   "aFullName" = :aFullName ,'
    '  "aAdress" = :aAdress'
    'where'
    '  "ID_Adr" = :OLD_ID_Adr')
  InsertSQL.Strings = (
    'insert into "Adress"'
    '  ( "aFullName", "aAdress")'
    'values'
    '  (  :aFullName,  :aAdress )'''
    '')
  DeleteSQL.Strings = (
    'delete from "Adress"'
    'where'
    '  "ID_Adr" = :OLD_ID_Adr '
    
      'and not "ID_Adr" in (SELECT DISTINCT "ID_Adr"  FROM  "Negotiatio' +
      'n")')
  Left =  425 
  Top =  30 
end



...
Рейтинг: 0 / 0
23.02.2004, 14:00
    #32418361
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
когда делаю
Post;
Commit;

Все нормально

Но когда делаю на afterpost пишет list index (1) out of bouds
...
Рейтинг: 0 / 0
23.02.2004, 14:01
    #32418362
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Dim Grishin 'Select '
'GEN_ID("GEN_Adress_ID",0),'
'"aFullName",'
' "aAdress" '
'from "Adress" '
А это зачем?
Может там должно быть "ID_Adr"?
...
Рейтинг: 0 / 0
23.02.2004, 14:03
    #32418365
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
ничего не изменилось. :(
...
Рейтинг: 0 / 0
23.02.2004, 14:25
    #32418382
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема завершения транзакции
Всё всем спасибо.

Нужно было на событие AfterPost
Сделать CommitRetaining
при условии если заполнены параметры транзакции (Read Committed)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема завершения транзакции / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]