Тема
|
защо
|
|
Автор |
z_free (людоед) |
Публикувано | 15.07.04 23:24 |
|
защо от време на време tquery обектите ми връщат recordCount = -1 когато в тях има много записи като изключим това си работят коректно?
Обикновено се получава при динамично създадени tquery
-------------
Special killer double trouble triple extra nicotine monster!
|
|
Тема
|
Re: защо
[re: z_free]
|
|
Автор | v_automation (Нерегистриран) |
Публикувано | 15.07.04 23:39 |
|
Здравей!
По това как си формулирал въпроса си мога да заключа че едвали това е единственият проблем който имаш.
На такъв въпрос има само един отговор и той е "така".
Венцислав Александрийски
|
|
|
Ако ползваш TQuery.RecordCount извиквай TQuery.FetchAll преди това.
Ако записите, които query-то връща са много, реално идват на порции - като Open-неш query-то идва първата част от тях и след това като scroll-ваш по записите и се наложи, идват останалите. В този случай RecordCount връща (-1).
HTH
|
|
|
Е защо сега така? Човека си пита. Честно казано, може да няма достатъчно опит в тези неща, затова пита тук.
На мене ако ми се случи такова нещо, ще погледна малко сорс, ще пробвам по 1 или 2 начина и ако случайно не разбреа, тогава ще питам.
Нали за това са тези форуми...
---
...и аз пиша на кирилица!Редактирано от ess на 16.07.04 16:28.
|
|
Тема
|
много просто
[re: afterglow]
|
|
Автор | z_free (Нерегистриран) |
Публикувано | 16.07.04 16:54 |
|
Пояснение:
var
qr: tquery;
...
qr := tquery.create(nil);
with qr do begin
databasename := 'restdata';
sql.text := 'select * from users';
<разхождане из записите>
showmessage(inttostr(recordcount)); // показва -1
free;
end;
qr.Databasename := 'restdata';
qr.sql.text := 'select * from users';
-
Не просто е много дразнещ, но и голям проблем. Случва се от време на време и главно на динамично създадени обекти.
|
|
|
Последните два реда от кода са там по грешка, и сега не мога да ги едит. + в <разхождане по записите> се включва едно open :)
В момента не мога да опитам с fetch all, подозирам, че може и да не сработи. Все пак се разхождам по записите ..
-------------
Special killer double trouble triple extra nicotine monster!Редактирано от z_free на 16.07.04 17:18.
|
|
Тема
|
Re: много просто
[re: z_free]
|
|
Автор |
ess (мечтател) |
Публикувано | 16.07.04 17:21 |
|
Преди да изпълниш
sql.text := 'select * from users';
изпълни набързо (може и да не е толкоз бързо:) едно:
sql.text := 'select count(*) as RecordsCount from users';
и си вземи броя записи: FieldByName('RecordsCount').AsInteger
Ако в твоята ситуация е възможно де...
---
...и аз пиша на кирилица!
|
|
Тема
|
не може, трябва решение, надявах се ..
[re: ess]
|
|
Автор | z_free (Нерегистриран) |
Публикувано | 16.07.04 18:30 |
|
В моя случай не може току така, защото sql изречението се генерира по време на изпълнение и се предава като параметър на функция, която създава tquery и го отваря. За да го реализирам така ще трябва да парс-вам изречението и да си генерирам ново със select count, което даже е рисковано понякога, а и бавно.
Надявах се някой да се е сблъсквал с това и да го е решавал ...
|
|
Тема
|
Re: защо
[re: ess]
|
|
Автор | v_automation (Нерегистриран) |
Публикувано | 16.07.04 22:55 |
|
Здравей!
Никой не се е родил научен и няма нищо лошо в това да попиташ, но не става дума за това.
Хубаво е че искаш да му помогнеш, но според мен нетрябваше да го правиш дакато не си формулира въпроса.
Ще ти хареса ли форум от вида:
тема: защо
тема: как
тема: защо
тема: защо
тема: защо
тема: как
тема: как
тема: кой
тема: ......
Коя от така записаните темите би те заинтересувала?
Приятно ли ти е да си кликаш на хаос по линковете?
Въпроса не е до това дали има опит, а как пита!
Ако пита базата както пита във форума значи резултата който получава е съвсем нормален и следователно няма какво да му се обяснява
Венцислав Александрийски
|
|
|
Мдааа...
|
|
Тема
|
Re: много просто
[re: z_free]
|
|
Автор |
killall (Дядо Мраз) |
Публикувано | 19.07.04 23:12 |
|
qr := tquery.create(nil);
with qr do begin
databasename := 'restdata';
sql.text := 'select * from users';
open;
last;
first;
showmessage(inttostr(recordcount)); // показва -1
free;
end;
_ _ _
Time is like a drug. Too much of it kills you.
|
|
|
...нещо не го разбирам какво точно очаква. Може проблемът да не му е в това, в което си мисли, че е...
|
|
|
Очаквам, когато отворя query с просто select заявка, която връща пет записа, които съвсем коректно се четат (while not Eof do begin showmessage(qrF1.AsString); next; end; си показва съобщение пет пъти) -- тогава очаквам qr.RecordCount да е 5, a не -1.
Много я разтекохме темата, нищо не разбрахме ....
-------------
Special killer double trouble triple extra nicotine monster!
|
|
|
Какво ти е UniDirectional на query-то? Възможно ли е да ти връща -1 заради него?
|
|
Тема
|
Re: killing in the name of
[re: z_free]
|
|
Автор |
NDeu (динозавър) |
Публикувано | 20.07.04 12:52 |
|
RTFS
Да погледнем в изворите (sources)
Имаме property RecordCount: Integer read GetRecordCount;
в TDataSet, където
function GetRecordCount: Integer; virtual;
function TDataSet.GetRecordCount: Longint;
begin
Result := -1;
end;
Т.е. ако GetRecordCount не е препокрита в наследниците, ще имаме -1
В твоя случай, обаче
TQuery = class(TDBDataSet)
TDBDataSet = class(TBDEDataSet)
TBDEDataSet = class(TDataSet)
function TBDEDataSet.GetRecordCount: Integer;
begin
CheckActive;
if (DbiGetExactRecordCount(FHandle, Result) <> DBIERR_NONE) and
(DbiGetRecordCount(FHandle, Result) <> DBIERR_NONE) then
Result := -1;
end;
Т.е. DbiGetExactRecordCount и DbiGetRecordCount ти връщат грешка.
Защо?
Ти трябва да си отговориш
Не казваш за каква база става въпрос и с какви драйвери се връзваш.
|
|
Тема
|
Re: защо
[re: v_automation]
|
|
Автор | Apo (Нерегистриран) |
Публикувано | 20.07.04 17:20 |
|
probvai taka:
Query.First;
Query.Last;
i sega ve4e Query.RecordCount
|
|
|
Не си съвсем прав. Сигурно има хора с опит, които веднага като видят такъв въпрос "защо RecordCount = -1", ще отговорят конкретно и компетентно.
Някои от отговорите са такива или с насочващи въпроси, по същество.
Това, че ти не си се сетил веднага за какво става дума или че не си разбрал въпроса, не ти дава право да отговаряш по този начин.
No offense...
---
...и аз пиша на кирилица!
|
|