количество строк в таблице mysql
Модератор: Модераторы
количество строк в таблице mysql
Приветствую !
Как новичек, нуждаюсь в помощи по работе lazarus с mysql:
как узнать количество строк в таблице mysql 5, с примером присвоения значения в переменную если можно;
lazarus 1.0.2 fpc 2.6.0 svn 39019 windows 7
бд на удаленном сервере
Как новичек, нуждаюсь в помощи по работе lazarus с mysql:
как узнать количество строк в таблице mysql 5, с примером присвоения значения в переменную если можно;
lazarus 1.0.2 fpc 2.6.0 svn 39019 windows 7
бд на удаленном сервере
Код: Выделить всё
var
i: Integer;
begin
SQLQuery1.First;
while not SQLQuery1.EOF do
begin
inc(i);
SQLQuery1.Next;
end;
end;Так устроит?
Xenar писал(а):Так устроит?
спасибо большое, а если база будет большая, надолго затянется перебор ?
считать количество строк в базе перебором - это сурово.
используйте SELECT COUNT(*) AS row_count FROM table_name
используйте SELECT COUNT(*) AS row_count FROM table_name
Frolik писал(а):считать количество строк в базе перебором - это сурово.
используйте SELECT COUNT(*) AS row_count FROM table_name
как оно пишется в коде я не пойму как значение count(*) передать в лазарус ?
Disablecontrol + EnableControl (если подключены визуальные контролы). Скорость будет зависеть от кол-ва записей. Впринцыпе приемлима.надолго затянется перебор ?
С помощью SQL проще и быстрее.
как оно пишется в коде я не пойму как значение count(*) передать в лазарус ?
вроде так
Код: Выделить всё
With SQLQuery1.SQL do begin
Clear;
Add('SELECT COUNT(*) AS row_count FROM table_name');
end;- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
VladMgn писал(а): я не пойму как значение count(*) передать в лазарус ?
Через SQL запрос
Опа... опередили с ответом
amateur писал(а):вроде так
спасибо, это сам запрос, а как значение запроса присвоить переменной в программе ? использую mysql50connection, sqltransacation, sqlquery и datasource
не пинайте, если вопрос глупый
типа что то
rows:= row_count;
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 писал(а):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 соответствует типу поля, то все Ок.
Владимир писал(а):/если указывать конкретное поле, то запрос должен выполняться быстрее (теоретически)
SQLQuery1.Open;//выполняем запрос
тоже интересный момент, спасибо!
Владимир писал(а):если указывать конкретное поле, то запрос должен выполняться быстрее (теоретически)
Как раз наоборот. Обычно, если нет условий WHERE, для выполнения запроса SELECT COUNT(*) sql-движку достаточно прочитать количество строк из служебной инфы таблицы, а если указать конкретное поле, то движку придется подсчитывать количество NOT NULL значений в этом поле.
v-t-l писал(а):Как раз наоборот.
Век живи...
Код: Выделить всё
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 с лазарусом, может в нем что видно будет ?
