Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.09.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вызывать...

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


 
asail ©   (2014-02-12 18:58) [41]


> clickmaker ©   (12.02.14 10:04) [40]
> > Не. Согласно феньшую, лучше FetchAll вызывать...
>
> ну да. Вот сишники до сих пор, чтобы длину строки узнать,
>  вынуждены бежать до закрывающего нуля

Секундочку! Речь шла о лучше относительно Last, а не SELECT COUNT(*)... Так что, при чем тут бегающие куда-то сишники не понятно...


 
asail ©   (2014-02-12 19:02) [42]


>
> Novicer   (12.02.14 09:49) [39]
> >asail Литературу прикупил, бум читать... А вот от справки
> пока толку мало

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


 
Novicer   (2014-02-12 23:16) [43]

Справка в Дельфи 2010 значительно хуже чем 7-ой версии. Результатов ворох, а по делу мало :( и с примерами беда... Вобще справкой перестал пользоватся.


 
Dennis I. Komarov ©   (2014-02-12 23:21) [44]

А для чего нудно знать количество записей в таблице?


 
Novicer   (2014-02-13 00:00) [45]

Нудно ничего не знать, значительно веселее знать все ;)


 
Dennis I. Komarov ©   (2014-02-13 09:48) [46]

Ну, как знаешь...



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

Форум: "Прочее";
Текущий архив: 2014.09.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.005 c
11-1244031341
igg
2009-06-03 16:15
2014.09.21
Контекстное меню и ComboBox


15-1392303328
alexdn
2014-02-13 18:55
2014.09.21
Сделать 10 дневную версию


15-1392274278
KSergey
2014-02-13 10:51
2014.09.21
Системы ведения изменяющихся документов


15-1392237003
Юрий
2014-02-13 00:30
2014.09.21
С днем рождения ! 13 февраля 2014 четверг


15-1392582602
Юрий
2014-02-17 00:30
2014.09.21
С днем рождения ! 17 февраля 2014 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский