Получить кол-во записей в таблице SQLite и др.

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

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

Получить кол-во записей в таблице SQLite и др.

Сообщение Сережа » 13.11.2015 20:04:23

В процессе создания приложения возникла огромная куча вопросов по работе с БД в Lazarus. Вот несколько наиболее актуальных для меня вопросов по этой теме:
1. Необходимо получить информацию о кол-ве записей в таблице и поместить эту инфу хотя бы в Label, в моей программе за неимением в стандартной сетке футера я использую StatusBar. Для этого нацарапал вот такую запись:
Код: Выделить всё
count:=MainForm.SQLQuery5.Fields[0].AsString;
MainForm.StatusBar1.Panels.Items[5].Text:=count;
, где count:string;
Информация получается не достоверная как только я начинаю совершать какие-либо действия с записями, в частности произвольное удаление записей. Покажу на скринах. Так выглядит таблица БД SQLite до совершения изменений:
Изображение
Тут есть поле RecNo, которое создала сама программа с помощью которой я сотворял базу(SQLite Expert) - его не видно в датасете и данные с него взять не получается и поле которое я сам создал(RecNum) - уникальное автоинкрементное. До удаления записей, номера строк в этих двух полях идентичны. Затем удаляю несколько строк произвольно и получаю результат:
Изображение
Как видно номера строк уже не совпадают, а именно номера в моем поле имеют пропуски, номера удаленных строк не переприсвоились другим строчкам как это произошло с первым полем...а мой код дает инфу именно по полю RecNum, соответственно он говорит что записей 9, но как видно их на самом деле 7... Внимание :!: вопрос :?: либо нужно переделать код запроса кол-ва записей(я понятия не имею как это сделать ибо перепробовал кучу вариантов) либо сделать каким то образом поле такое же как и поле созданное программой SQLite Expert.... :|

2. В стандартной DBGrid я не нашел футер. Можно ли его каким либо образом создать :?: :!:
Сережа
новенький
 
Сообщения: 33
Зарегистрирован: 02.07.2015 00:24:15
Откуда: Воронеж

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение xterro » 13.11.2015 20:58:02

select count(*) from <имя таблицы> // либо вместо звёздочки можно подставить имя какого-нибудь столбца
xterro
постоялец
 
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение resident » 13.11.2015 21:42:48

Сережа писал(а):есть поле RecNo

Сережа писал(а):его не видно в датасете

С чего вы взяли, что это "поле"? :mrgreen:

Сережа писал(а):я понятия не имею как это сделать

http://lazarus-ccr.sourceforge.net/docs ... count.html

Сережа писал(а):Можно ли его каким либо образом создать

http://lazarus-ccr.sourceforge.net/docs ... label.html
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение Сережа » 14.11.2015 00:09:57

xterro писал(а):select count(*) from <имя таблицы> // либо вместо звёздочки можно подставить имя какого-нибудь столбца

это подошло бы в консоли, а мне то надо результат в статусбар на форме как то отправить =)

Добавлено спустя 1 минуту 55 секунд:
resident писал(а):С чего вы взяли, что это "поле"?

я не знаю как это точно называется, просто увидел в таблице на ровне со своими полями, так и обозвал)

чуть изменил код
Код: Выделить всё
count:=MainForm.DBGrid1.DataSource.DataSet.RecordCount;
MainForm.StatusBar1.Panels.Items[5].Text:=IntToStr(count);

теперь вроде более менее хорошо, только почему то когда дохожу до 20й записи, в статусбаре отображается 20, а записей уже на самом деле 25-30-40..... в общем больше 20 не отображается
п.с. подозреваю что связано это с кол-вом отображаемых строк..т.к. изменив размер сетки по высоте, результат сократился до 10.... видимо округляет до десяток всегда, чуть повыше сделаю уже 20 показывает
Сережа
новенький
 
Сообщения: 33
Зарегистрирован: 02.07.2015 00:24:15
Откуда: Воронеж

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение Ism » 14.11.2015 03:27:39

RecordCount показывает количество записей в таблице на данный момент, которые получены, например видны в гриде
Чтоб было точно нужно сделать Last, First, чтоб затянуло записи
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение Vadim » 14.11.2015 07:32:25

Сережа
Уточните - Вам нужно получить количество записей в таблице SQLite или в датасете после выборки из таблицы SQLite?
Сережа писал(а):Как видно номера строк уже не совпадают, а именно номера в моем поле имеют пропуски,

Всё правильно, так и должно быть. Вы же не заносите в это поле данные заново. А автоинкремент, он как пошёл с самого начала прибавлять по одному, так и продолжает, что бы Вы ни делали с таблицей. И данные в этом поле он не меняет.
Сережа писал(а):это подошло бы в консоли, а мне то надо результат в статусбар на форме как то отправить

И кто Вам мешает? Код для этого дела Вы уже привели.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение Сережа » 14.11.2015 13:39:27

Vadim писал(а):Уточните - Вам нужно получить количество записей в таблице SQLite или в датасете после выборки из таблицы SQLite?

Мне нужно знать сколько всего сделано записей в таблице БД - запускаю приложение, нажимаю коннект, а оно мне показывает что в базе данных столько то записей

Добавлено спустя 3 минуты 36 секунд:
Vadim писал(а):Код для этого дела Вы уже привели.

Код: Выделить всё
select count(*) from <имя таблицы>

это ведь запрос
а как я смогу результат этого запроса присвоить к StatusBar?
Сережа
новенький
 
Сообщения: 33
Зарегистрирован: 02.07.2015 00:24:15
Откуда: Воронеж

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение WAYFARER » 14.11.2015 15:00:02

Сережа писал(а):а как я смогу результат этого запроса присвоить к StatusBar?

Добавьте еще один SQLQuery
SQLQueryX.SQL:=select count(*) as cnt from <имя таблицы>;
Код: Выделить всё
MainForm.StatusBar1.Panels.Items[5].Text:='В таблице '+SQLQueryX.FieldByName('cnt').asString;
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение Сережа » 15.11.2015 21:03:02

WAYFARER писал(а):Добавьте еще один SQLQuery
SQLQueryX.SQL:=select count(*) as cnt from <имя таблицы>;
КОД: ВЫДЕЛИТЬ ВСЁ
MainForm.StatusBar1.Panels.Items[5].Text:='В таблице '+SQLQueryX.FieldByName('cnt').asString;

На текущий момент работает как надо! :) В процессе жесткого тестирования будет видно, все ли так на самом деле)) :!: Спасибо :!:

А по поводу футера в стандартном DBGride есть ли у кого конкретный пример :?: СтатусБар это конечно замечательно, но после красоты увиденной в сетке Ehlib стандартная сетка кажется убогой...надо тюнинговать... футер, чекбоксы и т.д. =)
Сережа
новенький
 
Сообщения: 33
Зарегистрирован: 02.07.2015 00:24:15
Откуда: Воронеж

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение WAYFARER » 15.11.2015 22:02:28

в rxDbGrid от Alexs вроде реализовано.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение Сережа » 15.11.2015 22:46:08

WAYFARER писал(а):в rxDbGrid от Alexs вроде реализовано.

в этой сетке у меня почему то при попытке разместить в ячейке иконку, пропадает весь текст во всех ячейках...хотя на самом деле он есть если тыкнуть по ячейке, просто становится не видим... не смог понять в чем дело, ибо этот же код со стандартным DBGrid работает отлично
поэтому от RxDBGrid отказался
Сережа
новенький
 
Сообщения: 33
Зарегистрирован: 02.07.2015 00:24:15
Откуда: Воронеж

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение alexs » 16.11.2015 09:34:25

Сережа писал(а):в этой сетке у меня почему то при попытке разместить в ячейке иконку, пропадает весь текст во всех ячейках...хотя на самом деле он есть если тыкнуть по ячейке, просто становится не видим... не смог понять в чем дело, ибо этот же код со стандартным DBGrid работает отлично

Дай пример кода с ошибкой.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение Сережа » 16.11.2015 09:58:42

alexs писал(а):Дай пример кода с ошибкой

В DbGrid работает этот код:
Код: Выделить всё
procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: integer; Column: TColumn; State: TGridDrawState);
Var
ImgIndex: integer;
Cc:TCanvas;
Bitmap:TBitmap;

Begin
If (DataCol = 9) then
Begin
Bitmap:= TBitmap.Create;
If DBGrid1.datasource.dataset.fieldbyname('Img_file').value = null then begin
ImgIndex:=0;
End else begin
ImgIndex:=1;
End;
ImageList1.getbitmap(imgindex,bitmap);
Cc:=DbGrid.Canvas;
Cc:=FillRect(rect);
Cc.TextOut(Rect.Left+50, Rect.Top,dbgrid1.datasource.dataset.fields[9].asstring);
Bitmap.free;
End;
End;
Сережа
новенький
 
Сообщения: 33
Зарегистрирован: 02.07.2015 00:24:15
Откуда: Воронеж

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение alexs » 16.11.2015 12:54:02

Для этого в RxDBGrid вообще ничего не надо писать
Посмотри пример в исходниках
В колонке грида указываешь ImageList
В KeyList записываешь соответствия для отображения по примеру:
1=0
2=1
3=2
Где слева стоит значение поля - справа - индекс изображения
т.е. для поля со значением 1 отобразится картинка с индексом 0
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Получить кол-во записей в таблице SQLite и др.

Сообщение Сережа » 16.11.2015 16:46:06

alexs писал(а):KeyList

В моем случае будет выглядеть так?
Null = 0
Not null = 1
Не получилось... Белое поле...а если нажать то (memo) видно
Сережа
новенький
 
Сообщения: 33
Зарегистрирован: 02.07.2015 00:24:15
Откуда: Воронеж

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 222

Рейтинг@Mail.ru
cron