|
Тема
|
Моля за малко помош с Do Until
|
|
Автор | adgj (Нерегистриран) |
Публикувано | 12.09.05 17:51 |
|
Здравейте,
имам проблем с долния скрипт.
Идеята му е да превърта записи и да ги подрежда в текстово поле един под друг. Това и прави , но немога да разбера защо последниа запис го дублира??
Сигурно е нещо просто , но не се сещам.
Благодаря
Do
Data1.Recordset.FindNext A
Text = Text.Text & vbNewLine & Na
Loop Until Data1.Recordset.NoMatch
| |
Тема
|
Re: Моля за малко помош с Do Until
[re: adgj]
|
|
Автор |
Щиpлиц (разузнавач) |
Публикувано | 12.09.05 20:49 |
|
А ако опиташ така:
Data1.Recordset.FindFirst A
Do Until Data1.Recordset.NoMatch
Text = Text.Text & vbNewLine & Na
Data1.Recordset.FindNext A
Loop
... кажи после дали става.
ЩирлицРедактирано от Щиpлиц на 12.09.05 20:51.
| |
Тема
|
Re: Моля за малко помош с Do Until
[re: Щиpлиц]
|
|
Автор | adgj (Нерегистриран) |
Публикувано | 13.09.05 08:57 |
|
Както винаги Щирлиц е на ниво.
Всичко работи.
Сега ще се опитам да разбера защо едното не работи ,а другото - да.
Благодаря.
" Я, шифрограма - помисли си Щирлшц.
Я, Щирлиц - помисли си Basic"
| |
Тема
|
Re: Моля за малко помош с Do Until
[re: adgj]
|
|
Автор |
Щиpлиц (разузнавач) |
Публикувано | 13.09.05 11:06 |
|
Ами, какво има за разбиране... Глей ся:
Do Until ...
...
Loop
така се задава условието ПРЕДИ изпълнението на логическия цикъл
Do
..
Loop Until ...
а така - СЛЕД логическия цикъл.
Вместо Until, на същите места може да се ползва While, което не прави нищо кой-знае колко по-добре, а прави същото като Until, само че с отрицание... Т.е. реда "Do Until A = 1" ще свърши същата работа като "Do While A <> 1". ;о) Както и да е, чети надолу...
Във втория вариант (по-горе) разчиташ, че първо ще бъде изпълнен кода в цикъла, и след това ще бъде проверено по зададено условие дали да повтори цикъла. Този вариант при процедури за "колекциониране" на нещо не върши работа.
Затова преправих кода (предишния ми постинг) така: Първо се търси поне един запис, който да отговаря на зададения критерии (1-ви ред). Не изпълнява нищо с намереното, но следва логическа проверка и влизане в цикъл с намерения елемент (2-ри ред). Ако има такъв намерен де, щото това е част от условието. Ако още на първия ред се върне "нищо", т.е. няма намерен такъв елемент - тогава изпълнението на кода въобще не влиза в цикъла, защото не отговаря на зададеното условие. Но ако има намерен, тогава влиза в Do, изпълнява каквото има за изпълнение (3-ти ред), и СЛЕД това се търси следващия елемент в базата, който да отговаря на зададения критерии за търсене (4-ти ред). Следва Loop (5-ти ред), което ще върне изпълнението обратно до Do, на който ред отново се прави проверка дали условието е изпълнено. Ако от последното търсене на данна се е върнало "нищо", тогава се прекъсва цикъла. В противен случай - се "влиза" за изпълнение на кода в цикъла... Кръга се затваря, и така получаваш колекция от елементи, като няма пропуснати, няма повторени... Същия цикъл се ползва обикновено когато използваш функцията Dir() за събиране на имена на файлове от зададена директория.
Успех.
Щирлиц
| |
|
на търпението ти.
| |
|
|
|
|