UIB v2.5

KiBERMiKE

Member
Joined
Apr 6, 2010
Messages
17
Reaction score
30
Age
42
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
Apr 6, 2010
Messages
17
Reaction score
30
Age
42
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
Oct 4, 2008
Messages
13
Reaction score
4
Чтобы не выводился 0 первой строкой можно попробовать сделать FetchAll перед самим First. Если данные запроса еще не выбраны, то First не сдвигает внутренний курсор.
 

KiBERMiKE

Member
Joined
Apr 6, 2010
Messages
17
Reaction score
30
Age
42
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