UIB v2.5

KiBERMiKE

Member
Joined
month_4_short 6, 2010
Messages
17
Reaction score
30
Age
43
Location
Дмитров
Народ, подскажите, плз...

Решил попробовать UIB v2.5 с сервером FireBird v2.5.
У компонента TUIBQuery в результате обработки запроса SELECT первой строкой идёт ноль "0".

Например:
Code:
  Memo1.Lines.Clear;

  query1.SQL.Text:= 'SELECT * FROM TABLE1';
  query1.Execute;

  query1.First;

  while not query1.Eof do
  begin
    Memo1.Lines.Add(query1.Fields.ByNameAsString['ID'] + ' ' + query1.Fields.ByNameAsString['FIELD1']);
    query1.Next;
  end;

Так вот первой строкой в Memo1 будет выводится "0", а только потом содержимое таблицы TABLE1.

Тоже самое после "SELECT COUNT(*) FROM TABLE1".
Code:
  Memo1.Lines.Clear;

  query1.SQL.Text:= 'SELECT COUNT(*) FROM TABLE1';
  query1.Execute;

  Memo1.Lines.Add(query1.Fields.ByNameAsString['COUNT']);

В Memo1 попадёт "0". Если перед выводом поставить query1.Next, то только тогда мы попадаем на первую строку.

Вобщем-то вопрос именно в том, почему первая строка содержит "0"?

Проверил тоже самое с ZEOSDB v7.0.0 - всё нормально.
 
Last edited by a moderator:

KiBERMiKE

Member
Joined
month_4_short 6, 2010
Messages
17
Reaction score
30
Age
43
Location
Дмитров
Не одно, так другое...

В ZEOSDB 7 делаю запрос INSERT RETURNING, но получаю ошибку "SQL Error: Dynamic SQL Error SQL error code =-504 Invalid cursor reference Cursor in not open. Error Code: -504. Unknown cursor".

Code:
Memo1.Lines.Clear;

  ZQuery1.SQL.Text:= 'INSERT INTO TABLE1 (FIELD1) VALUES(''test'') RETURNING ID';
  ZQuery1.Open;

  Memo1.Lines.Add(ZQuery1.FieldByName('ID').AsString);

Обычный INSERT проходит нормально.


Зато UIB v2.5, тот же самый INSERT RETURNING возвращает нужный мне ID.
 
Joined
month_10_short 4, 2008
Messages
13
Reaction score
4
Чтобы не выводился 0 первой строкой можно попробовать сделать FetchAll перед самим First. Если данные запроса еще не выбраны, то First не сдвигает внутренний курсор.
 

KiBERMiKE

Member
Joined
month_4_short 6, 2010
Messages
17
Reaction score
30
Age
43
Location
Дмитров
Если так, то помогает.

Code:
  Memo1.Lines.Clear;

  query1.SQL.Text:= 'SELECT * FROM TABLE1';
  query1.Execute;

  [B]query1.FetchAll;[/B]

  [B]query1.First;[/B]

  while not query1.Eof do
  begin
    Memo1.Lines.Add(query1.Fields.ByNameAsString['ID'] + ' ' + query1.Fields.ByNameAsString['FIELD1']);
    query1.Next;
  end;

Теперь бы ещё понять, что это за ноль такой вообще.
 
Top