Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.09.21;
Скачать: CL | DM;

Вниз

Как узнать количество записей в таблице?   Найти похожие ветки 

 
Novicer   (2014-02-11 13:04) [0]

Пробовал select count(*) frome mytable результата нет :( Мне нужно в ShowMessage показать сколько строк в таблице, а куда сохраняет результат запрос непонятно... Погуглив нашел всюду один пример в виде запроса, в чем сидит результ тайна :)


 
macrodens ©   (2014-02-11 13:05) [1]

Запрос через что делаешь?


 
Германн ©   (2014-02-11 13:09) [2]


> куда сохраняет результат запрос непонятно

Сюда http://docwiki.embarcadero.com/Libraries/XE2/en/Data.DB.TDataSet.Fields


 
macrodens ©   (2014-02-11 13:09) [3]

самый простой пример:

 Query.SQL.Text := "select count(*) as Cnt from mytable";
 Query.Open;
 showmessage(Query.FieldByName("Cnt").asstring);


 
Novicer   (2014-02-11 13:11) [4]

Запрос через IbQuery(ibx) :) Спасибо за пример!


 
Ega23 ©   (2014-02-11 13:16) [5]

var
 ds: TIBSQL;
begin
 ds := TIBSQL.Create(nil);
 try
   ds.Connection := ...;
   ds.Transaction := ....;
   ds.SQL.Text := "select count(*) from mytable";
   ds.Open;
   ShowMessage(ds.Fields[0].AsString);
 finally
   ds.Free;
 end;
end;


 
Novicer   (2014-02-11 13:20) [6]

ShowMessage(IntToStr(IbQuery1.DataSource.DataSet.RecordCount)) приводит к ошибке, а какие были на него надежды... :( Хотел посчитать строки возвращаемые любым запросом...


 
Ega23 ©   (2014-02-11 13:23) [7]

IbQuery1.DataSource.DataSet.RecordCount

Ты в этом уверен? Может быть просто
IbQuery1.RecordCount  ?


 
Novicer   (2014-02-11 13:24) [8]

Не может такого быть чтобы где-то не хранилось количество строк возвращаемых запросом! Только вот я не знаю где... :(


 
Inovet ©   (2014-02-11 13:24) [9]

> [5] Ega23 ©   (11.02.14 13:16)
> ds.Fields[0]

Вот это для определения количества записей даже по какому-то критерию — предпочтительней, имхо, и достаточно безопасно, потому что заранее известно, что по логике в результате кроме 1 единственного поля и 1 единственной записи ничего нет. А вообще при обращении по номеру поля можно накосячить, при последуюющем изменении запроса.


 
Inovet ©   (2014-02-11 13:25) [10]

> [8] Novicer   (11.02.14 13:24)
> количество строк возвращаемых запросом

Оно заранее неизвестно вообще-то. Читай справку про RecordCount.


 
Novicer   (2014-02-11 13:26) [11]

Просто квери.рекордкаунт возвращает бредовую 14, в то время когда в гриде 5 тыщ записей :(


 
Inovet ©   (2014-02-11 13:28) [12]

> [11] Novicer   (11.02.14 13:26)
> в гриде 5 тыщ

В гриде нет записей


 
Smile   (2014-02-11 13:30) [13]

RecordCount
:)


 
Novicer   (2014-02-11 13:34) [14]

Отображаются записи в гриде, а то что они в датасете все знают, но удобнее говорить в гриде, потому как видишь их там :) прения по этому поводу для ворчунов ;) попытка узнать рекордкаунт датасета тоже почему-то провалилась с месагой про ошибку :(


 
macrodens ©   (2014-02-11 13:37) [15]

по поводу RecorCount внимательнее почитай Ega23 ©   (11.02.14 13:23) [7]


 
Smile   (2014-02-11 13:37) [16]

Читай до ... (полного понимания)
> Ega23 ©   (11.02.14 13:23) [7]
:)


 
Ega23 ©   (2014-02-11 13:37) [17]


> Не может такого быть чтобы где-то не хранилось количество
> строк возвращаемых запросом! Только вот я не знаю где...
>  :(


Это RecordCount


 
Ega23 ©   (2014-02-11 13:40) [18]


> Оно заранее неизвестно вообще-то. Читай справку про RecordCount.


Я уже подзабыл. Но по-моему, это RecNo не определено. Точнее - зависит от конкретной реализации TDataSet. А вот RecordCount должно быть определённым.

Хотя тут от курсора тоже может зависеть... Но, ИМХО, не для случая с IBQuery


 
Ega23 ©   (2014-02-11 13:42) [19]


> А вообще при обращении по номеру поля можно накосячить,
> при последуюющем изменении запроса.


С одной стороны - да. С другой на FieldByName при массовых операциях оверхед есть.
Но в 99.999% - таки да, FieldByName, кроме случаев получения строго одной записи.


 
RWolf ©   (2014-02-11 13:44) [20]


> Ega23 ©   (11.02.14 13:37) [17]
> > Не может такого быть чтобы где-то не хранилось количество
> > строк возвращаемых запросом! Только вот я не знаю где.
> >  :(
> Это RecordCount

только не возвращаемых, а возвращённых на текущий момент.


 
clickmaker ©   (2014-02-11 13:45) [21]

> на FieldByName при массовых операциях оверхед есть

Field := FieldByName("Name");
for ...
 Val := Field.AsString;
end;


 
Novicer   (2014-02-11 13:46) [22]

РекордКаунт неверно считает для квери, а для датасета вобще приводит к ошибке выполнения... :(


 
Inovet ©   (2014-02-11 13:51) [23]

> [19] Ega23 ©   (11.02.14 13:42)
> С другой на FieldByName при массовых операциях оверхед есть

Ну оверхед при массовой обработке придётся обойти разовым сопоставлением FieldByName и индексов в переменных. А так лучше бы создать поля в дизайнтайм — по крайней мере при изменении запроса будет более осмысленная ошибка.


 
Inovet ©   (2014-02-11 13:53) [24]

> [22] Novicer   (11.02.14 13:46)
> РекордКаунт неверно считает для квери

Ты ни ответы ни справку не читаешь?


 
Ega23 ©   (2014-02-11 13:55) [25]


> РекордКаунт неверно считает для квери, а для датасета вобще
> приводит к ошибке выполнения... :(


У меня всё работает. Наверное, я - идиот.


 
Ega23 ©   (2014-02-11 13:56) [26]


> clickmaker ©   (11.02.14 13:45) [21]


Да понятно оно всё. Обойти всегда можно.


 
Inovet ©   (2014-02-11 13:58) [27]

> [26] Ega23 ©   (11.02.14 13:56)
> Да понятно оно всё. Обойти всегда можно.

Ну так это автору советы.


 
Novicer   (2014-02-11 14:05) [28]

Ну и фиг с ним с рекордкаунтом этим, будет селект каунт... :) тоже неплохо считает...


 
Anatoly Podgoretsky ©   (2014-02-11 14:06) [29]

Ega23 ©   (11.02.14 13:55) [25]

> Наверное, я - идиот

Наверно


 
macrodens ©   (2014-02-11 14:10) [30]

ага особенно неплохо select count(*) считает в таблицах с большим количеством записей и полей... (я не к тому, что он не сосчитает, а ко времени на этот запрос)


 
Ega23 ©   (2014-02-11 14:12) [31]


> ага особенно неплохо select count(*) считает в таблицах
> с большим количеством записей и полей... (я не к тому, что
> он не сосчитает, а ко времени на этот запрос)


Это только в вашем б-гомерзском firebird, да и то на первом обращении.


 
Inovet ©   (2014-02-11 14:21) [32]

> [28] Novicer   (11.02.14 14:05)
> селект каунт... :) тоже неплохо считает...

Что значит «тоже неполхо». Он по-другому считает, не так как рекордсет. Почувствуй разницу сделав

IbQuery1.Last;
IbQuery1.RecordCount;
и
Запросом с count(*)


 
Ega23 ©   (2014-02-11 14:29) [33]


> IbQuery1.Last;
> IbQuery1.RecordCount;


О, точно. Last надо вызвать.


 
Германн ©   (2014-02-11 14:49) [34]


> Novicer   (11.02.14 13:46) [22]
>
> РекордКаунт неверно считает для квери, а для датасета вобще
> приводит к ошибке выполнения... :(

Да и вообще, что Делфи, что Си, что SQL жутко глючные заразы. Сплошные ошибки от них. Ничего правильно посчитать не могут.


 
asail ©   (2014-02-11 16:27) [35]


> Ega23 ©   (11.02.14 14:29) [33]
>
> > IbQuery1.Last;
> > IbQuery1.RecordCount;
>
>
> О, точно. Last надо вызвать.

Не. Согласно феньшую, лучше FetchAll вызывать...


 
Inovet ©   (2014-02-11 16:36) [36]

> [35] asail ©   (11.02.14 16:27)
> Согласно феньшую, лучше FetchAll вызывать

То по феншую, а автору для понимания как раз Last поможет.


 
Ega23 ©   (2014-02-11 16:43) [37]


> Не. Согласно феньшую, лучше FetchAll вызывать...


Я уже тыщщу лет (шесть) этим не пользовался, сейчас только ORM, а там пофигу.


 
asail ©   (2014-02-11 16:57) [38]


> То по феншую, а автору для понимания как раз Last поможет.

Автору для понимания, кроме справки и подходящей литературы, ничто и никто не поможет... По себе знаю.


 
Novicer   (2014-02-12 09:49) [39]

>asail Литературу прикупил, бум читать... А вот от справки пока толку мало :( Гугл рулит! ;) и на форумах еще отзывчивые люди не перевелись, за что им Огромное спасибо!!! :)


 
clickmaker ©   (2014-02-12 10:04) [40]

> Не. Согласно феньшую, лучше FetchAll вызывать...

ну да. Вот сишники до сих пор, чтобы длину строки узнать, вынуждены бежать до закрывающего нуля



Страницы: 1 2 вся ветка

Текущий архив: 2014.09.21;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.008 c
15-1390288445
JohnKorsh
2014-01-21 11:14
2014.09.21
Не по Delphi (поиск алгорима)


2-1381992380
i2e
2013-10-17 10:46
2014.09.21
не изменяется курсор


15-1392323403
Юрий
2014-02-14 00:30
2014.09.21
С днем рождения ! 14 февраля 2014 пятница


2-1382028464
Евгений07
2013-10-17 20:47
2014.09.21
Ошибка компиляции функций виндовс


15-1392191918
Jimmy
2014-02-12 11:58
2014.09.21
Возвращать значения переменных в Java