UIB v2.5

KiBERMiKE

Местный
Регистрация
6 Апр 2010
Сообщения
17
Реакции
30
Credits
28
Народ, подскажите, плз...

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

Например:
Код:
  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".
Код:
  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 - всё нормально.
 
Последнее редактирование модератором:

KiBERMiKE

Местный
Регистрация
6 Апр 2010
Сообщения
17
Реакции
30
Credits
28
Не одно, так другое...

В 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".

Код:
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.
 
Регистрация
4 Окт 2008
Сообщения
25
Реакции
14
Credits
557
Чтобы не выводился 0 первой строкой можно попробовать сделать FetchAll перед самим First. Если данные запроса еще не выбраны, то First не сдвигает внутренний курсор.
 

KiBERMiKE

Местный
Регистрация
6 Апр 2010
Сообщения
17
Реакции
30
Credits
28
Если так, то помогает.

Код:
  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;

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