количество строк в таблице mysql

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

количество строк в таблице mysql

Сообщение VladMgn » 02.12.2012 04:02:43

Приветствую !
Как новичек, нуждаюсь в помощи по работе lazarus с mysql:
как узнать количество строк в таблице mysql 5, с примером присвоения значения в переменную если можно;

lazarus 1.0.2 fpc 2.6.0 svn 39019 windows 7
бд на удаленном сервере
VladMgn
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.12.2012 03:25:10

Re: количество строк в таблице mysql

Сообщение Xenar » 02.12.2012 21:21:49

Код: Выделить всё
var
i: Integer;
begin
SQLQuery1.First;
while not SQLQuery1.EOF do
  begin
   inc(i);
   SQLQuery1.Next; 
  end;
end;

Так устроит?
Аватара пользователя
Xenar
постоялец
 
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Re: количество строк в таблице mysql

Сообщение VladMgn » 02.12.2012 21:40:19

Xenar писал(а):Так устроит?


спасибо большое, а если база будет большая, надолго затянется перебор ?
VladMgn
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.12.2012 03:25:10

Re: количество строк в таблице mysql

Сообщение Frolik » 02.12.2012 21:43:46

считать количество строк в базе перебором - это сурово.
используйте SELECT COUNT(*) AS row_count FROM table_name
Frolik
постоялец
 
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Re: количество строк в таблице mysql

Сообщение VladMgn » 03.12.2012 00:45:25

Frolik писал(а):считать количество строк в базе перебором - это сурово.
используйте SELECT COUNT(*) AS row_count FROM table_name

как оно пишется в коде я не пойму как значение count(*) передать в лазарус ?
VladMgn
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.12.2012 03:25:10

Re: количество строк в таблице mysql

Сообщение amateur » 03.12.2012 01:31:10

надолго затянется перебор ?
Disablecontrol + EnableControl (если подключены визуальные контролы). Скорость будет зависеть от кол-ва записей. Впринцыпе приемлима.

С помощью SQL проще и быстрее.

как оно пишется в коде я не пойму как значение count(*) передать в лазарус ?

вроде так :)
Код: Выделить всё
With SQLQuery1.SQL do  begin
  Clear;
  Add('SELECT COUNT(*) AS row_count FROM table_name');
end;
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: количество строк в таблице mysql

Сообщение Little_Roo » 03.12.2012 01:35:06

VladMgn писал(а): я не пойму как значение count(*) передать в лазарус ?

Через SQL запрос :D ... Да, а какие компоненты доступа к БД используете? и используете ли ????

Опа... опередили с ответом :D
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: количество строк в таблице mysql

Сообщение VladMgn » 03.12.2012 01:55:36

amateur писал(а):вроде так

спасибо, это сам запрос, а как значение запроса присвоить переменной в программе ? использую mysql50connection, sqltransacation, sqlquery и datasource
не пинайте, если вопрос глупый :oops:
типа что то
rows:= row_count;
VladMgn
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.12.2012 03:25:10

Re: количество строк в таблице mysql

Сообщение yeger » 03.12.2012 09:14:52

VladMgn, вам amateur подсказал сам запрос для SqlQuery, его выполняете. Результат будет хранится в "SQLQuery1.Fields.Fields[1]", прочитать его можно как любой тип, и присвоение будет выглядеть примерно так
Код: Выделить всё
if SQLQuery1.Active then SQLQuery1.Active:=false;//А вдруг предыдущий не закрыли
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT COUNT(*) AS row_count FROM table_name');
SQLQuery1.Open;//выполняем запрос
SQLQuery1.First;//курсор на первую запись, не важно что одна, для верности
rows := SQLQuery1.Fields.Fields[1].AsInteger;//читаем
Аватара пользователя
yeger
новенький
 
Сообщения: 49
Зарегистрирован: 17.03.2011 12:26:34

Re: количество строк в таблице mysql

Сообщение VladMgn » 03.12.2012 17:18:05

Спасибо огромное!!!
VladMgn
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.12.2012 03:25:10

Re: количество строк в таблице mysql

Сообщение Владимир » 03.12.2012 20:03:57

yeger писал(а):if SQLQuery1.Active then SQLQuery1.Active:=false;//А вдруг предыдущий не закрыли
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT COUNT(*) AS row_count FROM table_name');
SQLQuery1.Open;//выполняем запрос
SQLQuery1.First;//курсор на первую запись, не важно что одна, для верности
rows := SQLQuery1.Fields.Fields[1].AsInteger;//читаем


Мои 5 копеек:
Код: Выделить всё
var
rows:Integer;
.........
SQLQuery1.SQL.Add('SELECT COUNT(field_name) AS row_count FROM table_name');//если указывать конкретное поле, то запрос должен выполняться быстрее (теоретически)
SQLQuery1.Open;//выполняем запрос
SQLQuery1.First;//курсор на первую запись, не важно что одна, для верности - СОГЛАСЕН
rows:=SQLQuery1.FieldByName('row_count').Value;//как вариант - query содержит результат запроса в переменной variant, не заботясь о его типе. И если переменная rows соответствует типу поля, то все Ок.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: количество строк в таблице mysql

Сообщение VladMgn » 05.12.2012 08:18:46

Владимир писал(а):/если указывать конкретное поле, то запрос должен выполняться быстрее (теоретически)
SQLQuery1.Open;//выполняем запрос

тоже интересный момент, спасибо!
VladMgn
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.12.2012 03:25:10

Re: количество строк в таблице mysql

Сообщение v-t-l » 05.12.2012 15:33:51

Владимир писал(а):если указывать конкретное поле, то запрос должен выполняться быстрее (теоретически)

Как раз наоборот. Обычно, если нет условий WHERE, для выполнения запроса SELECT COUNT(*) sql-движку достаточно прочитать количество строк из служебной инфы таблицы, а если указать конкретное поле, то движку придется подсчитывать количество NOT NULL значений в этом поле.
v-t-l
энтузиаст
 
Сообщения: 742
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: количество строк в таблице mysql

Сообщение Владимир » 06.12.2012 10:12:48

v-t-l писал(а):Как раз наоборот.

Век живи...
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: количество строк в таблице mysql

Сообщение VladMgn » 07.12.2012 08:17:39

:?: теперь другая проблема, не хочет в базе изменения сохранять, пример:
Код: Выделить всё
begin
try
  dbform.SQLQuery1.Active:=true;
  dbform.SQLQuery1.SQL.Clear;
  dbform.SQLQuery1.sql.add('SELECT oborud from  ob_');
  dbform.SQLQuery1.Open;;
except
  ShowMessage(' Ошибка при выполнении SQL запроса.');
  exit;
  end;
dbform.SQLQuery1.First;
oborudform.stringgrid1.Row:=1;
dbform.SQLQuery1.Edit;
dbform.SQLQuery1.FieldByName('oborud').AsString:= oborudform.stringgrid1.Cells[1,oborudform.stringgrid1.Row];
dbform.SQLQuery1.Post;
dbform.SQLQuery1.ApplyUpdates;
dbform.SQLTransaction1.CommitRetaining;
dbform.SQLQuery1.Active:=false;
dbform.SqlQuery1.Close;
end;                                       


где можно посмотреть лог работы mysql с лазарусом, может в нем что видно будет ?
VladMgn
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.12.2012 03:25:10

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 250

Рейтинг@Mail.ru