Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работать c Table и с результатами запроса? 
:(
    Опции темы
Nikkie
  Дата 24.6.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 13.4.2005

Репутация: нет
Всего: нет



Зравствуйте!

Подскажите пожалуйста с примером.

Есть таблица Table1, связанная и заполненная, есть результат запроса Query.

Как сделать цикл, чтобы поочередно считывать информацию из строк?
Как узнать количество строк?
например:

первая строка: поле1, поле2, поле3....
вторая строка: поле1, поле2, поле3....
....
....
последняя строка: поле1, поле2, поле3....

Заранее благодарен!

Это сообщение отредактировал(а) Nikkie - 24.6.2005, 14:34
PM MAIL ICQ   Вверх
Негодяй
Дата 24.6.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Порядочный
***


Профиль
Группа: Завсегдатай
Сообщений: 1513
Регистрация: 13.2.2005
Где: Kazakhstan, Almat y

Репутация: нет
Всего: 32



Как сделать цикл, чтобы поочередно считывать информацию из строк?

Код

while not Query1.Eof do [i]//пока не закончится найденные запросы[/i]
begin
form1.TreeView1.Items.AddChild(Form1.TreeView1.Items.Item[position],Query1.FieldByName('Destination').AsString);[i]//заполняет дерево[/i]
Query1.Next();
end;
query1.Close;
end;

Взято с моего кода.

Как узнать количество строк?
Код

Query1.SQL.Count;

PM MAIL   Вверх
Nikkie
Дата 24.6.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 13.4.2005

Репутация: нет
Всего: нет



А нет ли более интересного варианта smile, чтод например на лету доставал следующую строку...

Мне просто надо каждую строку сравнить с RangeMatrix...
PM MAIL ICQ   Вверх
Vit
Дата 24.6.2005, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(Nikkie @ 24.6.2005, 06:04)
А нет ли более интересного варианта , чтод например на лету доставал следующую строку...



Как это? Query.next - на лету переводит курсор на следующую строку... Fields - на лету даёт доступ к полю... ИМХО, не забывайте что таблица это не массив, запись в таблице это не строка, а к самой таблице обращаться как к какому-то адресному пространству нельзя... Базы данных гораздо более сложные объекты чем простое хранилище данных


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Nikkie
Дата 24.6.2005, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 13.4.2005

Репутация: нет
Всего: нет



smile это понятно smile

Код

While not Table1.Eof do

 begin
    
   for i:=0 to Table1.Fields.count do
   
    F[s,i]:=Table1.Fields[i].AsString;
 Table1.Next; 
 s:=inc(s,1); 
 
 end;



А как вернуться в начало?

Как узнать количество строк в таблице?

Query1.SQL.Count; Это случайно не количество строк в тексте запроса?

Это сообщение отредактировал(а) Nikkie - 24.6.2005, 16:03
PM MAIL ICQ   Вверх
Негодяй
Дата 24.6.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Порядочный
***


Профиль
Группа: Завсегдатай
Сообщений: 1513
Регистрация: 13.2.2005
Где: Kazakhstan, Almat y

Репутация: нет
Всего: 32



Цитата(Nikkie @ 24.6.2005, 15:29)
Query1.SQL.Count; Это случайно не количество строк в тексте запроса?

оно smile
Цитата(Nikkie @ 24.6.2005, 15:29)
А как вернуться в начало?

В смысле вернуться тебе нужно в твоей программе снова в цикл и обработать повторно данные. Сделай тогда уж функцию или процедуру и вызывай сколько надо.

PM MAIL   Вверх
Nikkie
Дата 24.6.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 13.4.2005

Репутация: нет
Всего: нет



Может кто-нибудь все-таки покажет как узнать количество записей в Table и в результате запроса querry?

Мне не кадется если я создам функцию, то курсор переместится в начало...

Мне надо запустить процедуру:

Код

While not Table1.Eof do

 begin
    
   for i:=0 to Table1.Fields.count do
   
    F[s,i]:=Table1.Fields[i].AsString;
 Table1.Next; 
 s:=inc(s,1); 
 
 end;


А потом ее запустить еще раз через некоторое время...
Вот для этого мне и надо вернуть курсор в начало после NEXT...

Это сообщение отредактировал(а) Nikkie - 24.6.2005, 17:27
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.6.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



Всего количество записей в таблице узнается при помощи функции Count
Код

SELECT COUNT(*) FROM TableName;


Итого
Код

 ShowMessage(DBGrid1.Fields[0].AsString); // К примеру

PM   Вверх
Nikkie
Дата 24.6.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 13.4.2005

Репутация: нет
Всего: нет



Ага уже лучше smile
А из результата запроса querry smile достать количество строк?

И все таки как вернуть курсор после Next в начало Table?



PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.6.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



Просмотрим грубую демку

Код

var
 i, j: integer;
begin
 with Query1 do
  begin
   Close;
   SQL.Text:='SELECT COUNT(*) FROM TableName;';
   Open;
   j:=Fields[0].AsInteger;
  end;
 with Table1 do
  begin
   First;
   for i:=1 to j do
    Next;
   First;
 end;
end;

Вроде должно работать... Но также есть и таккая вещь вроде Table1.Eof или как-то так... щас посмотрю...

Скажи: для чего нужно знать кол-во записей?


PM   Вверх
Nikkie
Дата 24.6.2005, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 13.4.2005

Репутация: нет
Всего: нет



Ого! Вот эого достаточно вполне smile

А First - это он переводит курсор в начало?

Код

While not Table1.Eof do

 begin
    
   for i:=0 to Table1.Fields.count do
   
    F[s,i]:=Table1.Fields[i].AsString;
 Table1.Next; 
 s:=inc(s,1); 
 
 end;

Table1.First;

While not Table1.Eof do

 begin
    
   for i:=0 to Table1.Fields.count do
   
    F[s,i]:=Table1.Fields[i].AsString;
 Table1.Next; 
 s:=inc(s,1); 
 
 end;


Вроде все правильно...
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.6.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



s:=inc(s,1);
Может проще s:=inc(s);

А так все верно... smile

First - возврат к первой записи...
Добавлено @ 17:55
точнее... inc(s) вообще...
Добавлено @ 17:56
Table1.Fields.count заменить нуна вроде на

Table1.Fields.count-1
PM   Вверх
Nikkie
Дата 24.6.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 13.4.2005

Репутация: нет
Всего: нет



ТОчно smile Спасибо smile

Ура заработала!!!
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.6.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



Обращайся.. если что... smile
PM   Вверх
Vit
Дата 24.6.2005, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(Nikkie @ 24.6.2005, 08:30)
А из результата запроса querry  достать количество строк?



Код

Query.Last; //ОБЯЗАТЕЛЬНО!
Query.recordcount//-возращает количество записей


Цитата(Nikkie @ 24.6.2005, 08:30)
И все таки как вернуть курсор после Next в начало Table?


Next - следующая
First - в начало
Last - в конец
Previous - к предыдущей


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.