Приветствую !
Как новичек, нуждаюсь в помощи по работе 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 писал(а):Так устроит?
Frolik писал(а):считать количество строк в базе перебором - это сурово.
используйте SELECT COUNT(*) AS row_count FROM table_name
Disablecontrol + EnableControl (если подключены визуальные контролы). Скорость будет зависеть от кол-ва записей. Впринцыпе приемлима.надолго затянется перебор ?
как оно пишется в коде я не пойму как значение count(*) передать в лазарус ?
With SQLQuery1.SQL do begin
Clear;
Add('SELECT COUNT(*) AS row_count FROM table_name');
end;
VladMgn писал(а): я не пойму как значение count(*) передать в лазарус ?
amateur писал(а):вроде так
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;//читаем
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;//выполняем запрос
Владимир писал(а):если указывать конкретное поле, то запрос должен выполняться быстрее (теоретически)
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;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 250